Транспортировка асинхронного параллельного тестирования на док-контейнерах - PullRequest
0 голосов
/ 12 февраля 2019

в течение нескольких дней я борюсь с параллельным выполнением тестов с помощью докера селеном.

Следующий сценарий:

  • Определение браузеров в multiCapabilities со спецификациями.
  • Развертывание контейнеровс selenium-hub, 2 firefox, 2 chrome узлами.
  • Выполнение тестов

Проблемы возникают, когда chrome и firefox параллельно выполняют одну и ту же спецификацию.В зависимости от скорости выполнения, скажем, является ли Firefox первым и Chrome вторым.(spec1 работает в обоих браузерах одновременно).

Должная зависимость spec1 успешна в Firefox (как и ожидалось), а в chrome она должна завершиться с исключением (как и ожидалось).Здесь начинается интересная часть:

тест Firefox заканчивается, но chrome зависает (часть, в которой он генерирует исключение), и тест завершается неудачно после заданного времени ожидания jasmine / test, скажем, 3 минуты с " невыполненное обещание".... Так как я ожидал метода и обернул его в try catch, исключение должно перейти к тесту, где я также обернул методы теста впопробуйте catch, и если есть исключение done.fail () должно остановить тест.

Но это никогда не идет туда ... после долгого времени отладки, единственное, что я вижу, это исключение:брошен, и он никогда не идет в тест, где я должен поймать его и провалить тест.

Конфигурация мульти-возможностей

{
    browserName: 'chrome',
    shardTestFiles: true,
    maxInstances: 2,
    specs: [
        '../spec/**/spec1.js'
    ]
},
    {
    browserName: 'firefox',
    maxInstances: 2,
    shardTestFiles: true,
    marionette: true,
    specs: [
        '../spec/**/spec1.js'
    ]
},

Специфический для транспортира:

    SELENIUM_PROMISE_MANAGER: false,
    seleniumAddress: 'ip of the selenium hub'
    maxSessions: 4
    framework: 'jasmine'
    ... and other custom not related props as loggers, reporters etc.

Тестовый пример:

describe('test 1', () => {

    it('can done something', async (done) => {
        try {
            await doSomething();
        } catch (e) {
            done.fail(e);
        }

        done();
    }, 1000 * 60 * 5);
}

если есть исключение из doSomething (), тест должен быть принудительно завершен с ошибкой, но он зависает при параллельном выполнении.

Я что-то пропускаю и / или можете ли вы предложитьпочему это виситs, при выполнении одного и того же теста в разных браузерах?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 12 февраля 2019

Такого рода обратные вызовы не работают с асинхронным.Если вы хотите провалить тест, вы можете сделать это проще:

describe('test 1', () => {

    it('can done something', async () => {
        try {
            await doSomething();
        } catch (e) {
            throw new Error(e);
        }
    }
}

PS Я настоятельно рекомендую использовать Селеноид для запуска тестов e2e в контейнерах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...