Открыть сервис

Selenium Grid

Selenium Grid — это компонент программного обеспечения с открытым исходным кодом для автоматизации веб-браузеров, входящий в состав проекта Selenium. Он предназначен для распределённого выполнения тестовых сценариев на нескольких машинах (узлах) с различными операционными системами и браузерами одновременно. Основная цель Selenium Grid — ускорение процесса регрессионного тестирования и обеспечение кросс-браузерной и кросс-платформенной совместимости веб-приложений.

История

Selenium Grid был создан в 2008 году Филиппом Хэннигтоном (Philippe Hanrigou) как дополнение к Selenium Remote Control (Selenium RC). Изначально проект назывался «Selenium Grid» и представлял собой отдельный инструмент для параллельного запуска тестов. В 2011 году, с выходом Selenium 2 (который объединил Selenium RC и WebDriver), Grid был интегрирован в основной дистрибутив Selenium. В 2014 году, с появлением Selenium 3, Grid был полностью переработан: была введена новая архитектура (Hub и Node), улучшена поддержка Docker и контейнеризации. В 2021 году, с выходом Selenium 4, Grid был значительно модернизирован: появилась поддержка распределённой архитектуры без единого Hub (режим «Distributed»), улучшена работа с сессиями, добавлен новый интерфейс управления сессиями (Session Map) и встроенная поддержка Docker Compose.

Архитектура

Selenium Grid работает по клиент-серверной модели. Основные компоненты:

  • Hub (Центральный узел): сервер, который принимает запросы на выполнение тестов от клиентов (тестовых фреймворков) и распределяет их по доступным узлам. Hub хранит информацию о конфигурации узлов (браузеры, версии, платформы) и управляет очередью запросов. В Selenium 4 Hub стал более лёгким и может быть заменён на несколько распределённых компонентов.
  • Node (Узел): отдельная машина (физическая или виртуальная), на которой установлены браузеры и драйверы (ChromeDriver, GeckoDriver, EdgeDriver и т.д.). Node регистрируется на Hub и сообщает о своих возможностях. Когда Hub получает запрос на тест, он выбирает подходящий Node и перенаправляет команды.
  • Session Map (Карта сессий): новый компонент Selenium 4, который хранит информацию о текущих активных сессиях (ID сессии, Node, браузер). Позволяет Hub быстрее находить и управлять сессиями.
  • Distributed (Распределённый режим): в Selenium 4 Hub может быть разбит на несколько микросервисов: Router, Distributor, Session Map, New Session Queue. Это повышает отказоустойчивость и масштабируемость, позволяя запускать Grid на нескольких серверах без единой точки отказа.

Режимы работы

Selenium Grid поддерживает два основных режима работы:

Standalone (Автономный)

Один сервер выполняет роль и Hub, и Node. Подходит для небольших проектов или локального тестирования. Запускается одной командой: ``bash java -jar selenium-server-<version>.jar standalone ``

Hub & Node

Классическая архитектура с центральным Hub и несколькими Node. Hub запускается отдельно, Node — отдельно и регистрируются на Hub. Позволяет масштабировать тестирование на десятки и сотни машин.

Distributed (Распределённый)

В Selenium 4 доступен режим, где Hub заменён набором микросервисов, работающих на разных портах. Для запуска требуется несколько команд, но достигается высокая отказоустойчивость.

Конфигурация

Конфигурация Selenium Grid осуществляется через JSON-файлы или параметры командной строки. Основные параметры:

  • Капабилити (Capabilities): набор требований к браузеру и платформе, передаваемый клиентом (например, browserName: "chrome", browserVersion: "latest", platformName: "linux"). Hub сопоставляет их с возможностями Node.
  • Максимальное количество сессий: ограничение на число одновременно запущенных тестов на одном Node.
  • Таймауты: время ожидания новой сессии, время бездействия сессии.
  • Прокси и сетевые настройки: для работы в корпоративных сетях.

