是否可以使用AWS假设角色运行赛普拉斯测试?

时间:2020-09-08 07:18:42

标签: amazon-web-services automation cypress qa

我创建了一些自动测试来测试面向公众的API端点。有一个“测试数据创建”步骤,可以直接在我们的AWS环境中运行和创建数据(即,直接执行Lambda,将条目添加到数据库中)。这已集成到赛普拉斯中,并在package.json

中添加了一个包。

要执行此操作,首先必须使用aws-sdk,特别是assumerole。当直接使用Node运行此过程时,它将运行并用~/.aws/credentialsaws_access_key_idaws_secret_access_key填充aws_session_token

一旦承担了这个角色,就可以运行“测试数据创建”,并创建用于测试的数据。

使用Node和Node环境,它可以正常工作并创建数据。

但是当它在赛普拉斯中运行时,它将失败。

这是我的plugins/index.js

    const AWS = require('aws-sdk');

    module.exports = (on, config) => {
        AWS.config.update({
            accessKeyId: process.env.AWS_ACCESS_KEY_ID,
            secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
            sessionToken: process.env.AWS_SESSION_TOKEN,
            region: process.env.AWS_REGION
        });
        return { on, config };
    };

由于测试数据创建过程是异步的,因此我在support/commands.js中添加了此异步命令:

    const testDataCreation = require('test-data-creation');

    Cypress.Commands.add("generateOrganisation", async () => {
        await testDataCreation.generateOrganisation();
    });

在我的测试中:

    describe('Test', () => {
        before(function () {
            cy.generateOrganisation().then(response => response.organisationId).as("orgId");
        });

        it('should visit the page', function () {
            cy.visit(`https://${this.orgId}.website.com/`);
            cy.get('#cookie-box').should('have.class', 'my-cookie');
        });
    });

但是运行测试时,测试失败,并显示消息“ ConfigError:配置中缺少区域” 。当未正确设置AWS配置时,这是一条典型消息。这使我认为赛普拉斯无法使用假定的AWS角色正确运行测试。也许我做错了什么。我猜测它应该“正常工作”(例如如何使用Node运行测试数据创建脚本)。 赛普拉斯如何运行需要AWS凭证(即测试数据创建)的设置步骤?

1 个答案:

答案 0 :(得分:0)

经过各种尝试寻找解决方案-结果非常简单。 这部分是不需要的。 assumerole正在工作,赛普拉斯正在以“假定角色”运行,因此无需再次设置密钥。

    const AWS = require('aws-sdk');
    
    module.exports = (on, config) => {
        AWS.config.update({
            accessKeyId: process.env.AWS_ACCESS_KEY_ID,
            secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
            sessionToken: process.env.AWS_SESSION_TOKEN,
            region: process.env.AWS_REGION
        });
        return { on, config };
    };