是否可以 运行 Cypress 使用 AWS assumerole 进行测试?

Is it possible to run Cypress tests using AWS assumerole?

我创建了一些自动化测试来测试面向 API 端点的 public。有一个测试数据创建步骤,它 运行s 直接在我们的 AWS 环境中创建数据(即直接执行 Lambdas,向数据库添加条目)。这是集成到 Cypress 中,并在 package.json

中添加了一个包

要执行此操作,首先需要使用 aws-sdk,特别是 assumerole。当此过程 运行 直接使用 Node 时,它​​会 运行 并用 aws_access_key_idaws_secret_access_keyaws_session_token 填充 ~/.aws/credentials

一旦担任此角色,就可以创建测试数据 运行,并创建用于测试的数据。

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

但是当这是 运行 在 Cypress 中时,它失败了。

这是我的 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');
        });
    });

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

经过多次尝试寻找解决方案 - 结果证明非常简单。 这部分是不需要的。 assumerole 正在工作,Cypress 是 运行 Assumed Role,因此没有必要再次设置密钥。

    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 };
    };