使用moco 完成挡板测试

背景

mock测试(挡板测试)就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
比如:测试天气这个接口,最近上海都没有下雪,那么我怎么去模拟下雪这个场景?需要等到真正下雪的哪天才可以吗?这个时候就可以通过mock来帮助我们完成下雪的场景了

  1. 后端代码还未开发完,前端代码需要调用后端接口进行调试,怎么办?
  2. 无法控制第三方系统某个接口的返回,返回的数据不满足要求?
  3. 需要跟第三方联调但对方还未开发完成,如何提早测试?
  4. 不用等开发人员开发完接口再进行自动化测试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

额,总有个结尾吧 ┓(;´_`)┏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值