Возможно ли запускать тесты Cypress с использованием AWS assumerole?

#amazon-web-services #automation #cypress #qa

#amazon-web-services #автоматизация #cypress

Вопрос:

Я создал несколько автоматических тестов для тестирования общедоступной конечной точки API. Существует этап создания тестовых данных, который запускается и создает данные непосредственно в нашей среде AWS (т. Е. непосредственно выполняет лямбды, добавляя записи в базу данных). Это интегрировано в Cypress и добавлено в пакет package.json

Для выполнения этого сначала необходимо использовать aws-sdk , в частности assumerole . Когда этот процесс запускается непосредственно с помощью Node, он запускается и заполняется ~/.aws/credentials с помощью aws_access_key_id , aws_secret_access_key и aws_session_token .

Как только эта роль принята, можно запускать создание тестовых данных, и данные создаются для тестирования.

Используя 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 };
    };
  

И поскольку процесс создания тестовых данных является асинхронным, я добавил эту команду async в 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 установлена неправильно. Что заставляет меня думать, что Cypress не может корректно запускать тесты с предполагаемой ролью AWS. Или, может быть, я сделал что-то не так. Я предполагал, что это должно «просто работать» (например, как сценарий создания тестовых данных может быть запущен с помощью Node).
Как можно выполнить шаги настройки, требующие учетных данных AWS (т. Е. Создание тестовых данных), из Cypress?

Ответ №1:

После различных попыток найти решение — это оказалось довольно простым. Эта часть не понадобилась. assumerole работал, и Cypress выполнялся с предполагаемой ролью, и поэтому не было необходимости снова устанавливать ключи.

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