停止 Mocking 一切:如何在终端中测试 API 弹性(Curl + Chaos Proxy)
Source: Dev.to
介绍
“在我的机器上可以运行。”
我们都说过这句话。但当第三方 API 响应需要 15 秒时,你的 bash 脚本还能正常工作吗?你的后端服务能否优雅地处理支付提供商突然激增的 503 错误?
仅仅为了在脚本中测试一个简单的重试逻辑而编写完整的 mock 服务器往往大材小用。在本教程中,我将展示一种更快捷的方式:直接在终端进行混沌工程。
我们将使用 curl 和基于云的 Chaos Proxy,在不修改任何应用代码的情况下向真实网络请求注入故障。
问题:本地主机太完美
在本地开发时,网络延迟几乎为零。API 要么正常(200 OK),要么不可达(Connection Refused)。但在生产环境中,你会遇到:
- 高延迟 – 服务器繁忙。
- 间歇性故障 – 5 % 的请求会丢失。
- 限流 – 达到速率限制。
在终端中模拟这些情况通常需要复杂的 iptables 规则或本地工具如 tc(流量控制)。其实还有更简单的方法。
解决方案:云端 Chaos Proxy
我们不需要配置操作系统,而是将特定请求通过一个能够根据我们定义的规则破坏流量的代理进行转发。
本文使用 chaos‑proxy.debuggo.app,但该概念同样适用于任何可编程代理。
视频指南(1:27)
想观看视频?这里有 90 秒的工作流演示。
步骤教程
1. 定义故障
告诉代理要如何破坏请求。
- 目标:
httpbin.org(或你的 API 域名)。 - 延迟:
7 秒(模拟延迟)。 - 故障率:
1(100 % 的请求将失败)。 - 错误码:
503 Service Unavailable。
2. 信任证书(一次性设置)
由于我们拦截 HTTPS 流量,需要信任代理的 CA 证书。
- 从仪表盘下载
mitmproxy-ca-cert.pem。 - macOS – 将其添加到 钥匙串访问 → 系统,并设置为 始终信任。
- Linux – 将其复制到
/usr/local/share/ca-certificates/并运行update-ca-certificates。
3. 魔法指令
使用带有 -x(代理)参数的 curl:
curl -v -x http://user:pass@chaos-proxy.debuggo.app:13979 https://httpbin.org/get
理解输出
多次运行该指令时,你会看到两种可能的情形。
场景 A – 混沌(延迟 + 故障)
终端会卡住约 7 秒,然后返回:
< HTTP/1.1 500 Internal Server Error
< content-length: 56
< content-type: text/plain
...
Debuggo Chaos Injection: 500 Error
场景 B – 成功
大约一半的请求会直接到达真实服务器:
< HTTP/1.1 200 OK
...
{
"args": {},
"headers": { ... }
}
实际使用场景
- 测试 CI 流水线 – 验证如果依赖服务变慢,部署脚本不会崩溃。
- 定时任务 – 确保夜间数据同步在失败时能够正确重试。
- 快速健全性检查 – 在提交代码前,确认 API 客户端如何处理 503 错误。
结论
你不需要繁重的基础设施来测试网络弹性。简单的代理配置即可向任何 HTTP 客户端(如 curl、wget 或你的 Python/Node.js 脚本)注入混沌。
祝你玩得开心!🔨