Doraemon

一个简单的 API Mock Server,让你脱离后端进行高效的接口数据测试,同时无需侵入客户端代码

安装

在命令行运行:

    $ [sudo] gem install doraemon

等待安装完成

使用方法

1. 创建 Mock 文件

将 API 地址 path 部分中的斜杠(/)替换为下划线(_),并追加文件扩展名(.rb / .json / .api 均可)

例如:v4/homepage/recommend 接口的 Mock 文件就是 v4_homepage_recommend.rb

2. 启动 doraemon

在 Mock 文件所在目录运行

    $ doraemon

此时可以看到 doraemon 已经将目录下所有 Mock 文件载入

[~/api]  ls
v3_homepage_tiger_list.rb   v4_homepage_recommend.rb
[~/api]  doraemon 
/v4/homepage/recommend  =>  v4_homepage_recommend.rb
/v3/homepage/tiger/list  =>  v3_homepage_tiger_list.rb
......

3. 测试设备连接代理

将测试设备的代理设置到 doraemon 的默认 4000 端口上

4. 安装 SSL 证书(如需调试 HTTPS 接口)

打开手机浏览器,访问 doraemon 的 4001 端口,即可下载安装 SSL 证书

使用案例

例1. 直接 Mock JSON 数据

假设我们想测试首页搜索栏中的提示文案,涉及 v3/word/default接口 创建 v3_word_default.rb 文件,内容如下:

{
  "code": 0,
  "res": {
    "id": 2018050924,
    "hintWord": "天王盖地虎",
    "word": "宝塔镇河妖"
  },
  "msg": "请求已成功处理"
}

切换 tab 至首页,可以看到上方搜索栏的提示文案已被 Mock 数据替代

例2. 操作请求参数

假设我们想测试优惠券兑换相关流程,涉及 v4/activity/coupon/code/exchange 接口 创建 v4_activity_coupon_code_exchange.rb 文件,内容如下:

# 通过 _params 变量访问请求的参数
correct = _params['exchageCode'] == 'abc123'
{
  'code': correct ? 0 : -1,
  'msg': correct ? '兑换成功' : '兑换码无效'
}

这样,当我们输入兑换码 abc123 进行验证,将会返回成功的数据,其他情况均为失败的结果

例3. 获取原始返回数据

假设我们想调试个我的页面的会员信息展示,涉及 v2/users/center 接口 创建 v2_users_center.rb 文件,内容如下:

# 通过 _result 变量访问原始的返回数据
_result['res']['level'] = 3
_result['res']['score'] = 666666
_result

切换到我的页面,可以发现等级已经被改写成 3,分数被改为 66666,如果想测试其他等级的数据,直接修改保存即可。

⚠️ 所有 Mock 数据文件最后一个表达式必须是这个文件的返回值,比如例3中,如果缺额少最后一行的 _result,那该文件返回的就是最后那句赋值表达式的值(即666666)

参数

指定端口

    $ doraemon --port=5000 

这时 API 监听端口就是5000,而证书下载的端口再加1也就是5001

指定目录

    $ doraemon --root=~/api

指定工作目录为 ~/api,可以在这个目录下维护一些测试 API 文件

Tips:

  1. API 的修改是支持热重载的,即修改文件内容无需重启服务。但增加 API 文件是需要重启的,后期必要的话可以添加更完善的热重载机制

  2. iOS 端可以通过 Shadowrocket 创建一个 Today Widget 快速切换是否 Mock,不过这个工具是收费的

  3. 使用时可以固定一个 api 目录(假设 ~/api),这时你可以在 .bash_profile 中增加一行

    alias mock='doraemon --root=~/api --port=4000'
    

然后运行以下命令

    $ source ~/.bash_profile

以后只要打开 Terminal 执行命令 mock 就可以开始以 ~/api 为工作目录进行数据 mock 了