WebHook Tester 介绍与选型指南
WebHook Tester(tarampampam/webhook-tester)开源 webhook 测试工具的定位、架构、功能特性与同类选型对比。
WebHook Tester测试工具Golang2026/10/27
WebHook Tester 介绍与选型指南
目标:介绍 WebHook Tester 的定位、架构、功能特性,并与同类 webhook 测试工具(webhook.site、RequestBin 等)做量化选型对比。已在 Ubuntu 22.04 + Docker 容器环境实测。
一、环境信息
- 操作系统:Ubuntu 22.04 LTS
- WebHook Tester 版本:v2.3.0(2026-04-13 发布,查询日期 2026-10-27)
- Docker 镜像:ghcr.io/tarampampam/webhook-tester:2.3.0(scratch 多架构镜像,amd64/arm64 均支持)
- 技术栈:Go 1.25 + ReactJS(前端嵌入 Go 二进制)
- 仓库:github.com/tarampampam/webhook-tester
- 许可证:MIT
- Stars:约 241(GitHub,查询日期 2026-10-27)
二、软件概述
WebHook Tester 是一款开源的 Webhook 测试与调试工具,相当于 webhook.site、RequestBin 的本地自托管替代方案。它为每个测试会话生成一个唯一的随机 URL(UUID),任意 HTTP 请求(GET/POST/PUT/DELETE/...)发送到该 URL 及其子路径都会被实时捕获,开发者可以在 Web UI 或 REST API 中查看请求的完整详情——方法、路径、查询参数、请求头、客户端 IP、请求体(JSON 自动格式化、二进制以 base64 展示)。
该工具由 Go 编写,前端 ReactJS 编译后嵌入后端二进制,单文件即可运行。内存存储模式下无需任何外部依赖,适合本地快速调试;生产部署可切换 Redis 或文件系统(FS)存储以实现持久化和多实例共享。内置 ngrok 隧道集成,一条命令即可把本地实例暴露到公网,方便测试 GitHub、GitLab、Stripe 等外部服务的回调。
三、核心架构
3.1 整体结构
┌─────────────────────────────────────────────────┐
│ HTTP Server (chi router) │
├─────────────────────────────────────────────────┤
│ Webhook 接收层 │ REST API 层 │ WebSocket │
│ POST /{uuid}/... │ /api/* │ /live │
├─────────────────────────────────────────────────┤
│ Storage 接口(可插拔) │
│ ┌──────┐ ┌──────┐ ┌──────┐ │
│ │memory│ │ Redis│ │ FS │ │
│ └──────┘ └──────┘ └──────┘ │
├─────────────────────────────────────────────────┤
│ Pub/Sub 接口(可插拔) │
│ memory │ Redis │
├─────────────────────────────────────────────────┤
│ 可选 Tunnel(ngrok 集成) │
└─────────────────────────────────────────────────┘
3.2 核心组件
| 组件 | 职责 | 可选项 |
|---|---|---|
| Webhook 中间件(middleware/webhook) | 拦截 UUID 前缀路径的请求,自动创建会话 | — |
| OpenAPI 生成的 REST handler | 会话管理、请求查询、配置读取 | — |
| Storage 驱动 | 持久化捕获的请求数据 | memory / Redis / FS |
| Pub/Sub 驱动 | WebSocket 实时通知 | memory / Redis |
| Frontend(ReactJS) | 内嵌式 Web 管理界面 | embedded / live(开发模式) |
| Tunnel 驱动 | 公网暴露(ngrok) | ngrok / disabled |
3.3 关键设计理念
- 无侵入式捕获:任意 HTTP 方法 + 任意子路径 + UUID 前缀,都会被自动捕获。开发时不必关心 provider 发送的具体 URL 格式。
- 零依赖启动:内存存储 + 内嵌前端 + 单二进制,下载即运行。
- 会话自动创建:
AUTO_CREATE_SESSIONS=true时,首次请求到新 UUID 会自动创建会话,无需预定义。 - 可插拔存储:生产部署需要持久化或多实例负载均衡时切换 Redis,简单场景用 FS 即可。
四、功能特性
| 特性 | 描述 |
|---|---|
| 唯一 URL 会话 | 每次会话生成随机 UUID,任意 HTTP 方法和子路径都被捕获 |
| 实时 WebSocket 通知 | 新请求到达时 UI 通过 WebSocket 实时推送,无需刷新 |
| 完整请求详情 | 方法、路径、查询参数、全部请求头、客户端 IP、请求体(JSON 自动美化) |
| 自定义响应 | 可为每个会话设置自定义状态码(默认 200)、Content-Type、响应体、人为延迟 |
| 请求存储上限 | 可配置每个会话最大请求数(默认 128)和请求体大小上限(默认 0 = 不限) |
| 会话 TTL | 会话存活时长可配置(默认 168h / 7 天) |
| 多架构镜像 | 基于 scratch 的零依赖镜像,支持 linux/amd64、linux/arm64 |
| 非特权用户运行 | Docker 镜像默认以非 root 用户运行 |
| 可观测性 | /healthz(存活探针)、/ready(就绪探针)、结构化日志(console/json) |
| 隧道集成 | 内置 ngrok 支持,一条命令暴露本地实例到公网 |
| CORS 默认开启 | Access-Control-Allow-Origin: *,方便跨域开发调试 |
| Helm Chart | 官方提供 Helm chart,方便 k8s 部署 |
| REST API | 完整的会话管理和请求查询 REST API,便于自动化集成 |
五、快速开始(最小可用示例)
# 方式一:Docker(最推荐)
docker run -d --name wh-test -p 8080:8080 ghcr.io/tarampampam/webhook-tester:2.3.0
# 打开 http://localhost:8080,复制生成的会话 URL
# 方式二:直接运行二进制
curl -Lo webhook-tester https://github.com/tarampampam/webhook-tester/releases/latest/download/webhook-tester-linux-amd64
chmod +x webhook-tester
./webhook-tester start
# 发送测试 webhook
curl -X POST http://localhost:8080/11111111-2222-3333-4444-555555555555/orders/created \
-H "Content-Type: application/json" \
-d '{"event":"created","id":42}'
# UI 或 REST API 即可看到这条请求
💡 技术拓展:开源 webhook 测试工具的核心设计模式——
模式 原理 代表项目 UUID 会话捕获 任意 UUID 前缀路径都被捕获,不限 HTTP 方法和子路径 WebHook Tester、webhook.site 显式请求创建 先 POST 创建 request bin 拿到固定 URL,再发 webhook RequestBin(Pipedream) 隧道代理 本地启动 agent 主动连外网中转服务器,不需要公网 IP smee.io(GitHub Webhook Proxy) 浏览器端实现 纯前端实现(如 WebSocket 反向连接),后端不存数据 webhook.cool 本文的 WebHook Tester 采用第一种模式,最灵活但需要本地实例可被访问(内网穿透/公网 IP/隧道)。
六、适用场景与限制
6.1 适用场景
| 场景 | 说明 |
|---|---|
| API 回调调试 | 开发过程中测试 GitHub/GitLab/Stripe/Slack 等服务的 webhook 回调 |
| 本地开发联调 | 前后端开发联调,后端需要接收 webhook |
| 自动化测试 | CI/CD 中集成测试 webhook 端点,用 REST API 校验请求体 |
| 安全敏感数据测试 | 回调 payload 包含客户数据时,本地实例不经过第三方 |
| 可复现的测试套件 | 持久化存储 + 自定义响应,模拟 provider 异常(500/410 触发重试) |
6.2 限制与边界
| 限制 | 影响 |
|---|---|
| 默认无持久化 | 内存存储重启后请求丢失;需 Redis/FS 持久化 |
| 无多租户隔离 | 单实例单命名空间,不设认证(可反向代理加 auth) |
| 无内置前端交互创建会话 | 会话需通过 REST API 或 AUTO_CREATE_SESSIONS=true 自动创建 |
| 会话 UUID 可被猜测 | 纯随机 UUID,低概率冲突;需要更强隔离时自行加前缀 |
| 无速率限制 | 默认无请求频率限制;生产部署建议前置反向代理做限流 |
七、同类选型对比
| 项目 | 语言 | 存储 | 自托管 | 活跃 | 特点 |
|---|---|---|---|---|---|
| WebHook Tester | Go + ReactJS | memory/Redis/FS | ✅ | 高 | 单二进制、零依赖、REST API、ngrok 集成、Helm chart |
| webhook.site(开源版) | Go + Vue.js | PostgreSQL | ✅ | 中 | 功能最丰富,含自定义动作(Pro 才付费),但依赖多 |
| RequestBin(Pipedream) | — | — | ❌ | SaaS | 无自托管版,全 SaaS,需要 Pipedream 账号 |
| Webhook.site(Cloud) | — | — | ❌ | SaaS | 功能最全的 SaaS,Pro 付费;免费版有限制 |
| webhooker.eu | Python + HTML | SQLite | ✅ | 低 | 新轻量项目,功能基本,无 REST API |
| ngrok + 自写后端 | 任意 | 任意 | ✅ | — | 灵活度最高但需自己写存储/查询逻辑 |
选型建议
| 场景 | 推荐 | 理由 |
|---|---|---|
| 本地快速调试 / 不需要持久化 | WebHook Tester(内存模式) | 下载即运行,10 秒拉起 |
| 需要持久化 + 多实例 | WebHook Tester(Redis 模式) | 零代码切换存储后端 |
| 需要最完整功能(自定义动作、email 测试) | webhook.site 开源版 | 功能覆盖最全 |
| CI/CD 自动化集成 | WebHook Tester | REST API 完整,无需前端交互 |
| 纯 SaaS / 不想部署 | Webhook.site Cloud 或 smee.io | 零运维 |
八、参考链接
- GitHub 仓库:https://github.com/tarampampam/webhook-tester
- Go Packages 文档:https://pkg.go.dev/gh.tarampamp.am/webhook-tester/v2
- 在线 Demo:https://wh.tarampamp.am/
- Helm Chart:https://artifacthub.io/packages/helm/webhook-tester/webhook-tester
- webhook.site(开源版):https://github.com/webhooksite/webhook.site
章节目录