mock测试的概念:
mock测试:在测试过程中,对于某些不容易构造的或者不容易获取的对象,可以用一个虚拟对象来代替测试中的方法
接口mock测试:在接口测试过程中,对于某些不容易构造的或者不容易获取的接口,可以用一个模拟的接口来代替测试
mock的使用场景:
1.前端已开发完成,后端还未开发完成,
2.公司内部需要调用第三方接口(如需要调用微信支付或支付宝支付时不可能每次测试都支付)
3.对于某些不容易构造的或者不容易获取的对象使用mock进行模拟(比如比较难出现的接口返回异常等情况也可以使用mock进行模拟)
mock的作用:
1.可以解除测试对象对外部服务的依赖,使测试用例可以独立运行
2.替换外部服务调用或者一些速度较慢的动作,提升测试用例的运行速度
3.模拟异常逻辑,异常逻辑往往很难触发,通过mock可以人为的控制触发异常逻辑
4.团队可以并行工作
实现方式:
核心实现:搭建一个mock server,通过服务提供mock接口
具体实现:
- 1.使用第三方mock平台:fiddler,postman
- 2.自己开发mock服务:python+Flask开发mock服务
- 3.使用mock框架搭建mock服务:使用moco框架:https://zhuanlan.zhihu.com/p/159164380
Moco框架::
项目地址:https://github.com/dreamhead/moco
1.下载moco-xxxx.jar文件
2.在moco-xxx.jar同一级目录下创建test.json文件,内容为:
[
{
"description" :"首页",
"request" :
{
"uri" : "/index"
},
"response":{"text":"测试响应"}
}
]
3.运行命令:java -jar mock.jar文件 http -p 要设置的端口号 -c json文件地址
比如java -jar moco-runner-1.3.0-standalone.jar http -p 8888 -c test.json
如果和上图一样就代表成功了,此时访问127.0.0.1:8888/index就会提示测试响应,如下图:
深入使用Moco框架来模拟mock返回数据:
- 设定接口路径,通过uri参数定义
[
{
"description" :"首页",
"request" :
{
"uri" : "/index" //uri 为接口路径
},
"response":{"text":"测试响应"}
},
{
"description" :"首页",
"request" :
{
"uri" : "/s/d/data" //uri 比如我们修改路径为/s/d/data这可以这样写
},
"response":{"text":"测试响应"}
}
]
- 设置查询参数,通过queries参数定义
[
{
"description" :"首页",
"request" :
{
"uri" : "/index",
"queries":{
"param" : "blah" //设置查询参数为 param=blah
}
},
"response":{"text":"测试响应"}
]
- 设置请求头,通过headers参数定义
[
{
"description" :"首页",
"request" :
{
"uri" : "/index" ,
"headers" :
{
"content-type" : "application/json" //设置请求头为 "content-type" : "application/json"
}
},
"response":{"text":"测试响应"}
]
- 设置请求方式,通过method参数定义
[
{
"description" :"首页",
"request" :
{
"method" : "get", //设置请求头为get
"method" : "post", // 设置请求头为post
"method" : "put", //设置请求头为put
"method" : "delete", //设置请求头为delete
"uri" : "/index" ,
"headers" :
{
"content-type" : "application/json"
}
},
"response":{"text":"测试响应"}}
]
- 设置表单请求体,通过forms参数定义
[
{
"description" :"首页",
"request" :
{
"method" : "post",
"uri" : "/index" ,
"forms": {
"username": "tom",
"password": "123456"}
},
"response" : {"text":"测试响应"}
}
]
- 设置json请求体,通过json参数定义
[
{
"description" :"首页",
"request" :
{
"method" : "post",
"uri" : "/index" ,
"json": {
"username": "tom",
"password": "123456"} //定义json请求体为username=tom,password=123456
"headers" :
{
"content-type" : "application/json"
}
},
"response":{"text":"测试响应"}
]
- 设置json提交文件,通过file参数定义
[
{
"description" :"首页",
"request" :
{
"method" : "post",
"uri" : "/index" ,
"file":
{
"json": "your_file.json"
} ,
"headers" :
{
"content-type" : "application/json"
}
},
"response":{"text":"测试响应"}
}
]
- 设置HTTP响应状态码,通过status参数定义
[
{
"description": "首页",
"request": {
"uri": "/index2"
},
"response": {
"status": 404, //设置响应状态码
"text": "error"
}
}
]
定义JSON响应数据,通过json参数定义
[
{
"description": "登录",
"request": {
"uri": "/login"
},
"response": {
"headers": {
"Content-Type": "application/json;charset=UTF-8"
},
"json": { // 设置响应数据
"code": "10000",
"msg": "操作成功",
"data": {
"uid": 2,
"token": "xxx"
}
}
}
}
]
2.5 Moco引入配置文件
moco支持在配置文件中引入其他配置文件,这样可以分服务/模块定义配置文件,便于对配置文件的管理。
- 实现步骤:
分服务/模块定义配置文件,如分别定义index.json和login.json文件
[
{
"description": "首页",
"request": {
"uri": "/index"
},
"response": {
"text": "hello world"
}
}
]
[
{
"description": "登录",
"request": {
"uri": "/login"
},
"response": {
"text": "success"
}
}
]
定义启动配置文件,如config.json并引入其他配置文件
[
{"include": "index.json"},
{"include": "login.json"}
]
启动服务:
java -jar moco-runner-1.1.0-standalone.jar http -p 9090 -g config.json
注意:通过-g config.json指定配置文件