Toxiproxy 网络故障模拟
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/simulate-network-failures-in-integration-tests-with-toxiproxy 到 AI 助手。
技能介绍
要解决的问题
集成测试常见的坑:代码在本地跑得一切正常,一旦服务间调用出现延迟、断连或带宽受限,失败路径就完全失控。真实网络故障很难稳定复现——你没法在 CI 里随机拔掉一根网线,也没法让数据库恰好慢 1 秒。Toxiproxy 的思路是在应用与依赖之间插入一个可控的 TCP 代理,让故障成为测试中可编程的输入。
技能如何工作
核心能力与关键步骤:
- 流量过代理:Agent 把应用对外部依赖(如 MySQL、HTTP 服务)的请求路由到受控的 TCP 代理,而不是直连。
- 按需注入毒性:通过 HTTP API 在运行时对代理应用 toxics,例如
latency延迟、down断连、带宽限制等故障模式。 - 验证降级行为:测试后报告哪些依赖路径能优雅失败(fail gracefully),哪些在压力下直接崩溃(crack under stress)。
一个例子:向 MySQL 的响应注入 1000ms 延迟,观察调用方的超时处理是否得当。代理本身用 Go 写成,其健康状态可通过 HTTP 操作。
边界与注意点
- 前置条件:需要 Toxiproxy 服务端,加上测试工具可访问的客户端库(如
toxiproxy-python、toxiproxy-node-client)或 HTTP API。 - 上游限制:跨平台部署需要 root 权限,这在测试环境中可能成为障碍,需先确认 CI 容器是否满足。
- 适用场景是开发、CI 与事故复现中的真实调用链故障注入,不替代单元测试里的 mock。
使用场景
- CI流水线里为微服务集成测试注入数据库延迟,验证请求超时和降级逻辑是否生效。
- 开发时给外部HTTP API调用制造断连,检查应用是否触发重试并记录日志。
- 事故复盘时复现网络拥塞导致的调用失败,定位哪些下游依赖会直接崩溃。
适合人员
- 后端工程师:需要在CI中验证服务间调用在延迟和断连下的表现,避免线上雪崩。
- SRE:要复现网络故障导致的事故,确认哪些依赖路径缺乏优雅降级和重试机制。
- QA测试工程师:负责编写集成测试用例,需要注入可控的网络异常来覆盖故障分支。