接口测试 Easy mock 简单易用的 Mock 工具

Justin · 2021年03月29日 · 最后由 Justin 回复于 2021年03月31日 · 3389 次阅读

Easy Mock

  • 本人有多年 UI 和接口自动化经验。可提供针对个人或公司级别的培训 QQ : 40690263
    • UI 自动化技术
    • 接口自动化技术
    • 接口 mock 技术
    • 测试工具定制开发

简单、易用的接口 Mock 工具

  • 根据 Yaml 文件快速生成接口 Mock 服务
  • 要求 python 版本 > 3.7

Yaml 文件示例

example.yml

apis:
  # 最精简写法
  - url: login # 接口路径
    method: POST # 接口方法
    defined_data_list: # 在此处定义request与response的匹配关系
      [
        {
          body: { "username": "edison", "password": "123" }, # request body
          response: { "code": -1, "msg": "密码输入不正确" } # response body
        }
      ]

安装


pip install easy-mock

启动 Mock Server

启动服务
easy_mock example.yml

调用接口
curl -H "Content-Type: application/json" -X POST 'http://127.0.0.1:9000/login' -d '{"username":"edison", "password": "123"}' | python -m json.tool

功能介绍

v 1.0 主要功能

  • 根据 Yaml 文件内容返回 Mock 数据,两种方式:
    • 一、根据 request 内容返回 defined_data_list 中与之匹配的 response
    • 二、若 defined_data_list 未定义或无与 request 内容匹配的 response,则根据 response_schema 返回随机数据:
    • 支持的随机数据类型: bool, int, float, double, string
  • 根据 PB(.proto) 生成 Mock 接口文件 (yml)
  • 支持 http/https
  • 支持对 request 和 response 做定制化处理(见自定义扩展)

查看帮助

$ easy_mock -h
usage: easy_mock [-h] [-v] [-p PORT] [-https] [-req] [-res] file_path

Generate mock service according to the YAML file

positional arguments:
  file_path      yaml configuration file, directory or .proto file

optional arguments:
  -h, --help     show this help message and exit
  -v, --version  show version
  -p             mock service port
  -https         enable mock server https protocol
  -req           generate request_schema in yaml
  -res           generate response_schema in yaml

自定义扩展

在当前目录下新建 python 文件 processor.py

$ touch processor.py
$ vim processor.py

# 函数命名无限制,在yaml指定函数名即可 
def xxx_setup(req): 

    req["username"] = "abc"

    return req

def xxx_teardown(req, resp):

    resp["age"] = 100

    return resp

在 YAML 文件中新增setup or teardown字段

apis:
  login:
    name: 用户登录
    desc: 用户登录成功,接口会返回一个token
    method: POST
    setup: xxxx_setup # 指定前置处理函数名,此函数接受一个参数, 对请求体做前置操作
    teardown: xxx_teardown # 指定后置处理函数名,此函数接受两个参数, 对请求体和响应体做后置操作

Yaml 文件示例及详解 (复杂写法)

- url: login # 接口路径
  method: POST # 接口方法
  request_schema: # (可选)用于对request body做合法性校验
    {
      "type": "object",
      "properties": {
        "username": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
      },
      "required": [
          "username",
          "password"
      ]
    }
  response_schema: # (可选) 根据schema生成response随机数据  response_schema 和 defined_data_list 二者不可全为空
    {
      "type": "object",
      "properties": {
        "code": {
          "type": "integer", # 数据类型
          "maximun": 100, # 数据范围 最大
          "minimun": 1 # 数据范围 最小
        },
        "msg": {
          "type": "string"
        },
        "token": {
          "type": "string"
        },
      },
      "required": [ # required中的字段,response中必须返回, token字段则随机返回
          "code",
          "msg"
      ]
    }
  defined_data_list: # 定义request与response的匹配关系  
    [
      {
        body: { "username": "edison", "password": "123" },
        response: { "code": -1, "msg": "密码输入不正确" }
      },
      {
        body: { "password": "123" },
        response: { "code": -1, "msg": "用户名是必填的" }
      }
    ]

将 PB 转换为 Yaml

参数为.proto 文件类型时生成 yaml 文件

easy_mock server.proto -res
输出server.yml

To Do

  • 支持 Swagger 定义的接口文件
  • 支持 Request,Response schema 存放在单独的文件
  • 支持延时返回 (sleep 关键字)

参考文档

共收到 6 条回复 时间 点赞

嗨呀,大佬,项目跟另外一个开源名字起重了

别一个开源项目 有地址吗 发我看看

用 easy mock 搜索,会搜到好几个。

之前公司里有用过这个: https://github.com/easy-mock/easy-mock ,多人协作很方便,也支持 mockjs 自定义 mock 逻辑。至于命令行的以前用的 moco ,也不错。现在搞前端,直接用了 mockjs 内置到前端里面,有需要起独立服务的话加个 express 或者 koa 之类的也可以。

pb 自动转 yml 的,想了解下,转成的 yml ,实际返回 mock 数据的时候还是用 pb 二进制格式返回的吗?给的示例里没看出怎么区分用 pb 格式还是 json 格式,有点疑问。

陈恒捷 回复

yml 是我自定义的格式 可以和你理解的 yml 不一样 yml 用于控制 server 根据 request 返回匹配的数据 pb 转 yml 是转成工具支持的自定义 yml 文件 具体返回什么格式在 yml 中定义

Justin 回复

yml 里怎么定义返回的内容是 json 格式还是 pb 格式,可以给个示例吗?

正文里的复杂例子没看出哪个配置对应这个点。

陈恒捷 回复

defined_data_list: # request 与 response 的匹配关系
安装后你运行一下试试就知道了

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册