WebdriverIO предоставляет гибкие возможности для организации
распределённого запуска тестов через Selenium Grid или собственный
сервис webdriver в многопоточном режиме. Правильная
конфигурация 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'],
};
Ключевые моменты конфигурации:
localhost, для удалённого — IP или доменное имя
сервера.4444./wd/hub
для большинства версий Selenium).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-тесты требуют корректной настройки таймаутов, чтобы избежать зависаний при параллельном запуске. Основные параметры:
Пример:
exports.config = {
connectionRetryTimeout: 120000, // 2 минуты
connectionRetryCount: 3,
waitforTimeout: 10000
};
Для контроля распределения тестов важно включать логирование на
уровне 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'
}
]
Каждая комбинация браузер–платформа будет запускаться независимо, обеспечивая параллельное покрытие всех необходимых сценариев.
maxInstances по ресурсам
машины, чтобы избежать падения узла.Эта конфигурация позволяет построить стабильную и масштабируемую среду тестирования с WebdriverIO, эффективно управлять параллельностью и распределением нагрузки, а также минимизировать риски зависаний при выполнении большого количества тестов.