这里写自定义目录标题
背景
mock测试(挡板测试)
就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
比如:测试天气这个接口,最近上海都没有下雪,那么我怎么去模拟下雪这个场景?需要等到真正下雪的哪天才可以吗?这个时候就可以通过mock来帮助我们完成下雪的场景了
- 后端代码还未开发完,前端代码需要调用后端接口进行调试,怎么办?
- 无法控制第三方系统某个接口的返回,返回的数据不满足要求?
- 需要跟第三方联调但对方还未开发完成,如何提早测试?
- 不用等开发人员开发完接口再进行自动化测试case的编写,在这个过程中可以修改、补case,在后端开发接口完成以后,只需要执行测试case,省去了很大的工作量,并且这些完善的用例脚本,用自动化去执行,效果更好。
使用 moco 工具完成mock挡板功能
1. 下载jar包
jar包下载地址 https://github.com/dreamhead/moco/releases
2. 简单启动
2.1 准备一个简单的json文件
test.json
[
{
"request": {
"method": "post",
"uri": "/test",
"headers": {
"Content-type": "application/json"
},
"json": {
"id": "12306",
"name": "moco"
}
},
"response": {
"status": "200",
"text": "hello moco!"
}
}
]
2.2 启动
java -jar moco-runner-1.5.0-standalone.jar start -p 9192 -c test.json
-p 9192 是端口 ; -c test.json 是指的配置文件
然后直接,使用postman直接访问就可以了。
注意防火墙端口开放问题
高级运用
作者这里只会列举出个人比较常用的功能,如果无法满足你的需要,建议阅读其官方文档,或许能帮你找到答案。
moco 官方文档
同一接口的不同返回
只需要,在配置文件里再加一个接口,并配上不同参数。都满足,默认匹配第一个。
[
{
"request": {
"uri": "/shop",
"struct": {
"json": {
"id": "12305"
}
}
},
"response": {
"status":200,
"headers" :{
"content-type" : "application/json"
},
"json": {
"hits": [],
"msg": "hello,12305"
}
}
},
{
"request": {
"uri": "/shop",
"struct": {
"json": {
"id": "12306"
}
}
},
"response": {
"status":200,
"headers" :{
"content-type" : "application/json"
},
"json": {
"hits": [],
"msg": "hello,12306"
}
}
}
]
字段部分匹配 SONPath
有时候我们需要模拟一些异常情况时,如果我们
每个字段都需要匹配,未免有些麻烦。但其实如果我们只需要其中部分字段,就能够满足用例,那么这个 json 路径匹配就会非常实用了。
配置文件
{
"request":
{
"uri":"test",
"json_paths":
{
"$.book[*].price": "1"
}
},
"response":
{
"text": "response for price 1 "
}
}
$ 代表顶层根节点
book[*].price :1 代表任意book数组元素满足值为1
启动,测试结果。
参数结构匹配 SON Struct JSON
仅为相同的结构匹配JSON请求,而不管实际内容是什么。
{
"request":
{
"struct":
{
"json" : {
"foo" :1
}
}
},
"response":
{
"text": "response_for_json_struct_request"
}
}
分模块
一个项目分多个模块,如果你是一个追求美观整洁的人,必然会创建多个文件代表着不同模块的功能。如何恰好你需要多个配置文件一起生效呢。
// 在根目录下新建 TodoList.json 文件,内容如下
[
{ "context": "/user", "include": "user.json" },
{ "context": "/test", "include": "test.json"}
]
那么 原路径: 192.168.32.195:9192/shop
新路径:192.168.32.195:9192/test
/shop
额,总有个结尾吧 ┓(;´_`)┏