一,关于Mock测试
1,什么是Mock测试?
Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
2,为什么要进行Mock测试?
Mock是为了解决不同单元之间由于偶合而难以开发、测试的问题。所以,Mock既能出现在单元测试、集成测试,系统测试过程中。
Mock最大的功能是帮你把单元测试的耦合分解开,如果你的代码对另一个类或接口有依赖,它能模拟这些依赖。比如一段代码有这样的依赖:
当我们需要测试A类的时候,如果没有Mock,则我们需要把整个依赖数都构建出来,而使用Mock的话,就可以把结果分解,如下图:
3,Mock对象适用的场景
- 前后端项目中,后端接口尚未开发完成。
- 被测单元依赖的对象较难模拟(比如模拟支付时的各种异常条件)
4,Mock测试的优势
(1)团队并行工作
有了Mock后,前后端人员只需要定义好接口文档,就可以开始并行工作了,互不影响,只在最后联调阶段需要合作;后端与后端之间如果有接口耦合,也同样能被Mock解决;不会出现一个团队等待另一个团队的情况。
(2)测试覆盖度
假如有一个接口,有100个不同类型的返回,我们需要测试它在不同返回下,系统是否能够正常响应,但是现实很难模拟。有了mock,想要什么自己设计。
5,Mock测试注意事项
1)测试完毕后,上线前,请一定确保 为了mock而做的相关代码/配置文件的修改,已经完全恢复。
2)mock接口只能做主流程联调/异常返回测试,不要过分依赖mock接口进行测试。当mock接口切换成实际接口后,测试/开发必须把之前的测试重新走一遍。
二、Mock测试方法
- Mock Server-Moco
这是一个jar包,只要执行该jar包,指定配置文件,就可开启一个http服务器提供服务,并且修改配置文件后也无需重启服务,支持动态加载。我使用的是moco-runner-0.10.2-standalone.jar,运行方式如下:
java -jar moco-runner-0.10.2-standalone.jar start -p 8080 -c XXX.json
XXX.json就是我们的mock配置文件,比如:
[ { "request" : { "uri" : "/foo" }, "response" : { "text" : "Hello, Moco" } }, { "request" : { "uri" : "/foo1" }, "response" : { "text" : "Hello, gongf" } } ]
以上就可以实现当我们访问127.0.0.0:8080/foo时,返回一个json为{"text":"Hello, Moco"}。
具体其他使用方法请参照官方文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md
2,fiddler
fiddler大家都很熟悉了,在windows环境环境可以自定义返回内容。
还有一个其他mock工具,大家都是通过编写js代码或者python,java等代码达到mock目的,此次就不再介绍了。