測試 Webhook

開發 Webhook 時,建議您先使用實際的 Business 訊息酬載來進行測試。您可以使用 Business Messages 測試架構,透過 Webhook 在實際工作環境中收到的各種 JSON 酬載類型測試 Webhook,而無須手動建立測試。

如要開始使用,您只需提供執行中 Webhook 執行個體的網址。測試架構易於安裝,只要透過單一指令即可測試 Webhook。

開始

安裝架構

如要安裝架構,最簡單的方法是使用 NPM 套件管理員。該架構已發布至 NPM 套件登錄檔,因此您可以使用 npm 進行安裝:

npm install -g bm-test-framework

執行測試

安裝套件後,您就可以提供環境變數 Webhook 網址,並用下列指令執行所有測試:

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

在這個範例執行作業中,所有測試案例皆已通過。

如果您的 Webhook 在其中一個測試案例中失敗,代表 Webhook 沒有回應 200 OK 以測試該測試案例的 JSON 酬載。在這種情況下,測試架構會輸出錯誤資訊,協助您進行偵錯。如要進一步瞭解特定測試案例,請參閱測試架構 README

使用 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 隨機 Uuid 布林值 如為 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});