【问题标题】:Is it possible to run Cypress tests using AWS assumerole?是否可以使用 AWS 承担角色运行赛普拉斯测试?
【发布时间】:2020-09-08 07:18:42
【问题描述】:

我创建了一些自动化测试来测试面向公众的 API 端点。有一个测试数据创建步骤,它直接在我们的 AWS 环境中运行和创建数据(即直接执行 Lambda,向数据库添加条目)。这是集成到 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');
        });
    });

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

【问题讨论】:

    标签: amazon-web-services automation cypress qa


    【解决方案1】:

    在寻找解决方案的各种尝试之后 - 事实证明它非常简单。 这部分是不需要的。 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 };
        };
    

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 1970-01-01
      • 2021-06-17
      • 2020-10-26
      • 2019-12-27
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 2023-02-14
      相关资源
      最近更新 更多