測試聊天機器人的新方法——Botfuel Dialog

文章做者:Maxime Khoygit

原文連接:Writing integration tests for a Botfuel Dialog chatbotgithub

編譯:一熊翻譯組 Masonnpm

圖片描述

前言:由於 Botfuel Dialog 聊天機器人是一個網絡應用,你能夠依靠它強大的編程功能,例如單元與集成測試,來測試你的機器人。編程

目標

在這篇教程中你能夠學習如何使用 Jest 來測試你的聊天機器人,它是一個由 Facebook 開發的測試庫。不過,你也可使用其它測試庫,例如 Mocha。json

至於這篇教程的目標,是讓你學習如何將機器人的手動測試自動化,以確保聊天機器人如期工做。網絡

對於這篇教程,咱們會從簡單的樣例機器人開始。請確保你已按照入門教程運行直至安裝部分。async

舉個例子,初始的樣例機器人會有以下的行爲:學習

圖片描述

讓咱們來寫一個測試來確保這一簡單功能的運轉。測試

配置

首先,咱們須要安裝 Jest 做開發基礎:ui

npm install --dev jest

一旦 Jest 安裝完成,添加以下test腳本到你的package.json文件:

"scripts": {
  "start": "botfuel-run",
  "train": "botfuel-train",
  "test": "jest"
},

你能夠經過npm test來運行 Jest。

爲了在測試模式下運行聊天機器人,咱們須要一個配置文件指出咱們將用到的test適配器。用以下內容在根級別建立一個test-config.js文件:

module.exports = {
  adapter: 'test',
};

寫測試

爲了模擬人與機器人之間的對話,咱們會使用Botplay方法。這種方法須要一組用戶消息,其能夠表明全部用戶會發給聊天機器人的全部消息。對於用戶來講,它多是如下幾種類型:

  • PostbackMessage (回執消息)
  • UserImageMessage (用戶圖片消息)
  • UserTextMessage (用戶文本消息)

在咱們的樣例中,他們都是些簡單的UserTextMessage

舉個例子,模擬這段對話:

圖片描述

咱們會編寫:

const bot = new Bot(config);
const userId = bot.adapter.userId;

await bot.play([
  new UserTextMessage('Hello'),
  new UserTextMessage('My name is Bob'),
]);

用戶與機器人被捕捉的輸出消息被儲存進bot.adapter.log,因此咱們能夠編寫如下程序來測試機器人是否如期響應:

expect(bot.adapter.log)
  .toEqual([
    new UserTextMessage('Hello'),
    new BotTextMessage('Hello human!'),
    new UserTextMessage('My name is Bob'),
    new BotTextMessage('Nice to meet you Bob!'),
  ]
    .map(msg => msg.toJson(userId))
  );

比較指望的與實際的輸出,咱們提供方便的toJson方法以便消息能夠相比作原生的 JSON。這種方法須要userId做爲一個參數,由於每一個UserTextMessage均可以轉化爲 JSON 的形式,並以消息做者的分類儲存在userId下。

這裏,你一樣也可使用所有的消息類型。

讓咱們來寫一下完整的測試樣例吧!

在聊天機器人的跟級別構建一個tests庫並在其中用以下內容建立一個hello.test.js文件:

const { Bot, BotTextMessage, UserTextMessage } = require('botfuel-dialog');
const config = require('../test-config');

test('answers greeting and name', async () => {
  const bot = new Bot(config);
  const userId = bot.adapter.userId;

  await bot.play([new UserTextMessage('Hello'), new UserTextMessage('My name is Bob')]);

  expect(bot.adapter.log).toEqual(
    [
      new UserTextMessage('Hello'),
      new BotTextMessage('Hello human!'),
      new UserTextMessage('My name is Bob'),
      new BotTextMessage('Nice to meet you Bob!'),
    ].map(msg => msg.toJson(userId)),
  );
});

運行測試前,先執行如下命令:

BOTFUEL_APP_TOKEN=<the BOTFUEL_APP_TOKEN> BOTFUEL_APP_ID=<the BOTFUEL_APP_ID> BOTFUEL_APP_KEY=<the BOTFUEL_APP_KEY> npm test

這裏須要你的應用證書由於你的聊天機器人會調用 NLP API。

你會看到以下結果:

圖片描述

到此爲止,恭喜你,你已經成功地將一個聊天機器人的測試樣例自動化!

一熊翻譯組隸屬於一熊科技,咱們不生產科技雜文,咱們只是 GFW 上語種間的搬運工,歡迎點擊 「一熊翻譯組」來加入咱們。主線產品 「倍洽」日前迎來新版本上線,欲體驗智能聊天機器人所帶來的將來氣息,與全新工做體驗的無窮魅力,歡迎點擊 「倍洽」,從建立屬於你的第一個團隊開始……

圖片描述

相關文章
相關標籤/搜索