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. 安装 SSL 证书(如需调试 HTTPS 接口)
打开手机浏览器,访问 doraemon 的 4001 端口,即可下载安装 SSL 证书
4. 测试设备连接代理
将测试设备的代理设置到 doraemon 的端口上(默认 4000)
使用案例
例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:
-
API 的修改是支持热重载的,即修改文件内容无需重启服务。但增加 API 文件是需要重启的,后期必要的话可以添加更完善的热重载机制
-
iOS 端可以通过 Shadowrocket 创建一个 Today Widget 快速切换是否 Mock,不过这个工具是收费的
-
使用时可以固定一个 api 目录(假设 ~/api),这时你可以在 .bash_profile 中增加一行
alias mock='doraemon --root=~/api --port=4000'
然后运行以下命令
$ source ~/.bash_profile
以后只要打开 Terminal 执行命令 mock 就可以开始以 ~/api 为工作目录进行数据 mock 了