Пример конфигурации Node (JSON): ``json { "capabilities": [ { "browserName": "chrome", "maxInstances": 5, "platformName": "linux" }, { "browserName": "firefox", "maxInstances": 3, "platformName": "linux" } ], "configuration": { "port": 5555, "registerCycle": 5000 } } ``

Применение

Selenium Grid используется в следующих сценариях:

  • Параллельное выполнение тестов: одновременный запуск сотен тестов на разных машинах, что сокращает время выполнения с часов до минут.
  • Кросс-браузерное тестирование: проверка веб-приложения в разных браузерах (Chrome, Firefox, Safari, Edge) и их версиях.
  • Кросс-платформенное тестирование: запуск тестов на разных операционных системах (Windows, macOS, Linux) с одного центрального сервера.
  • Интеграция с CI/CD: Selenium Grid легко интегрируется с Jenkins, GitLab CI, GitHub Actions и другими системами непрерывной интеграции.
  • Тестирование в облаке: Selenium Grid может быть развёрнут на облачных платформах (AWS, Яндекс.Облако, Selectel) или использоваться с облачными сервисами (Sauce Labs, BrowserStack — эти сервисы являются сторонними и не входят в проект Selenium).

Преимущества и недостатки

Преимущества

  • Масштабируемость: можно добавлять новые Node без остановки работы Grid.
  • Экономия времени: параллельный запуск значительно ускоряет тестирование.
  • Гибкость: поддержка различных браузеров, версий и платформ.
  • Открытый исходный код: бесплатен, активно развивается сообществом.
  • Интеграция с Docker: позволяет быстро разворачивать изолированные окружения для тестов.

Недостатки

  • Сложность настройки: для больших конфигураций требуется знание сетевых протоколов и администрирования.
  • Зависимость от сети: задержки и сбои сети могут влиять на выполнение тестов.
  • Ограниченная поддержка мобильных браузеров: для тестирования на мобильных устройствах требуется дополнительная настройка (например, Appium).
  • Отсутствие встроенного отчёта: Grid не генерирует отчёты о выполнении тестов — для этого используются внешние фреймворки (Allure, ReportPortal).

Пример использования

Типичный сценарий работы с Selenium Grid на Java:

```java import org.openqa.selenium.WebDriver; import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.RemoteWebDriver; import java.net.URL;

public class GridTest { public static void main(String[] args) throws Exception { DesiredCapabilities caps = new DesiredCapabilities(); caps.setBrowserName("chrome"); caps.setVersion("latest"); caps.setPlatform(Platform.LINUX);

WebDriver driver = new RemoteWebDriver( new URL("http://localhost:4444/wd/hub";), caps); driver.get("https://example.com";); System.out.println(driver.getTitle()); driver.quit(); } } ```

Безопасность

Selenium Grid не имеет встроенной аутентификации или шифрования трафика. При развёртывании в открытой сети рекомендуется:

  • Использовать HTTPS (через обратный прокси, например, Nginx).
  • Ограничить доступ по IP-адресам (брандмауэр).
  • Использовать VPN или туннели (SSH).
  • В Selenium 4 добавлена поддержка токенов аутентификации (но требуется ручная настройка).

Альтернативы

На рынке существуют коммерческие и открытые альтернативы Selenium Grid:

  • Zalenium (открытый, на основе Docker).
  • Selenoid (открытый, лёгкий, на основе Docker).
  • BrowserStack (коммерческий, облачный).
  • Sauce Labs (коммерческий, облачный).
  • TestingBot (коммерческий, облачный).

Литература

  • Selenium Documentation. «Selenium Grid». Официальная документация проекта Selenium.
  • Gojko Adzic. «Selenium WebDriver: Practical Guide for Test Automation». 2018.
  • Dave Haeffner. «The Selenium Guidebook». 2020.
  • Mark Collin. «Selenium 4: The Complete Guide». 2022.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →