Параллельное выполнение тестов

Параллельное выполнение тестов — одна из ключевых возможностей WebdriverIO, позволяющая ускорить процесс тестирования за счет одновременного запуска нескольких сценариев. Использование параллельных потоков особенно важно для крупных проектов с большим количеством автоматизированных тестов.


Настройка параллельного выполнения

WebdriverIO использует параметр maxInstances в конфигурационном файле wdio.conf.js для определения количества одновременных экземпляров браузера. Этот параметр может быть установлен глобально или для конкретного браузера:

exports.config = {
    maxInstances: 5,
    capabilities: [{
        browserName: 'chrome',
        maxInstances: 2,
    }, {
        browserName: 'firefox',
        maxInstances: 1,
    }]
};

Особенности:

  • Глобальный maxInstances определяет максимальное количество параллельных сессий для всего набора тестов.
  • Локальный maxInstances в capabilities позволяет контролировать число экземпляров для конкретного браузера.

Таким образом, можно запускать одновременно несколько Chrome и один Firefox, эффективно распределяя нагрузку.


Разделение тестов на файлы и сьюты

WebdriverIO автоматически распределяет тесты по доступным экземплярам браузеров, если тесты структурированы в разные файлы. Это обеспечивает оптимальное использование параллельных потоков. Рекомендуется организовывать тесты так, чтобы каждый файл содержал отдельный набор сценариев с одной логикой, например:

tests/
 ├─ login.test.js
 ├─ cart.test.js
 └─ checkout.test.js

При запуске с maxInstances > 1 WebdriverIO создаст отдельный экземпляр браузера для каждого файла до достижения лимита потоков.


Использование сьютов (specs) для управления параллелизмом

В конфигурации можно явно указать, какие тесты должны запускаться вместе, а какие — независимо, через параметр specs:

exports.config = {
    specs: [
        './tests/login.test.js',
        './tests/cart.test.js'
    ],
    exclude: [
        './tests/checkout.test.js'
    ]
};

Каждый файл из specs может быть запущен параллельно в отдельном потоке, что позволяет точно управлять приоритетами и зависимостями тестов.


Контроль порядка выполнения и зависимости

Параллельное выполнение подразумевает, что тесты не должны зависеть друг от друга. Любые зависимости между сценариями нарушают изоляцию и могут вызвать нестабильные результаты. Для управления состоянием рекомендуется:

  • Использовать before и beforeEach для подготовки данных перед тестами.
  • Использовать after и afterEach для очистки состояния после тестов.
  • Держать данные тестов изолированными, например, через фикстуры или мок-сервисы.

Логирование и отчеты при параллельном запуске

При параллельном выполнении важно корректно собирать логи и отчеты, чтобы можно было идентифицировать ошибки каждого потока. WebdriverIO поддерживает множество репортеров, включая:

  • spec — стандартный консольный вывод.
  • allure — визуальные отчеты с детальной структурой тестов.
  • json — машиночитаемые файлы для интеграции с CI/CD.

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

reporters: [
    ['allure', {
        outputDir: 'allure-results',
        disableWebdriverStepsReporting: true,
        disableWebdriverScreenshotsReporting: false,
    }]
]

Пример запуска через CLI с параллельными потоками

WebdriverIO позволяет запускать тесты параллельно через командную строку, не изменяя конфигурацию:

npx wdio run wdio.conf.js --spec ./tests/*.test.js --maxInstances 3

В этом примере WebdriverIO создаст до трех параллельных сессий для всех файлов, подходящих под шаблон *.test.js.


Ограничения и тонкости

  • Ресурсы системы: параллельное выполнение требует большего количества оперативной памяти и процессорных ядер. На слабых машинах увеличение maxInstances выше 2–3 может замедлить выполнение.
  • Изоляция данных: использование одной базы данных или общих сессий для нескольких потоков может вызвать коллизии.
  • Синхронизация с внешними сервисами: если тесты взаимодействуют с API или сторонними сервисами, важно учитывать ограничения по количеству одновременных запросов.

Рекомендации по оптимизации

  1. Разделять тесты по логическим блокам и файлам.
  2. Устанавливать maxInstances в зависимости от возможностей машины.
  3. Использовать параллельное выполнение только для независимых тестов.
  4. Логи и скриншоты сохранять с уникальными идентификаторами потоков.
  5. В CI/CD настраивать отдельные агенты для тяжелых параллельных прогонов, чтобы избежать перегрузки одной машины.

Параллельное выполнение тестов в WebdriverIO позволяет значительно ускорить процесс проверки функциональности, однако требует тщательной организации тестов, изоляции данных и грамотного управления ресурсами. Правильная настройка maxInstances, структурирование тестов и использование репортеров делают параллельное тестирование стабильным и предсказуемым.