为什么要mock
1、已开发完成的模块方法依赖于未开发完成的模块,测试提前介入。
2、模拟服务端返回的一些异常数据。
3、上游接口压测时需要下游接口及时返回数据,满足上游接口的调用频度,依赖接口多时减轻工作量。
什么是mock
使用各种技术手段模拟出各种需要的资源以供测试使用。
什么时候用
适用于接口测试和性能测试,mock一个server,构造一个假的服务返回预期的结果,与代码程序使用的语言无关。
例如:
客户端A 调用 被测系统B,被测系统B依赖外部服务a,b,c,此时,如果依赖服务a,b,c中的任何一个未被开发完,该如何进行测试呢?
解决方案:
在被测系统中加一个mock服务,让mock服务来临时模拟依赖服务a,b,c
如何使用
1、安装并配置jdk环境变量(https://blog.csdn.net/q_Catherine/article/details/89199256 )
2、上传moco-runner-<版本号>-standalone.jar到linux指定目录
3、创建json文件放到2中指定目录
4、执行命令:java -jar moco-runner-<版本号>-standalone.jar http -p port -c xxx.json
具体适用场景
4中的json可以是哪几种类型呢?
1、get请求不传参
[{"request":{"uri":"请求地址"},"response":{"text":"返回值"}}
]
2、get请求传参,格式是key=value
[{"request":{"uri":"请求地址","queries":{"param":"请求参数"}},"response":{"text":"返回值"}}]
3、get请求传参+服务器返回json数据+status值,格式是key=value
[{"request":{"uri":"请求地址","queries":{"param":"请求参数"}},"response":{"json":{"key":"json","status":200}}}]
4、get请求传参+服务器返回值json数据+status值,格式是{“key”:“value”}
[{"request":{"uri":"请求地址","json":{"param":"请求参数"}},"response":{"json":{"key":"json","status":200}}}]
5、post请求传参+服务器返回值json数据+status值,格式是{“key”:“value”}
[{"request":{"uri":"请求地址","method":"POST","json":{"param":"参数"}},"response":{"json":{"key":"value","status":200}}}
]
6、post请求传参+服务器返回值json数据+status值,格式是key=value
[{"request":{"uri":"请求地址","method":"POST","forms":{"param":"参数"}},"response":{"json":{"key":"json","status":200}}}
]
7、post请求传参+服务器返回值json数据+status值,格式是{“key”:“value”}
[{"request":{"uri":"请求地址","method":"POST","json":{"param":"参数"}},"response":{"json":{"key":"json","status":200}}}
]
8、请求加上heaser+cookie
[{"request":{"uri":"请求地址","method":"POST","forms":{"param":"参数"},"headers":{"content-type":"application/json","connection":"keep-alive","content-encoding":"gzip"},"cookies":{"login":"true"}},"response":{"json":{"key":"json","status":200}}}
]
9、请求地址正则化
[{"request":{"uri":{"match":"/api/XXX-\\d+\\.html"},"queries":{"param":"请求参数"}},"response":{"json":{"key":"json","status":200}}}]
10、配置文件
将1-9中单独创建的多个json文件放在config.json中,解决以上java -jar每次启动只能有1个json文件,只能处理1个接口的问题。
config.json配置:
[ { "include": "XXX1.json" }, { "include": "XXX2.json" },{ "include": "XXX3.json" },{ "include": "XXX4.json" }
]
或者配置为(更改请求路径):
[ { "context": "/mock", "include": "XXX1.json" }, { "context": "/mock", "include": "XXX2.json" }
]
启动命令改为:
java -jar moco-runner-<版本号>-standalone.jar start -p port -g config.json
Moco支持动态加载配置文件,修改不需要重启服务。
Moco的使用很简单,配置也很方便,目前更是提供了http、rest、socket服务。但是也仅仅是能stub出接口,模拟出简单的场景。如果接收到请求后需要做一些处理,如需查询数据库、进行运算、或者一些复杂的操作,就无能为力了。所以是否选用moco,就取决于开发者是否只是需要一个简单的模拟服务器。