测试聊天机器人的新方法——Botfuel Dialog
文章作者:Maxime Khoy
原文链接:Writing integration tests for a Botfuel Dialog chatbot
编译:一熊翻译组 Mason
前言:因为 Botfuel Dialog 聊天机器人是一个网络应用,你可以依靠它强大的编程功能,例如单元与集成测试,来测试你的机器人。
目标
在这篇教程中你可以学习如何使用 Jest 来测试你的聊天机器人,它是一个由 Facebook 开发的测试库。不过,你也可以使用其它测试库,例如 Mocha。
至于这篇教程的目标,是让你学习如何将机器人的手动测试自动化,以确保聊天机器人如期工作。
对于这篇教程,我们会从简单的样例机器人开始。请确保你已按照入门教程运行直至安装部分。
举个例子,初始的样例机器人会有如下的行为:
让我们来写一个测试来确保这一简单功能的运转。
配置
首先,我们需要安装 Jest 作开发基础:
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', };
写测试
为了模拟人与机器人之间的对话,我们会使用Bot
的play
方法。这种方法需要一组用户消息,其可以代表所有用户会发给聊天机器人的所有消息。对于用户来说,它可能是以下几种类型:
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 上语种间的搬运工,欢迎点击「一熊翻译组」来加入我们。主线产品「倍洽」日前迎来新版本上线,欲体验智能聊天机器人所带来的未来气息,与全新工作体验的无穷魅力,欢迎点击「倍洽」,从创建属于你的第一个团队开始……