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,再发 webhookRequestBin(Pipedream)
隧道代理本地启动 agent 主动连外网中转服务器,不需要公网 IPsmee.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 TesterGo + ReactJSmemory/Redis/FS✅高单二进制、零依赖、REST API、ngrok 集成、Helm chart
webhook.site(开源版)Go + Vue.jsPostgreSQL✅中功能最丰富,含自定义动作(Pro 才付费),但依赖多
RequestBin(Pipedream)——❌SaaS无自托管版,全 SaaS,需要 Pipedream 账号
Webhook.site(Cloud)——❌SaaS功能最全的 SaaS,Pro 付费;免费版有限制
webhooker.euPython + HTMLSQLite✅低新轻量项目,功能基本,无 REST API
ngrok + 自写后端任意任意✅—灵活度最高但需自己写存储/查询逻辑

选型建议

场景推荐理由
本地快速调试 / 不需要持久化WebHook Tester(内存模式)下载即运行,10 秒拉起
需要持久化 + 多实例WebHook Tester(Redis 模式)零代码切换存储后端
需要最完整功能(自定义动作、email 测试)webhook.site 开源版功能覆盖最全
CI/CD 自动化集成WebHook TesterREST API 完整,无需前端交互
纯 SaaS / 不想部署Webhook.site Cloud 或 smee.io零运维

八、参考链接