测试网络钩子

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

在开发网络钩子时,您可能想要使用真实的业务消息载荷对其进行测试。您可以使用 Business Messages 测试框架来测试网络钩子在生产环境中可能收到的各种 JSON 载荷类型,而不是手动创建测试。

首先,您只需提供一个指向正在运行的网络钩子实例的网址。测试框架易于安装,您可以使用单个命令测试网络钩子。

开始使用

安装框架

安装该框架的最简单方法是使用 NPM 软件包管理器。该框架在 NPM 软件包注册表中发布,因此您可以使用 npm 进行安装:

npm install -g bm-test-framework

运行测试

安装该软件包后,您可以将其作为环境变量提供网络钩子网址,并使用以下命令运行所有测试:

BMTF_ENDPOINT_URL=<Your webhook URL> bm-test-framework

测试框架的结果如下所示:

  Sending payloads to <Your webhook URL>
      ✔ authentication-request.json should return 200
      ✔ event-receive.json should return 200
      ✔ image-message.json should return 200 (862ms)
      ✔ read-receipt.json should return 200
      ✔ suggestion-message.json should return 200
      ✔ text-message.json should return 200 (134ms)
      ✔ text-with-dialogflow-response.json should return 200 (128ms)
      ✔ user-receipt.json should return 200

在此示例测试运行中,已通过了所有测试用例。

如果您的网络钩子在某个测试用例失败,则表示您的网络钩子没有响应该测试用例的 JSON 载荷的 200 OK。在这种情况下,测试框架会输出错误信息,以帮助您进行调试。如需详细了解特定测试用例,请参阅测试框架自述文件

在 NodeJS 项目中使用框架

如需从您自己的代码在 NodeJS 项目中或在 Mocha 测试套件中使用该框架,请先将该软件包作为开发依赖项进行安装:

npm install --save-dev bm-test-framework

安装后,您可以创建 BmTestFramework 对象来管理测试:

const BmTestFramework = require('bm-test-framework');
const bmTestFramework = new BmTestFramework({endpointURL: <Your webhook URL>});

payloads 成员数组包含所有测试用例。您可以使用 sendPayload 方法运行特定测试。例如,以下代码会在框架中运行第一个测试:

bmTestFramework.sendPayload(bmTestFramework.payloads[0])

配置测试

除了所需的 BMTF_ENDPOINT_URL 环境变量之外,您还可以设置可选的环境变量来自定义测试行为:

环境变量 配置字段名称 类型 说明
BMTF_RANDOM_UUID randomUuid 布尔值 如果为 true,则将会话 ID 设置为具有有效格式的随机 UUID。如果为 false,则将所有会话 ID 设置为“CONVERSATION-ID”。
BMTF_TIMEOUT timeout 数字或格式化的时间字符串 为每个测试用例设置超时(以毫秒为单位)。每个测试用例的默认超时时间为 2000 毫秒。如需详细了解类型和格式规范,请参阅 Mocha API 参考文档

例如,以下代码可在启用了随机 UUID 选项且超时为 1000 毫秒的情况下,从命令行运行测试框架:

BMTF_ENDPOINT_URL=<Your webhook URL> BMTF_TIMEOUT=1000 BMTF_RANDOM_UUID=true bm-test-framework

如需自定义 NodeJS 项目中的测试行为,还可以在创建 BmTestFramework 时将相同的变量传递到 config 对象中:

const bmTestFramework = new BmTestFramework({endpointURL: <Your webhook URL>, randomUuid: true, timeout: 1000});