简介
Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的比较复杂的对象,用一个模拟的对象来创建以便测试的测试方法。
而Mock接口,就是做一个临时用的假接口。
应用场景
mock测试场景主要是以下这些:
- 测试接口中需要依赖第三方接口返回值进行逻辑处理,例如银行的支付接口;
- 模拟异常数据返回,例如需要返回特殊字符、不同长度、类型格式等内容;
- 前后端开发并行工作调试,后端接口未完成时,前端调用Mock数据进行调试;
- 隔离环境,保证数据安全和正确性,对于POST、PUT、DELETE等请求进行隔离,防止修改数据出现其他未知错误。
我作为一个测试工程师,学习mock主要是因为工作中有需要使用。使用场景大概描述就是这样,一个后端项目,使用敏捷开发,我主要是做接口测试,需要做接口自动化。
架构要求每个迭代周期在开发交付接口前,前端和测试都对mock接口做调试和验证,在开发交付接口前测试需要交付有效的测试脚本,每次更新代码打包部署后都跑测试脚本。开发完成一个接口就用真接口替换一个mock接口。这样就能做到实时验证,及时修改问题。
而前端和后端都没精力做mock接口,就只有测试自己接这部分工作了。
如果你想往接口自动化这方面发展一下,我个人建议学习一下mock还是挺有帮助的。
Mock常用的几种方式
Mock的方法很多,这里罗列几种比较常用的:
- fiddler/Charles工具
- Mock Server-Moco
- 网上Mock平台
后面就介绍一下Mock Server-Moco这种方式。
Mock Server-Moco说明
Moco是一个简单搭建模拟服务器的框架(工具),可以模拟http、https、socket等协议。它是基于Java开发的开源项目,Github地址:https://github.com/dreamhead/moco。
Moco的实现原理比较简单,它会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起的请求满足某个条件时,就会返回指定的响应数据。
这里要注意,满足的条件和响应的数据,这两者的限制其实挺大的,这也就是mock仅仅是mock,无法取代真正的接口的原因。
Mock Server-Moco环境搭建
首先要在本地配置jdk环境,最好是jdk1.8或者更高的版本。jdk环境就不在这里展开了,网上帖子很多。
然后要下载一个jar包,地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner
现在最新的版本是1.3.0,具体可以看当时的最新版本。
Mock Server-Moco启动命令
启动比较简单,直接在dos窗口输入命令就行,命令如下:
java -jar <path-to-moco-runner> http -p <monitor-port> -c <configuration-file>
java -jar <path-to-moco-runner> http -p <monitor-port> -g <configuration-file>
- path-to-moco-runner:jar包的路径
- monitor-port:http服务监听的端口
- configuration-file:配置文件路径
两种启动方式主要是-c和-g后面跟的文件有点区别,后面会具体介绍。
Mock Server-Moco请求
创建一个json文件,名为musicName.json,内容如下:
[
{
"description": "获取歌曲名",
"request": {
"uri": "/current"
},
"response": {
"text":"Canon"
}
}
]
启动mock服务:
调用结果:
在创建一个json文件,配置一个put类型得接口,文件名为startPlay.json,内容如下:
[
{
"description": "开始播放",
"request": {
"uri": "/playMusic",
"method": "put",
"headers": {
"Content-Type": "application/json"
},
"json": {
"state": 1}
},
"response": {
"headers": {
"Content-Type": "application/json;charset=UTF-8"
},
"json":{
"error": 0,
"state": 1
}
}
}
]
启动mock服务:
调用接口:
如果你不想一个一个接口启动,想一次性将所有接口都启动,可以配置一个这样的config.json文件:
[
{"include": "musicName.json"},
{"include": "startPlay.json"}
]
然后通过这样的命令启动:
这个时候config.json里的接口都能够正常调用到。
总结
mock服务可以配置的接口类型和参数非常丰富,但是没有数据处理的能力。用的好,在敏捷开发中可以起到非常大的帮助。