Skip to main content

测试 web 挂钩

了解如何测试 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 类型执行此操作的信息,请参阅“查看 web 挂钩交付”。

如果未发送 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。 有关详细信息,请参阅“创建 web 挂钩”和“测试 Webhook”。

现在,GitHub 将向该 URL 发送 Webhook 交付。

启动本地服务器

在电脑或 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_URLPORTPATH 替换为指定的值:

    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 交付。 有关详细信息,请参阅“查看 web 挂钩交付”。

如果未发送 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 交付”。