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

Justin · March 29, 2021 · Last by Justin replied at March 31, 2021 · 3427 hits

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 条回复 时间 点赞

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

Justin #2 · March 30, 2021 Author

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

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

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

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

Justin #4 · March 31, 2021 Author
陈恒捷 回复

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

Justin 回复

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

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

Justin #6 · March 31, 2021 Author
陈恒捷 回复

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

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up