mock接口测试
一、关于Mock测试
1、什么是Mock测试?
Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
2、为什么要进行Mock测试?
Mock是为了解决不同单元之间由于偶合而难以开发、测试的问题。所以,Mock既能出现在单元测试、集成测试,系统测试过程中。
Mock最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或接口有依赖,它能模拟这些依赖。比如一段代码有这样的依赖:
当我们需要测试A类的时候,如果没有Mock,则我们需要把整个依赖数都构建出来,而使用Mock的话,就可以把结果分解,如下图:
3、Mock对象适用的场景
- 前后端项目中,后端接口尚未开发完成。
- 被测单元依赖的对象较难模拟(比如模拟支付时的各种异常条件)
4、Mock测试的优势
(1)团队并行工作
有了Mock后,前后端人员只需要定义好接口文档,就可以开始并行工作了,互不影响,只在最后联调阶段需要合作;后端与后端之间如果有接口耦合,也同样能被Mock解决;不会出现一个团队等待另一个团队的情况。
(2)测试覆盖度
假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回下,系统是否能够正常响应,但是现实很难模拟。有了mock,想要什么自己设计。
5、Mock测试的不足
mock的模拟行为与真实行为可能存在差异(返回结果是自己构造的),其结果就是虽然基于mock的测试通过了,但是基于真实对象的测试可能会存在失败。
Mock 一个 Server ,构造一个假的服务返回预期的结果,也是为了进行自己的测试。主要适用于接口&性能测试,Mock 方案和程序使用的语言无关,可以用 Java 实现,也可以用 Python 实现等。
6、Mock测试注意事项
1)测试完毕后,上线前,请一定确保 为了mock而做的相关代码/配置文件的修改,已经完全恢复。
2)mock接口只能做主流程联调/异常返回测试,不要过分依赖mock接口进行测试。当mock接口切换成实际接口后,测试/开发必须把之前的测试重新走一遍。
二、Mock测试方法
1、mocorunner下载
地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/
2、moco-runner使用
步骤:
①新建一个目录mocorunner,将moco-runner-1.3.0-standalone.jar件放入这个目录下
②编写XXX.json文件并保存
③命令行:进入mocorunner目录,执行java -jar ./moco-runner-1.3.0-standalone.jar 协议 -p 8888 -c json文件
注意:mocorunner是热部署,服务不用重启,即可完成升级操作
这是一个jar包,只要执行该jar包,指定配置文件,就可开启一个http服务器提供服务,并且修改配置文件后也无需重启服务,支持动态加载。
我使用的是moco-runner-1.3.0-standalone.jar,运行方式如下:
java -jar ./moco-runner-1.3.0-standalone.jar http -p 8888 -c demo.json
java -jar moco-runner-1.3.0-standalone.jar start -p 8888 -c XXX.json
具体其他使用方法请参照官方文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md
3、模拟接口开发核心内容
演示:第一个mock接口demo
1)在mocorunner目录下,新建一个文件demo.json,然后编辑,编辑完文件,保存。如下图
demo.json文件内容示例如下:
[ { "description":"mock接口demo", "request":{ "uri":"/demo" }, "response":{ "text":"第一个mock接口demo" } } ]
2)命令行进入mocorunner目录,
输入命令:java -jar ./moco-runner-1.3.0-standalone.jar http -p 8888 -c demo.json
3)下面进行测试,
方法1:打开浏览器输入:http://localhost:8888/demo
方法2:使用jmeter
接口地址:http://localhost:8888/demo