在我们平时的接口测试工作中,系统的业务很少是孤立存在的,大部分业务相互之间都是需要关联调用的。前端与后端的相互协作实现业务逻辑,接口或服务之间相互协作。或者使用第三方公司的服务等。
这些场景给我们的联调测试带来技术的挑战,那么我们应该怎么办呢?我们通常的处理方式是搭建一个临时的 server,模拟服务,提供数据进行联调测试。这时,被称作 mock server 的一类工具就闪亮登场了。
mock server 这类工具的作用就是假扮一个请求的接收方,通常会以硬编码的方式来设定:当收到 xxx 请求时,就返回 xxx 响应信息。
这样,我们就可以通过向它发送请求,来验证请求的发送方的逻辑是否正确。
moco-runner
moco-runner 就是一种 mock server 类的工具。它的官方网址是 https://github.com/dreamhead/moco 。
从官网上,我们可以下载到 moco-runner 的独立运行版。例如:moco-runner-1.5.0-standalone.jar 。
将 moco-runner-1.5.0-standalone.jar 放到某处<small>(我放置在了我的 D:\ProgramFiles\moco-runner 目录下)</small>。
在 moco-runner 的同级目录下,创建一个 .json 文件,例如,foo.json,在其中写入如下内容:
[
{
"request": {
"uri": "/"
},
"response" : {
"text" : "Hello, Moco"
}
}
]
通过如下命令,以上述的 foo.json 启动 moco Http Server:
java -jar moco-runner-1.5.0-standalone.jar http -p 12306 -c foo.json
现在,通过浏览器访问 http://localhost:12306 ,你将会在页面上看到 "Hello, Moco" 字样。
模拟接口服务的实例
在 moco-runner 的同级目录下,创建一个 order.json 文件,在其中写入如下内容:
[
{
"request": {
"method": "post",
"uri": "/order",
"json": {
"productType": "NORMAL_CARGO",
"shipConsigneeId": "135401",
"sRegionId": 22592,
"customerOuId": 12707,
"boBusinessTypeId": 10637
}
},
"response": {
"json": {
"customerOuId": "12707",
"projectId": 34512,
"carrierId": "2343"
}
}
}
]
该 json 文件时在设定 moco-runner Http Server 请求字段及响应的字段内容。在上述例子中,为 POST 请求,且接口为 /order 。
如之前的例子一样,启动 mock server 服务,不过,这次指定的是 order.json 文件:
java -jar moco-runner-1.5.0-standalone.jar http -p 12306 -c order.json
使用 postman / apifox / http-client 等工具进行测试。我这里使用的是 httpclient:
POST http://localhost:12306/order
Content-Type: application/json
{
"productType": "NORMAL_CARGO",
"shipConsigneeId": "135401",
"sRegionId": 22592,
"customerOuId": 12707,
"boBusinessTypeId": 10637
}
向 moco-runner Http Server 发送 order.json 中所描述的 POST 请求,不出意外,会得到 order.json 中所描述的响应信息。
思考:这里我们的参数是json格式的,如果我们为 URI 参数(如:/order?id=666),form 参数,该如何做呢?
只需要把 json 改为 queries 、forms 就行了。更多详情参见官网文档 apis.md 。
使用 moco-runner 模拟多个接口
新建 global.json 文件,并将之前的 foo.json 和 order.json 等多个接口描述文件写入其中:
[
{
"include" : "foo.json"
},
{
"include" : "order.json"
}
]
以 global.json 作为配置文件启动 moco-runner Http Server:
java -jar moco-runner-1.5.0-standalone.jar http -p 12306 -g global.json
如果解决返回结果中文字符乱码
在 response 中添加设置编码格式为 "utf-8":
"headers":{
"Content-Type":"application/json;charset=utf-8"
}
例如:
[
{
"request": {
"method":"get",
"uri":"/test/weather",
"queries": {
"city":"chengdu"
}
},
"response": {
"headers":{
"Content-Type":"application/json;charset=utf-8"
},
"json":{
"code": 200,
"message":"天气很好!"
}
}
}
]
网友评论