Конфигурирование Grid параметров

WebdriverIO предоставляет гибкие возможности для организации распределённого запуска тестов через Selenium Grid или собственный сервис webdriver в многопоточном режиме. Правильная конфигурация Grid-параметров позволяет масштабировать тестирование, сокращать время выполнения тестов и управлять распределением нагрузки на узлы.

Настройка Selenium Grid

Selenium Grid состоит из Hub и Node. Hub принимает запросы на выполнение тестов и распределяет их между доступными узлами. Node — это машина, которая выполняет тесты в заданных браузерах и операционных системах.

Основные параметры конфигурации Grid в WebdriverIO указываются в файле wdio.conf.js:

exports.config = {
    hostname: 'localhost',   // адрес Hub
    port: 4444,              // порт Hub
    path: '/wd/hub',         // путь для WebDriver запросов
    capabilities: [{
        browserName: 'chrome', 
        maxInstances: 5,      // максимальное количество параллельных сессий на этом узле
    }],
    logLevel: 'info',
    services: ['selenium-standalone'],
};

Ключевые моменты конфигурации:

  • hostname — адрес Selenium Hub. Для локального Grid обычно localhost, для удалённого — IP или доменное имя сервера.
  • port — стандартный порт Selenium Hub — 4444.
  • path — путь к WebDriver API (/wd/hub для большинства версий Selenium).
  • capabilities — набор возможностей браузеров. Важно указывать maxInstances, чтобы контролировать нагрузку на узел.

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

WebdriverIO поддерживает параллельное выполнение тестов с помощью свойства maxInstances в конфигурации capabilities и свойства maxInstances на уровне config. Пример:

exports.config = {
    maxInstances: 10,  // общее количество параллельных сессий
    capabilities: [
        {
            browserName: 'chrome',
            maxInstances: 5
        },
        {
            browserName: 'firefox',
            maxInstances: 5
        }
    ]
};

Здесь Chrome и Firefox будут выполняться параллельно, при этом каждая сессия ограничена 5 экземплярами браузера. Если на Hub есть только один Node с установленными браузерами, WebdriverIO будет ожидать свободные слоты, прежде чем запустить тесты.

Распределение нагрузки между узлами

Для более точного распределения нагрузки можно использовать свойства:

  • browserVersion — версия браузера, необходимая для тестов.
  • platformName — операционная система узла (Windows, Linux, macOS).
  • acceptInsecureCerts — разрешение на работу с сертификатами.

Пример для распределения тестов по платформам:

capabilities: [
    {
        browserName: 'chrome',
        browserVersion: '114.0',
        platformName: 'Windows 11',
        maxInstances: 3
    },
    {
        browserName: 'chrome',
        browserVersion: '114.0',
        platformName: 'Linux',
        maxInstances: 3
    }
]

WebdriverIO автоматически направляет тесты на подходящие узлы, удовлетворяющие указанным параметрам.

Настройка gridUrl для удалённого Selenium Grid

Если используется удалённый Hub, необходимо указать полный URL:

exports.config = {
    protocol: 'http',
    hostname: 'grid.example.com',
    port: 4444,
    path: '/wd/hub',
    capabilities: [
        { browserName: 'chrome', maxInstances: 5 }
    ]
};

Можно также использовать сервис @wdio/selenium-standalone-service для локального запуска Grid. Он автоматически поднимает Hub и Node с нужными браузерами и версиями Selenium.

Настройка таймаутов

Grid-тесты требуют корректной настройки таймаутов, чтобы избежать зависаний при параллельном запуске. Основные параметры:

  • connectionRetryTimeout — максимальное время ожидания ответа от Node.
  • connectionRetryCount — количество повторных попыток подключения к узлу.
  • waitforTimeout — глобальный таймаут ожидания элементов на странице.

Пример:

exports.config = {
    connectionRetryTimeout: 120000, // 2 минуты
    connectionRetryCount: 3,
    waitforTimeout: 10000
};

Логирование и отладка Grid

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

logLevel: 'debug',
outputDir: './logs'

Использование различных браузеров и версий

WebdriverIO поддерживает множественные конфигурации capabilities для тестирования на разных браузерах одновременно. Использование browserName, browserVersion и platformName позволяет создавать матрицу тестов:

capabilities: [
    {
        browserName: 'chrome',
        maxInstances: 2,
        browserVersion: '114.0',
        platformName: 'Windows 10'
    },
    {
        browserName: 'firefox',
        maxInstances: 2,
        browserVersion: '112.0',
        platformName: 'Linux'
    }
]

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

Важные рекомендации

  • Всегда проверять совместимость версий Selenium Hub, Node и браузеров.
  • Ограничивать количество maxInstances по ресурсам машины, чтобы избежать падения узла.
  • Разделять capabilities по платформам и версиям для удобного масштабирования.
  • Использовать локальный Grid для разработки и удалённый — для интеграционных и нагрузочных тестов.

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