# 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 了