如何进行mock测试_八二五八二五的博客-爱代码爱编程
一、测试背景
1.1、客户端测试面临的场景
测试场景:服务端返回异常数据的情况下,客户端如何处理?
1.2、服务端测试面临的场景
测试场景:订单系统需要用到支付系统返回的数据,但是支付系统还没有开发完成 如何提前开始测试?
二、Mock技术
Mock俗称“挡板”,在测试过程中,对于某些不容易获取的数据,用一个虚拟的对象来返 回期望的数据,从而模拟了特定的测试场景 Mock可以作用于客户端,也可以作用于服务端
2.1、客户端Mock处理
在客户端测试里,通常可以借助一些抓包工具来修改服务端的返回,达到特定的测试目的 如Fiddler、Charles
2.2、如何实现服务端Mock
方案一:让研发在代码里进行Mock
例如:
下单函数(){
//检查用户数据
// 检查商品库存
Boolean flag = 调用支付系统接口
if (flag){
修改订单状态为成功
}else{
修改订单状态为失败
} }
修改:
下单函数(){
//检查用户数据;
// 检查商品库存;
Boolean flag = true;
if (flag){
修改订单状态为成功
}
else{
修改订单状态为失败
} }
方案二:
创建一个MockServer,模拟支付系统的返回数据,两种方式实现MockServer
1、自己写代码实现
2、使用业界开源MockServer
三、开源的MockServer
moco 下载地址 https://github.com/dreamhead/moco
3.1、用法
1、配置好java环境
2、下载moco runner包
3、添加mock配置文件
4、执行命令 java -jar moco-runner-1.0.0-standalone.jar 协议类型 -p 端口号 -c 配置文
3.2、参数解释
java -jar moco-runner-1.0.0-standalone.jar 协议类型 -p 端口号 -c 配置文件
协议类型:
支持http、https、socket 端口号:
任意指定一个没有被占用的端口 配置文件:
请求和响应的配置,json格式
四、json配置文件
整体分为三部分
description(可选):
配置备注 request:接口的请求信息
response:接口的响应信息 格式
[
配置段1,
配置段2,
配置段3,
配置段n
]
4.1、场景一:没有参数的get请求
{
"description": "没有参数的get请求",
"request": {
"uri": "/mtx/query",
"method": "get"
},
"response": {
"text": "this is mtx"
}
}
4.2、场景二:有参数的get请求
{
"description": "有参数的get请求",
"request": {
"uri": "/mtx/query1",
"method": "get",
"queries": {
"id": "1",
"name": "auto"
}
},
"response": {
"text": "auto test"
}
}
4.3、场景三:参数为表单类型的post请求
{
"description": "参数为表单类型的post请求",
"request": {
"uri": "/mtx/submit",
"method": "post",
"forms": {
"username": "mtx",
"password": "123456"
}
},
"response": {
"text": "success"
}
}
4.4、场景四:参数为json的post接口
{
"description": "参数为json格式的Post请求",
"request": {
"uri": "/mtx/json/submit",
"headers": {
"content-type": "application/json"
},
"json": {
"name": "hi",
"age": "3"
}
},
"response": {
"json": {
"message": "success",
"status": "1"
}
}
}
4.5、场景五:可以重定向的场景
{
"description": "可以重定向的场景",
"request": {
"uri": "/mtx/redirect",
"method": "get",
"queries": {
"id": "1"
}
},
"redirectTo": "http://www.baidu.com"
}
4.6、场景六:返回异常状态码的请求
{
"description": "返回异常状态码的场景",
"request": {
"uri": "/mtx/query2",
"method": "get",
"queries": {
"id": "1",
"name": "auto"
}
},
"response": {
"status": "500"
}
}
4.7、场景七:响应有延迟请求
{
"description": "响应有延迟的场景,unit为mailisecond或者second",
"request": {
"uri": "/mtx/delay",
"method": "get",
"queries": {
"id": "1",
"name": "auto"
}
},
"response": {
"latency": {
"duration": 500,
"unit": "millisecond"
},
"json": {
"name": "success",
"status": "1"
}
}
}
4.8、其他场景
模拟xml格式请求
模拟文件上传
URL正则匹配