HookChaos:Webhook 压力测试工具 CLI/开源项目
Source: Dev.to
一次订单被重复完成。我们花了两天才发现是我们的处理器不是幂等的,而提供方在超时后进行了重试。好吧,吸取了教训。
随后又发生了同样的事。不同的 bug,但同一类——一个我们从未测试过的 webhook 边缘情况,因为我们的“测试”基本上就是:发送一次 ping,收到 200,直接上线。
这时我意识到我们根本没有办法测试这些糟糕的情况:重复事件、乱序投递、延迟事件导致状态过期、签名验证因尾随换行符而失败。我们只能祈祷生产环境不会出现这些问题。
生产环境总会把它们暴露出来。
于是我创建了 HookChaos——一个本地优先的 CLI,在生产环境之前把这些场景抛向你的端点。
http://localhost:3000/webhooks
HookChaos
HookChaos 是 webhook 失效场景的包管理器。它是一个本地优先的 CLI,用于可复现的 webhook 失效模拟,专为那些只有在 webhook 消费者看到以下情况时才会显现的 bug 而构建:
- 重复事件
- 乱序投递
- 重试在状态已改变后才到达
- 签名或时间戳验证失败
- 序列中的选择性丢失
HookChaos 将这些失效模式转化为可重用的包,你可以随时运行、在本地保存、发布到基于 Git 的注册表,并从历史中回放。
为什么会有它
大多数 webhook 工具只帮助你 接收 流量,但当真正的 bug 出现在第一次成功请求之后时,这远远不够:
- 同一事件被投递两次。
- 后来的事件先到达。
- 重试在你的状态已经改变后才落地。
- 签名或时间戳验证拒绝了本应有效的负载。
- 某一次投递消失,而其余序列继续进行。
Install
# Install HookChaos into ~/.local/bin
cd /path/to/hookchaos
make install
export PATH="$HOME/.local/bin:$PATH"你遇到过最糟糕的 webhook bug 是什么?(这正是场景列表将要增长的方式。)