概述
Dialogflow 是 Google Cloud 上一款强大的自然语言处理平台,提供开发者构建智能聊天机器人的工具和服务。对于开发者来说,Dialogflow 提供了一些创建聊天机器人的完整开发工作流程的选项,以及对不同平台的广泛支持。
Dialogflow Testing Library 是一个 NPM 包,它是 Dialogflow 的测试工具库。在本文中,我们将介绍如何使用这个库来进行 Dialogflow 机器人的测试。
安装
首先,确保你已经安装了 Node.js。然后,使用以下命令来安装 dialogflow-testing-library:
npm install dialogflow-testing-library --save-dev
这将安装最新版本的 dialogflow-testing-library 包并将其添加到 package.json 文件中。
快速开始
让我们从创建一个新的机器人测试开始。假设我们有一个名为 “MyTestBot” 的 Dialogflow 机器人,其中包含一个名为 "GetWeather" 的意图。
首先,我们需要导入 dialogflow-testing-library:
-- -------------------- ---- ------- ----- ----------------------- - ------------------------ -- ---- -- ----- ---------- - ------------------------------------ ----- --------- - ---------------------- ----- --------- - --------- ----- ------------ - -------- ----- ------------- - --- --------------------------- ---------- ------------ --- -- ---------- --- ----- - -------- - - -------------------------------------- ----- --------- - ---------------------- ----- --------- - --------- ----- ------------ - -------- ----- ------------- - --- --------------------------- ---------- ------------ --- -- ---------- --- ----- - -------- - - --------------------------------------
接下来,我们需要创建一个会话,以便与机器人进行交互。我们将使用 sessionId 为 '123456' 的会话 ID:
const sessionPath = sessionClient.sessionPath(projectId, sessionId);
由于我们要测试 "GetWeather" 意图,所以我们需要向 Dialogflow 发送一个包含 "GetWeather" 意图的文本消息:
-- -------------------- ---- ------- ----- ---- - ----- -- --- ------- -- ---------- ----- ------- - - -------- ------------ ----------- - ----- - ----- ------------ - - -- ----- -------- - ----- ------------------------------------ -- -- ----- -------------- - ----------------- ----- ---------------------------------------------------------------------------- --- -- -- -- -- ---------- ---------- -------------------------------------------- -- ------ -------------------- -- ----- - ----- ---- -- ------- -- --------- - --- ------- --------------- ---
对话框测试的其他场景
除了简单的对话测试,Dialogflow Testing Library 还提供了其他一些有用的测试场景。
快捷回复测试
Dialogflow 中的快捷回复是一种可用于向用户提供文本或与意图关联的操作的方式。您可以编写快捷回复并将它们与意图绑定。如果用户发送质询,Dialogflow 将向用户显示快捷回复,用户可以选择其中的一个选项,然后再次发送查询。
为了测试快捷回复,我们可以使用 matchers 下的 quickReply(matcherOptions) 方法,并提供与期望的快捷回复匹配的匹配器选项。例如,如果您的意图具有三个快捷回复选项,如下所示:
{ "title": "Operating Systems", "replies": ["Android", "iOS", "Windows"] }
我们将在测试之前定义一个名为 matcher 的匹配器变量:
const matcher = quickReply({ title: 'Operating Systems', replies: ['Android', 'iOS', 'Windows'], });
我们将这个匹配器放入生成的回复中进行匹配:
expect(response.queryResult.fulfillmentMessages).toEqual(matcher);
意图参数测试
如果您的意图需要参数,您可以使用 matchers.intentParameters(matcherOptions) 方法来测试是否正确地解析了这些参数。例如,假设我们创建了一个名为 "find_directions" 的意图,该意图需要起点和终点的城市名称作为输入。
const matcher = intentParameters({ origin: { city: 'Seattle' }, destination: { city: 'Portland'} }); expect(response.queryResult).toMatchObject({ fields: matcher });
用户 Context 和系统 Context 测试
对话中的上下文是在对话过程中保持对话状态的机制。您可以编写代码来处理上下文并定义特定的行为。
与意图参数一样,Dialogflow Testing Library 还提供了 matchers.context(matcherOptions) 方法,以测试会话中的上下文是否与预期的匹配器正确地匹配。由于系统上下文和用户上下文之间有所不同,该库还提供了两个不同的方法。
例如,以下代码片段显示了如何使用 context(matcherOptions) 方法测试一个名为 "weather" 的上下文是否在回复中:
const httpResponse = { outputContexts: [ { name: 'projects/MyTestBotID/agent/sessions/123456/contexts/weather', lifespanCount: 1, parameters: { weather: 'raining', }, }, ], }; await expect(context(httpResponse)).toEqual({ name: 'weather', lifespan: 1, parameters: { weather: 'raining', }, });
结论
本文简要介绍了如何使用 dialogflow-testing-library 与 Dialogflow 机器人进行测试,以及如何使用一些常用的测试场景。
此 NPM 包使得机器人的测试非常容易,尤其是对于那些需要在复杂的对话和业务逻辑下进行完整的机器人测试的开发者来说。无论您是一个 Dialogflow 开发人员还是想要了解如何进行机器人测试的 QA 工程师,这个库都值得您的考虑和使用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60067357890c4f7277583da1