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