跳至主要内容

测试 Webhook

了解如何测试你的 Webhook 以及处理 Webhook 传递的代码。

关于测试 Webhook

你可以测试 Webhook 传递。这将让你验证 GitHub 是否会响应你期望触发 Webhook 传递的事件发送 Webhook 传递。

你还可以通过使用你的计算机或 Codespace 作为本地服务器并将 Webhook 传递转发到你的本地服务器来测试处理 Webhook 传递的代码。这将让你开发和调试代码,而无需将代码部署到生产服务器。

测试 Webhook 传递

你可以触发 Webhook 事件并验证 GitHub 是否已发送 Webhook 传递。

  1. 触发你的 Webhook。例如,如果你正在测试订阅了 `issues` 事件的仓库 Webhook,请在配置了 Webhook 的仓库中打开一个问题。

    你还可以重新传递之前的 Webhook 传递。有关更多信息,请参阅“重新传递 Webhook”。

    如果你正在使用组织或仓库 Webhook,你还可以使用 REST API 触发 Webhook 的 `ping` 事件。如果你正在使用仓库 Webhook 并且你的 Webhook 订阅了 `push` 事件,则可以使用 REST API 触发 Webhook 的测试 `push` 事件。有关更多信息,请参阅“仓库 Webhook 的 REST API 端点”和“组织 Webhook 的 REST API 端点”。

  2. 检查 GitHub 以验证是否已发送 Webhook 传递。有关如何针对每种 Webhook 类型执行此操作的信息,请参阅“查看 Webhook 传递”。

如果未发送 Webhook 传递,或者已发送 Webhook 传递但 GitHub 指示传递失败,请参阅故障排除指南以帮助诊断问题。有关更多信息,请参阅“排查 Webhook 故障”。

在本地测试 Webhook 代码

为了在你的计算机或 Codespace 上本地测试你的 Webhook 代码,你可以使用 Webhook 代理 URL 将 Webhook 从 GitHub 转发到你的计算机或 Codespace。你可以使用你的计算机或 Codespace 作为本地服务器来接收这些转发的 Webhook。

以下部分演示了如何使用 smee.io 提供 Webhook 代理 URL 并转发 Webhook。

有关代码和测试步骤的具体示例,请参阅“处理 Webhook 传递”。

获取 Webhook 代理 URL

  1. 在浏览器中,导航到 https://smee.io/
  2. 点击“启动新通道”。
  3. 复制“Webhook 代理 URL”下的完整 URL。你将在以下设置步骤中使用此 URL。

配置 Webhook 以使用 Webhook 代理 URL

配置你的 Webhook 以使用上述 Webhook 代理 URL。有关更多信息,请参阅“创建 Webhook”和“编辑 Webhook”。

现在,GitHub 将 Webhook 传递发送到该 URL。

启动本地服务器

在你的计算机或 Codespace 上,启动一个本地服务器。执行此操作的方式取决于你接收 Webhook 的代码的编写方式。有关示例,请参阅“处理 Webhook 传递”。

你应该确保你的代码可以在本地运行。例如,如果你的代码依赖于生产服务器上的环境变量,则应确保环境变量在你的本地服务器上也可用。

你可能还会发现添加日志语句很有用,这样你就可以验证代码的步骤是否按预期执行。

在测试 Webhook 时,请保持本地服务器运行。

转发 Webhook

  1. 如果你尚未安装 smee-client,请在你的终端中运行以下命令

    Shell
    npm install --global smee-client
    
  2. 要接收来自 smee.io 的转发 Webhook,请在你的终端中运行以下命令。将 `WEBHOOK_PROXY_URL` 替换为之前你的 Webhook 代理 URL。将 `PATH` 替换为服务器将处理的路径或路由。将 `PORT` 替换为本地服务器正在侦听的端口。

    Shell
    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
    

    现在,当你的 Webhook 代理 URL(smee.io URL)从 GitHub 接收 Webhook 传递时,smee 将 Webhook 传递转发到你的本地服务器。

  3. 在测试 Webhook 时,请保持此程序运行。若要停止转发 Webhook,请输入 Ctrl+C

此时,你应该同时运行本地服务器和 smee 转发。

触发 Webhook 传递

触发你的 Webhook。例如,如果你正在测试订阅了 `issues` 事件的仓库 Webhook,请在配置了 Webhook 的仓库中打开一个问题。

你还可以重新传递之前的 Webhook 传递。有关更多信息,请参阅“重新传递 Webhook”。

验证传递

你可以验证 GitHub 是否已发送 Webhook 传递、smee 是否已接收并转发传递以及本地服务器是否已处理 Webhook 传递。

验证 GitHub 是否已发送传递

检查 GitHub 以验证是否已发送 Webhook 传递。有关更多信息,请参阅“查看 Webhook 传递”。

如果未发送 Webhook 传递,或者已发送 Webhook 传递但 GitHub 指示传递失败,请参阅故障排除指南以帮助诊断问题。有关更多信息,请参阅“排查 Webhook 故障”。

验证 smee 是否已接收你的 Webhook 传递

导航到 smee.io 上的 Webhook 代理 URL。你应该会看到一个与你触发或重新传递的事件相对应的事件。这表示 GitHub 已成功将 Webhook 传递发送到你指定的有效负载 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 的代码的编写方式。例如,请参阅“处理 Webhook 传递”。