使用Node.js对Lex机器人进行自动化测试

时间:2019-07-25 13:31:17

标签: aws-lex

我们正在使用Amazon Lex构建机器人。随着bot功能的不断发展,我们需要一种方法来确保在引入新更改时bot能够继续工作,但是手动执行此操作的成本越来越高。 我们在Amazon Lex SDK工具中找不到为Lex机器人创建自动化测试的工具。是否有一些框架或工具对此有所帮助并可以与Node.js一起使用?

2 个答案:

答案 0 :(得分:0)

我们面临着同样的问题。环顾四周后,我认为仅构建一些简单的工具来运行Lex的自动化测试会更容易。请记住,此解决方案要求您首先在亚马逊Lex中部署该机器人,因此它不是创建单元测试,而更像是功能测试。

基本上,我们所做的是创建一个像这样的简单库,该库使用Amazon SDK将文本发送到机器人:

let uuid = require('uuid/v4'),
    aws = require('aws-sdk');

let config = {
    awsAccount: process.env.AWS_ACCOUNT,
    awsAccessKey: process.env.AWS_ACCESS_KEY_ID,
    awsAccessKeySecret: process.env.AWS_SECRET_ACCESS_KEY,
    awsRegion: process.env.AWS_DEFAULT_REGION,
    botName: 'BotName',
    botAlias: 'Dev'
};

let lex;

exports.config = config;

exports.initConfig = function() {
    aws.config.update({
        credentials: new aws.Credentials(config.awsAccessKey, config.awsAccessKeySecret),
        region: config.awsRegion
    });
    lex = new aws.LexRuntime();
};

exports.speak = async function(userId, previousResponse, text) {
    let res = await lex.postText({
        botAlias: config.botAlias,
        botName: config.botName,
        inputText: text,
        userId: userId,
        requestAttributes: previousResponse ? previousResponse.requestAttributes : {},
        sessionAttributes: previousResponse ? previousResponse.sessionAttributes : {}
    }).promise();
    return res;
};

exports.generateUserId = function() {
    return uuid();
};

然后,您可以使用Mocha之类的工具来创建如下测试:

let assert = require('chai').assert,
    utils = require('./utils'); // this is the library above

utils.initConfig();

describe('your conversation name', function() {
    it('conversation path 1', async function() {
        let userId = utils.generateUserId();
        let res = await utils.speak(userId, null, 'init message');
        assert.equal(res.slots.slot1, 'val1'); // check slot value
        assert.include(res.message, 'words included'); // check response from bot
        res = await utils.speak(userId, res, 'send more messages');
        assert.equal(res.slots.slot2, 'val2'); // check another slot value
        assert.include(res.message, 'another words included'); // check response from bot
    });
});

同样,这不是单元测试,而是功能测试。

注意:我看到此答案之前已删除,因为它与另一个答案相同。我在回答两个问题并混合了答案,但是我已经更改了另一个答案,因此完全不同。所以我要再次发布。

答案 1 :(得分:0)

Botium提供automated testing for chatbots,而Amazon Lex是one of the supported platforms。 Botium Core是开源的,可在Github上使用-它使您可以使用多个CLI工具和Javascript测试运行程序运行自动化测试(请参见Botium Bindings)。 Botium Box提供了一个不错的用户界面以及一整套测试聊天机器人所需的所有功能-社区版。

enter image description here