接口测试 关于 Mock 模拟数据关联型 Response,请大家推荐一下好的方法

JackyRoc · 2018年03月26日 · 最后由 达峰的夏天 回复于 2019年12月15日 · 4588 次阅读

场景:需要模拟第三方响应,POST 内容为 json,相应内容需要包含 POST 内容中的 ID 信息。

思路:我的想法是,能够通过 req.content 类的方法 +json_path 把 ID 值取出来赋值变量 A,然后在 Response 模板中使用变量 A 作为返回值 JSON 的一部分内容。

问题:
看了一些 MOCK 工具,如 easy_mock、zmock 暂时不支持;
moco 的说明文档太简单,支持 req.content 和 json_path,但貌似只能返回这个单独的值,不能把获取的变量作为 Response 模板的一部分;
AnyProxy 感觉更灵活,扩展性更强,但依然没研究明白这个该如何写。

请各位大佬帮忙解答一下这个 mock 场景的实现方法,能详细一点最好,谢谢。
在此基础上,最好能满足:
1.可动态编辑接口模拟配置,不需要重启
2.可以只代理部分接口,不用取代所有接口
3.可以获取当前日期等系统信息作为变量使用

非常感谢!!

共收到 19 条回复 时间 点赞

http://www.cnblogs.com/fengyca/p/8629937.html
看看这个是不是你想要的?可以结合任一网络代理拦截那个请求并重定向到这个平台就 ok 了。不用代理全部接口,数据存放到 mysql 中,配置后无需重启代理,可以添加内置方法生成你想要的数据。

yca 回复

谢谢,自己搭建 web 服务是可以实现,但作者没有开源,开发量比较大,而且我不会 Django。。。🙀

谢谢帮助,这个框架确实很轻量,就是说明比较简单,不明白如何加载报文模板,如何配置同时代理多个接口地址

6楼 已删除

谢谢帮助,启动的时候报错了,“Error: Please install sqlite3 package manually”,macaca-datahub 重装过,sqlite3 也手动安装过,都不行

JackyRoc 回复

需要 node8 以上版本

谢谢,之前装的 node8.6,说版本太低,装了最新的 node9.9 就报了那个错,现在装 node8.10 可以了

不过在接口编辑,添加了字段描述,没有作用,报文体是空的,只有报文头编辑有效果;另外,这个该如何关联 POST 请求的 JSON 内容,谢谢

题主 你这个需求和我现在开发的工具有点相似,
我这边是 :
数据管理暂时用的是 json 文件,支持请求重定向 ,post 请求参数修改,响应参数修改,不会影响其他业务的正常通信。

Silent Blue 回复

好吧,难道这种需求没有现成的平台可用,只能定制开发了?

我之前也有这个需求,用 Django 搭的服务,挺方便的

天才zdx 回复

也是 Django 吗,好吧,我学习一下,能说一下大概做法吗?谢谢

JackyRoc 回复

照着 Django 教程就可以,如果你们这边有存数据可以直接连你们的数据库,然后根据需要写返回逻辑就行了,和三方合作没有 mock 确实十分难受

JackyRoc 回复

你要只是 mock 返回的话,搭个服务其实就可以,前端也可以不用写。

@jackyroc apimock 简单用目前支持 2 种

1.对某一个接口轮询触发 mock 一种 fuzz。每次触发这个接口时更换一种 fuzz。当所有 fuzz 都应用过后再 mock 下一个新的接口

2.自定义注入一种 mock fuzz 如
python proxy.py -a /api/user/get -k re:name="H1 \u266a@\u5c0f\u8776\u6c42\u5b88\u62a4"
对 api/user/get 接口 正则找 name 字段的值替换为 H1 \u266a@\u5c0f\u8776\u6c42\u5b88\u62a4,其余内容不变
不同的注入可以动态添加 无需重启 mockserver

@jackyroc 定义指定 mock 某些域名 通过修改 fiddlerjs/fiddler.js 种的 filterUrl="panda.tv“ 即可

JackyRoc 回复

在 Ubuntu 上启动 DataHub,报这个错 “Error: Please install sqlite3 package manually”,node 版本 8.10,错误信息如下:
/usr/local/lib/node_modules/macaca-datahub/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:31
throw new Error('Please install sqlite3 package manually');
^

Error: Please install sqlite3 package manually
at new ConnectionManager (/usr/local/lib/node_modules/macaca-datahub/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:31:15)
at new SqliteDialect (/usr/local/lib/node_modules/macaca-datahub/node_modules/sequelize/lib/dialects/sqlite/index.js:14:30)
at new Sequelize (/usr/local/lib/node_modules/macaca-datahub/node_modules/sequelize/lib/sequelize.js:239:20)

哪位同学能帮忙解决下

aowuyang 回复

用 cnpm 安装呢?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册