接口测试 怎么模拟 grpc 的响应?k8s 环境,A 服务和 B 服务在不同的 namespace 中,A 通过 grpc 调用 B 服务的接口,怎么让 B 给 A 返回一个 mock 的响应。

luckyhey · 2022年01月17日 · 最后由 luckyhey 回复于 2022年06月15日 · 4817 次阅读

怎么模拟 grpc 的响应?k8s 环境,A 服务和 B 服务在不同的 namespace 中,A 通过 grpc 调用 B 服务的接口,怎么让 B 给 A 返回一个 mock 的响应。谢谢。

共收到 8 条回复 时间 点赞

你现在碰到的是什么问题? 是不知道怎么写 rpc server 去返回 mock 响应? 还是不知道怎么劫持 A 到 B 的响应?

孙高飞 #1 回复

不知道怎么劫持。好像可以用 mitmproxy,但是不知道怎么将他们串起来。是要将 mitmproxy 制作成镜像,用 k8s 的 deployment 跑起来吗?又涉及用哪个 namespace 的问题,还有用 nodeport 还是 clusterIP 的问题。思路混乱,没有头绪。

luckyhey #2 回复

我一般的思路都是写个工具,动态的往目标 pod 里注入一个 proxy 容器, 同一个 pod 内的所有容器是用 container 网络模式启动的,共享网络。 如果需要篡改 ip 的话, 一个 iptables 命令就可以了。

孙高飞 #3 回复

您说的内容好像是 istio,我了解得很少。

https://testerhome.com/articles/27001

楼主参考一下我之前在 k8s 里玩 mock server 的帖子。 也是用的 side car 模式。 isto 确实也是这么玩的

孙高飞 #5 回复

您注入的是 mock server,那是不是也可以用这种 side car 方式注入 mitmproxy?谢谢。

luckyhey #6 回复

当然是可以的

孙高飞 #3 回复

撇开动态注入。如果一个 deployment 里面固定创建两个容器,服务 A 的 container 和 mock 服务的 container。是不是在服务 A 的 container 里执行 “iptables -t nat -A PREROUTING -p tcp --dport 7777 -j REDIRECT --to-port 6666” 类似这样的命令,就可以将服务 A 的请求转向代理到 mock 服务?其中 7777 是服务 A 的端口号,6666 是 mock 服务的端口号。

需要 登录 後方可回應,如果你還沒有帳號按這裡 注册