工作过程需要验证微服务的基本功能是否正常,但是因为 SE 设计的比较烂,微服务耦合的比较严重,无法单独构造测试场景,所以需要进行接口级别的 mock. 以前是自己写个微服务,模拟对端微服务返回,但是这样比较麻烦,所以构思了下面的工具.
通过 iptables 进行 nat, 然后使用 mitmproxy 对码流进行拦截和篡改,达到 mock 服务的目的,目前支持 restful 接口的 mock
# 架构#
没有 naughtymonkey 时候:
服务 A (1.1.1.1) --> 服务 B (2.2.2.2:8888) 接收请求
服务 A (1.1.1.1) <-- 服务 B (2.2.2.2:8888) 返回响应
使用 naughtymonkey 时候:
服务 A (1.1.1.1) --> 服务 B 网卡 (iptables) --> naughtymonkey (3.3.3.3:8080) --> 服务 B (2.2.2.2:8888)
服务 A (1.1.1.1) <-- 服务 B 网卡 (iptables) <-- naughtymonkey (3.3.3.3:8080) 此处可以篡改响应 <-- 服务 B (2.2.2.2:8888) 返回响应
1 在服务 B 上面执行 monkeyagent.sh 配置 iptables 规则,把服务 A 请求的码流都透传到 naughtymonkey
2 在 naughtymonkey 的界面配置拦截的 URL 地址,只有匹配到 URL 才会进行拦截操作
3 在 naughtymonkey 的界面配置拦截和篡改任务,当匹配到条件的请求过来后就按照任务中的码流进行返回
# 依赖#
1 naughtymonkey 依赖 mongodb, 所以需要部署 mongodb 2 python3, 同时依赖的包很多,懒的梳理了,哪个没有自己添加吧
github 地址: https://github.com/flyfire100/naughtymonkey