Управление количеством рабочих процессов

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

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

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

Пример настройки:

exports.config = {
    capabilities: [{
        browserName: 'chrome',
        maxInstances: 5
    }],
    // остальная конфигурация
};

В этом примере одновременно могут запускаться до пяти экземпляров браузера Chrome. Если тестов больше, чем доступных процессов, WebdriverIO будет ставить их в очередь.

Глобальная настройка maxInstances

Кроме уровня отдельной capabilities, можно задавать глобальное количество процессов через параметр maxInstances в корне конфигурации. Он ограничивает суммарное число всех одновременных инстансов, независимо от браузеров.

exports.config = {
    maxInstances: 10, // максимум процессов для всех capabilities
    capabilities: [
        { browserName: 'chrome', maxInstances: 5 },
        { browserName: 'firefox', maxInstances: 5 }
    ],
};

В данном случае одновременно могут выполняться не более 10 тестов, распределённых между Chrome и Firefox.

Балансировка нагрузки между рабочими процессами

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

  • Меньше процессов, чем CPU: время выполнения будет дольше, но стабильность выше.
  • Слишком много процессов: возможно снижение производительности из-за конкуренции за ресурсы памяти и CPU.

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

maxInstances = количество ядер CPU × 2 / 3

Эта эмпирическая формула помогает избежать перегрузки хоста при параллельном запуске.

Разделение тестов на файлы и процессы

Каждый рабочий процесс WebdriverIO запускает отдельный Node.js процесс, в котором выполняются тесты, заданные в конкретном файле спецификации (spec file). То есть один процесс не может выполнять тесты из нескольких файлов одновременно.

Пример структуры specs в конфигурации:

exports.config = {
    specs: [
        './test/specs/login/*.js',
        './test/specs/cart/*.js'
    ],
    maxInstances: 4,
};

Если указано четыре процесса, WebdriverIO запустит до четырёх файлов спецификаций одновременно.

Управление рабочими процессами при использовании нескольких браузеров

При тестировании на нескольких браузерах каждый браузер учитывается как отдельная capability. Каждый процесс назначается на определённую capability.

exports.config = {
    maxInstances: 6,
    capabilities: [
        { browserName: 'chrome', maxInstances: 3 },
        { browserName: 'firefox', maxInstances: 3 }
    ],
};
  • Всего одновременно будут выполняться максимум 6 процессов.
  • Chrome и Firefox будут запускать по 3 процесса.
  • Если тестов больше, они будут выполняться по мере освобождения процессов.

Интеграция с облачными сервисами

При использовании облачных провайдеров, таких как Selenium Grid, BrowserStack или Sauce Labs, управление рабочими процессами также важно. Параметр maxInstances определяет количество параллельных сессий, которые могут быть одновременно созданы на облачной платформе.

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

Выводы по управлению процессами

  • maxInstances — основной инструмент контроля параллельности.
  • Оптимальное число процессов зависит от ресурсов хоста.
  • Каждый файл спецификации выполняется в отдельном процессе.
  • Настройка на уровне capabilities позволяет балансировать нагрузку между браузерами.
  • При работе с облачными сервисами необходимо учитывать их ограничения на параллельные сессии.

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