关于测试 Webhook
您可以测试 Webhook 交付。这将让您验证 GitHub 是否在您预期触发 Webhook 交付的事件响应中发送了 Webhook 交付。
您也可以通过使用电脑或 Codespace 作为本地服务器并将 Webhook 交付转发到本地服务器,来测试处理 Webhook 交付的代码。这使您能够在不将代码部署到生产服务器的情况下开发和调试代码。
测试 Webhook 交付
您可以触发一个 Webhook 事件并验证 GitHub 是否发送了 Webhook 交付。
-
触发您的 Webhook。例如,如果您正在测试一个订阅了
issues事件的仓库 Webhook,请在配置了该 Webhook 的仓库中打开一个 issue。您也可以重新发送先前的 Webhook 交付。更多信息,请参见 重新发送 Webhook。
如果您使用的是组织或仓库 Webhook,您也可以使用 REST API 触发
ping事件。如果您使用的是仓库 Webhook 且该 Webhook 订阅了push事件,您可以使用 REST API 触发一次测试的push事件。更多信息,请参见 仓库 Webhook 的 REST API 端点 和 组织 Webhook 的 REST API 端点。 -
在 GitHub 上检查以验证已发送 Webhook 交付。有关如何针对每种 Webhook 类型执行此操作的信息,请参见 查看 Webhook 交付。
如果未发送 Webhook 交付,或已发送但 GitHub 表示交付失败,请参阅故障排除指南以帮助诊断问题。更多信息,请参见 Webhook 故障排除。
本地测试 Webhook 代码
为了在本地电脑或 Codespace 上测试你的 Webhook 代码,你可以使用 Webhook 代理 URL 将 GitHub 的 Webhook 转发到你的电脑或 Codespace。你可以把电脑或 Codespace 当作本地服务器来接收这些转发的 Webhook。
以下章节演示如何使用 smee.io 提供 Webhook 代理 URL 并转发 Webhook。
有关代码和测试步骤的具体示例,请参见 处理 Webhook 交付。
获取 Webhook 代理 URL
- 在浏览器中打开 https://smee.io/。
- 点击 启动新通道。
- 复制 “Webhook Proxy URL” 下的完整 URL。您将在后续设置步骤中使用此 URL。
配置 Webhook 使用该代理 URL
配置你的 Webhook 使用上面的 Webhook 代理 URL。更多信息,请参见 创建 Webhook 和 编辑 Webhook。
现在,GitHub 将把 Webhook 交付发送到该 URL。
启动本地服务器
在你的电脑或 Codespace 上启动本地服务器。具体做法取决于你的接收 Webhook 的代码编写方式。示例请参见 处理 Webhook 交付。
请确保你的代码能够在本地运行。例如,如果代码在生产服务器上依赖环境变量,则需要确保这些环境变量在本地服务器上也可用。
你也可以添加日志语句,以便验证代码的各个步骤是否按预期执行。
在测试 Webhook 时保持本地服务器运行。
转发 Webhook
-
如果尚未安装 smee-client,请在终端中运行以下命令
Shell npm install --global smee-client
npm install --global smee-client -
要接收来自 smee.io 的转发 Webhook,请在终端中运行以下命令。将
WEBHOOK_PROXY_URL替换为之前获取的 Webhook 代理 URL。将PATH替换为你的服务器将处理的路径或路由。将PORT替换为本地服务器监听的端口。Shell smee --url WEBHOOK_PROXY_URL --path /PATH --port PORT
smee --url WEBHOOK_PROXY_URL --path /PATH --port PORT你应该会看到类似如下的输出,其中的
WEBHOOK_PROXY_URL、PORT和PATH已被你指定的值替换Shell Forwarding WEBHOOK_PROXY_URL to http://127.0.0.1:PORT/PATH Connected WEBHOOK_PROXY_URL
Forwarding WEBHOOK_PROXY_URL to http://127.0.0.1:PORT/PATH Connected WEBHOOK_PROXY_URL现在,当你的 Webhook 代理 URL(smee.io URL)收到来自 GitHub 的 Webhook 交付时,smee 会把该交付转发到你的本地服务器。
-
在测试 Webhook 时保持该进程运行。要停止转发 Webhook,请输入 Ctrl+C。
此时,你应同时拥有本地服务器和 smee 转发进程在运行。
触发 Webhook 交付
触发您的 Webhook。例如,如果您正在测试一个订阅了 issues 事件的仓库 Webhook,请在配置了该 Webhook 的仓库中打开一个 issue。
您也可以重新发送先前的 Webhook 交付。更多信息,请参见 重新发送 Webhook。
验证交付
你可以验证 GitHub 是否发送了 Webhook 交付,smee 是否接收并转发了该交付,以及本地服务器是否处理了该 Webhook 交付。
验证 GitHub 已发送交付
在 GitHub 上检查以验证已发送 Webhook 交付。更多信息,请参见 查看 Webhook 交付。
如果未发送 Webhook 交付,或已发送但 GitHub 表示交付失败,请参阅故障排除指南以帮助诊断问题。更多信息,请参见 Webhook 故障排除。
验证 smee 已接收您的 Webhook 交付
在 smee.io 上访问你的 Webhook 代理 URL。你应该会看到与你触发或重新发送的事件对应的事件记录,这表明 GitHub 已成功将 Webhook 交付发送到你指定的 payload URL。
如果在 smee.io 上未看到你的 Webhook 交付,请确认你的 Webhook 正在使用你的 Webhook 代理 URL(smee.io URL)。
验证 smee 已转发您的 Webhook 交付
在运行 smee --url WEBHOOK_PROXY_URL --path /PATH --port PORT 的终端窗口中,你应该会看到类似 POST http://127.0.0.1:3000/webhook - 202 的输出。这表明 smee 已成功把你的 Webhook 转发到本地服务器。
如果没有看到上述信息,请确保 smee 客户端和本地服务器均已启动。你应在两个独立的终端窗口中分别运行这两个进程。
还应检查运行 smee 客户端和本地服务器的终端窗口中是否有错误信息。具体错误取决于你的接收 Webhook 代码实现方式。示例请参见 处理 Webhook 交付。
验证本地服务器已处理 Webhook 交付
此时,你已经验证了 GitHub 发送了 Webhook 交付并且 smee 将其转发到本地服务器。现在,需要验证你的代码是否按预期处理了该交付。具体做法取决于你的接收 Webhook 代码实现方式。示例请参见 处理 Webhook 交付。