如何进行MOCK测试

发布于:2022-12-02 ⋅ 阅读:(469) ⋅ 点赞:(0)

一、测试背景

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正则匹配

moco/apis.md at master · dreamhead/moco · GitHub

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到