Что такое Selenium Grid?
Selenium Grid позволяет запускать тесты на нескольких машинах (нодах) параллельно, в разных браузерах и ОС. Вместо последовательного запуска 100 тестов на одной машине (2 часа) можно распределить их на 10 нодов параллельно (12 минут).
Зачем нужен Grid
| Без Grid | С Grid |
|---|---|
| 1 браузер за раз | Несколько браузеров одновременно |
| Последовательное выполнение | Параллельное выполнение |
| Одна ОС | Несколько ОС |
| 100 тестов × 2 мин = 200 мин | 100 тестов ÷ 10 нодов = 20 мин |
Архитектура Selenium Grid 4
┌─────────────────────────────────────┐
│ Selenium Grid │
│ ┌──────────┐ ┌──────────────┐ │
│ │ Router │ │ Distributor │ │
│ └────┬─────┘ └──────┬───────┘ │
│ ┌────┴─────┐ ┌──────┴───────┐ │
│ │ Session │ │ Node │ │
│ │ Map │ │ Manager │ │
│ └──────────┘ └──────────────┘ │
└─────────────────────────────────────┘
│ │
┌────┴────┐ ┌────┴────┐
│ Node 1 │ │ Node 2 │
│ Chrome │ │ Firefox │
└─────────┘ └─────────┘
Компоненты:
- Router — точка входа, принимает WebDriver-запросы
- Distributor — назначает сессии доступным нодам
- Session Map — отслеживает, какой Node владеет какой сессией
- Node — запускает браузеры и выполняет тесты
Настройка Selenium Grid
Standalone-режим (одна машина)
java -jar selenium-server-4.18.0.jar standalone
Grid доступен на http://localhost:4444.
Режим Hub и Node (несколько машин)
# На машине hub
java -jar selenium-server-4.18.0.jar hub
# На машине-ноде
java -jar selenium-server-4.18.0.jar node --hub http://hub-ip:4444
Подключение тестов к Grid
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.browser_version = "latest"
driver = webdriver.Remote(
command_executor="http://localhost:4444",
options=options
)
driver.get("https://app.example.com")
driver.quit()
Selenium Grid на Docker
Docker — рекомендуемый способ запуска Selenium Grid.
Настройка Docker Compose
version: "3"
services:
selenium-hub:
image: selenium/hub:4.18.0
ports:
- "4442:4442"
- "4443:4443"
- "4444:4444"
chrome-node:
image: selenium/node-chrome:4.18.0
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
- SE_NODE_MAX_SESSIONS=4
deploy:
replicas: 2
firefox-node:
image: selenium/node-firefox:4.18.0
depends_on:
- selenium-hub
environment:
- SE_EVENT_BUS_HOST=selenium-hub
- SE_EVENT_BUS_PUBLISH_PORT=4442
- SE_EVENT_BUS_SUBSCRIBE_PORT=4443
docker compose up -d
docker compose up -d --scale chrome-node=5
open http://localhost:4444/ui
Параллельное выполнение тестов
pytest (Python)
pip install pytest-xdist
pytest tests/ -n 4 # 4 параллельных воркера
WebdriverIO (JavaScript)
exports.config = {
maxInstances: 10,
capabilities: [
{ browserName: 'chrome', maxInstances: 5 },
{ browserName: 'firefox', maxInstances: 3 },
],
};
Облачные провайдеры Grid
| Провайдер | Браузеры | Реальные устройства | Цена |
|---|---|---|---|
| BrowserStack | 3 000+ | Да | От $29/мес |
| Sauce Labs | 2 000+ | Да | От $39/мес |
| LambdaTest | 3 000+ | Да | От $15/мес |
Интеграция с BrowserStack
options = webdriver.ChromeOptions()
options.set_capability('bstack:options', {
'os': 'Windows',
'osVersion': '11',
'browserVersion': 'latest',
'projectName': 'E-Commerce Tests',
})
driver = webdriver.Remote(
command_executor=f'https://{USERNAME}:{ACCESS_KEY}@hub-cloud.browserstack.com/wd/hub',
options=options
)
Мониторинг и отладка Grid
Dashboard UI
Откройте http://localhost:4444/ui для просмотра: подключённых нодов, активных сессий, длины очереди, состояния здоровья.
Запись видео
chrome-node:
image: selenium/node-chrome:4.18.0
volumes:
- ./videos:/opt/selenium/assets
environment:
- SE_RECORD_VIDEO=true
Упражнение: Настройте Selenium Grid
- Создайте Docker Compose с Hub, 2 нодами Chrome, 1 нодом Firefox
- Запустите grid и проверьте, что все ноды видны в дашборде
- Модифицируйте тест для использования RemoteWebDriver с подключением к grid
- Запустите один тест в Chrome и Firefox через capabilities
- Запустите тесты параллельно через pytest-xdist
- Сравните время выполнения: последовательно vs параллельно
Ключевые выводы
- Selenium Grid обеспечивает параллельное, распределённое выполнение тестов
- Docker Compose — простейший способ настроить и управлять Grid
- Grid 4 имеет модернизированную архитектуру с Router, Distributor, Session Map и Nodes
- Облачные провайдеры предлагают управляемые grid для корпоративного масштаба
- Параллельное выполнение может сократить время suite на 80-90%
- Всегда мониторьте здоровье Grid через встроенный дашборд