高效接口测试(六)

02 更智能地模拟数据:如何开发好的Mock服务

2.2 有什么工具可以快速建立起一个Mock服务呢?

2. Moco

GitHub项目主页:https://github.com/dreamhead/moco

Moco之所以很受欢迎是因为这个项目主要特点是:简单、轻量、功能完全够你用。

安装与配置

下载地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.1.0/moco-runner-1.1.0-standalone.jar

整个Moco服务就是一个jar包,如果想要启动它只需要你本地安装了Java,然后执行一个命令。

java -jar moco-runner-<version>-standalone.jar http -p 12306 -c foo.json
  • -p 启动的服务端口号
  • -c 配置文件路径

这个json格式的配置文件,才是Moco的核心。你想要模拟什么内容的返回,都靠它来决定。

编写配置文件

我们首先按照官方给出的示例,新建一个foo.json,模拟一个最简单的接口返回。

[
  {
    "response" :
      {
        "text" : "Hello, Moco"
      }
  }
]

(foo.json)

此时启动Moco服务

java -jar moco-runner-<version>-standalone.jar http -p 12306 -c foo.json

访问 http://localhost:12306,你会看到一个Html响应,内容为:Hello, Moco

moco1.jpg

配置文件语法规范

学会了它的简单使用,根据我的风格,下面就要介绍这个Json配置文件里,到底都能写什么?如何模拟复杂一点的需求?

总体格式

我们稍微观察一下就会发现,配置文件格式很简单。总体是一个大的列表,每一个接口就是一个大的{ }。

配置二级路径

现在的Moco服务只有一个地址,就是本地12306。我想继续配置二级、三级路径,比如增加一个/user/login代表登录接口。只需要在当前接口的区域增加一个request,填写url皆可。格式如下:

[
  {
    "request" : {"uri": "/user/login"},
    "response" : {"text" : "Hello, Moco"}
  }
]

访问 http://127.0.0.1:12306/user/login

moco2.jpg

模拟一个Json格式的返回
[
  {
    "request" : {
    "uri": "/user/login", 
    "method" : "get",
    },
    
    "response" : {
    	"status": 200,
    	"headers": {"content-type": "text/x-json;charset=UTF-8"},
    	"json": {"code": 0, "message": "login"}

	}
  }
]

访问 http://127.0.0.1:12306/user/login

moco3.jpg

携带请求参数--query
[
  {
    "request" : {
    	"uri": "/user/login",
    	 "queries": {
            "name": "admin",
            "pwd": "123456"
        }
 
	},
    "response" : {
    	"status": 200,
    	"headers": {"content-type": "text/x-json;charset=UTF-8"},
    	"json": {"code": 0, "message": "login"}

	}
  }
]

访问:http://127.0.0.1:12306/user/login?name=admin&pwd=123456

moco4.jpg

匹配请求参数--query
[
  {
    "request" : {
    	"uri": "/user/login",
	    "queries": {
	       "page": { "match": "[0-9]{1,}" }
	    }
 
	},
    "response" : {
    	"status": 200,
    	"headers": {"content-type": "text/x-json;charset=UTF-8"},
    	"json": {"code": 0, "message": "login"}

	}
  }
]

访问:http://127.0.0.1:12306/user/login?page=7

moco5.jpg

Post 请求参数--form表单
[
  {
    "request" : {
    	"uri": "/user/login",
    	"method" : "post",
	    "forms": {
          "name" : "admin",
          "pwd"  : 123456
        }
 
	},
    "response" : {
    	"status": 200,
    	"headers": {"content-type": "text/x-json;charset=UTF-8"},
    	"json": {"code": 0, "message": "login"}

	}
  }
]

使用Postman访问:http://127.0.0.1:12306/user/login

moco6.jpg

我们演示了Moco Json Api的基本语法使用,包括模拟各种请求参数格式和响应格式,更多详细内容大家参考它的官方文档,里面有很清晰地描述。

https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

Moco功能强大,常规的Http场景比如:Cookie、重定向全部支持。但是习惯平时深度思考的同学,肯定会觉得哪里不对。

我们现在的Mock服务还有很多缺点,比如无法根据参数的不同,动态返回响应内容;无法筛选请求(如果要Mock的话,所有的请求都要在Moco启动的服务器中处理,想保留部分接口不使用Mock功能就做不到)。我们在下个小节中会进一步改造我们利用Moco搭建起来的Mock功能。