这里写自定义目录标题
- 背景
- 使用 moco 工具完成mock挡板功能
- 1. 下载jar包
- 2. 简单启动
- 2.1 准备一个简单的json文件
- 2.2 启动
 
- 高级运用
- 同一接口的不同返回
- 字段部分匹配 SONPath
- 参数结构匹配 SON Struct JSON
- 分模块
 
 
背景
mock测试(挡板测试)就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
 比如:测试天气这个接口,最近上海都没有下雪,那么我怎么去模拟下雪这个场景?需要等到真正下雪的哪天才可以吗?这个时候就可以通过mock来帮助我们完成下雪的场景了
- 后端代码还未开发完,前端代码需要调用后端接口进行调试,怎么办?
- 无法控制第三方系统某个接口的返回,返回的数据不满足要求?
- 需要跟第三方联调但对方还未开发完成,如何提早测试?
- 不用等开发人员开发完接口再进行自动化测试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
额,总有个结尾吧 ┓(;´_`)┏
















![[代码审计]记一次简单的java代码审计](https://i-blog.csdnimg.cn/direct/087bb69a2ea54040a83fac10c98ea2bb.png)


