Mock Server原理
在我们平时的接口测试工作中,系统的业务很少是孤立存在的,大部分业务相互之间都是需要关联调用的。前端与后端的相互协作实现业务逻辑,接口或服务之间相互协作。或者使用第三方公司的服务等。
这些场景给我们的联调测试带来技术的挑战,那么我们应该怎么办呢?我们通常的处理方式是搭建一个临时的server,模拟服务,提供数据进行联调测试。这时mock server就闪亮登场了
首先我们先了解下mock server的作用:
图1
图2
说明:
①从图1可以看出,被测试系统依赖接口服务,外部服务依赖及模块服务依赖;
②从图2可以看出,使用mock server解决了我们对接口,外部服务,模块服务的依赖。
Mock server的使用
前置条件:已安装配置好JDK环境(如何安装可参考文章:http://www.51ste.com/share/det-761.html)
①下载moco-runner文件
下载地址:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/
当前最新版本下载地址:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.2.0/moco-runner-1.2.0-standalone.jar
下载完成可以得到 moco-runner-1.2.0-standalone.jar 文件
②在相同的目录下新建一个login.json文件
[
{
"response" :
{
"text" : "mock server start"
}
}
]
③ 启动mock server服务
java -jar moco-runner-1.1.0-standalone.jar http -p 12306 -c login.json
说明:现在,打开浏览器访问http://localhost:12306,你将看到“ mock server start”,说明mock server启动成功。就是这么的简单,mock server就搭建起来了。
模拟接口服务
①编写响应内容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"
}
}
}
]
说明:此为编写服务的请求字段及响应的字段内容,这里为POST请求,且接口为/order。(大家根据自己的需要,编写内容)
②启动mock server服务
java -jar moco-runner-1.1.0-standalone.jar http -p 12306 -c order.json
③验证我们的接口服务是否正常,这里使用 Postman 来进行验证
说明:这里的地址由我们的 ip地址+端口+接口名称 来组成,请求头(Headers)定义Content-Type为:application/json
请求的主要报文内容来源于我们定义接口的请求部分,复制过来即可,如下图
说明:响应的内容来源我们定义的接口服务的响应部分,与定义的内容进行对比,看是否一致。
思考:这里我们的参数是json格式的,如果我们为URI参数(如:/order?id=666),form参数,该如何做呢?
只需要把json改为queries 、forms就行了
使用moco-runner模拟多个接口
[ { "include" : "config/1.json" }, { "include" : "config/2.json" }, { "include" : "config/3.json" }, { "include" : "config/4.json" } ]
②控制台执行语句
java -jar moco-runner-1.2.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":"天气很好!"
}
}
}
]
使用postman请求结果如下:
mock https请求
java -jar moco-runner-1.2.0-standalone.jar https -p 443 -g global.json --https C:UsersAdministrator.keystore est.cer --cert test2021 --keystore test2021
说明:
C:UsersAdministrator.keystore est.cer //https的证书路径
--cer test2021 //密钥库密码
--keystore test2021 //密钥密码
postman使用结果:
通过上面的https命令我们可以知道,我们没有https的证书,因此首要任务是生成https的证书。
这里提供使用JDK自带工具keytool生成证书,使用文章地址:https://blog.csdn.net/CPS1016347441/article/details/102154691