Mock的使用与Moco框架的使用

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指定配置文件

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值