Я создал несколько автоматических тестов для тестирования конечной точки API с открытым доступом. Существует этап создания тестовых данных, который запускает и создает данные непосредственно в нашей среде AWS (т. Е. Напрямую выполняет Lambdas, добавляя записи в базу данных). Он интегрирован в 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 };
    };

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

1
nuclearcat 8 Сен 2020 в 10:18

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 };
    };
2
nuclearcat 19 Окт 2020 в 06:50