- Настройка selenium grid
- Настраиваем Selenium Grid за 5 минут
- Совет инженерам по тестированию №1: Докеризируйте ваш Selenium Grid
- Подготовка к работе
- Запуск вашего Grid
- Подключение к Grid
- Дополнительные советы и хитрости
- Setting up your own
- Grid roles
- Standalone
- Hub and Node(s)
- Node(s)
- Distributed
- Querying Selenium Grid
- Warning
Настройка selenium grid
Запись будет полезна для новичков, кто ни разу не сталкивался с grid-ом, но хотел попробовать.
И так, что же такое selenium grid. Это распределенная сесть selenium серверов для удаленного запуска браузеров.
И так, для начала нам необходимо скачать поcледнюю версию jar файла selenium-server-standalone с официального сайта selenium. На момент написания статьи это версия 3.1.0
После того как мы это сделали, нам необходимо запустить hub. (selenium-server-standalone можно запустить как в режиме hub, так и в режиме node) Hub — это центральный диспетчер, на который мы будем регистрировать необходимые нам сервера и на который будем слать все запросы от тестов.
Открываем консоль, переходим в директорию, в которой находится скаченный нами selenium-server-standalone и выполняем команду:
java -jar selenium-server-standalone-3.1.0.jar -role hub
В консоли у вас должно появится информация об успешном старте hub-a.
Запуск hub
10:05:46.672 INFO — Nodes should register to http://192.168.1.121:4444/grid/register/
10:05:46.673 INFO — Selenium Grid hub is up and running
Первая строчка означает, что теперь мы можем регистрировать узлы на урл, где запущен hub. Вторая строчка означает,
что hub успешно запущен.
Далее необходимо запустить так называемые узлы (node), по которым диспетчер (hub) будет распределять запущенные нами тесты.
Node — это по сути экземпляр selenium server, на котором можно стартануть n-ое количество браузеров.
В данном примере я будут регистрировать и стартовать selenium node-ы на той же машине, на которой у меня запущен hub. Конечно же можно запускать hub на одной удаленной машине, а node-ы на куче других удаленных машин и регистрировать на текущий хаб, собственно говоря для этого selenium grid и нужен.
Открываем новое окно с консолью, в которой вводим следующую команду
java -jar selenium-server-standalone-3.1.0.jar -role node -hub http://192.168.1.121:4444/grid/register/
В этой команде мы стартуем узел и указываем адрес диспетчера, через который будут идти все запросы, адрес, на котором запущен наш hub. В моем случае это будет http://192.168.1.121:4444/wd/hub, но так как в данном примере hub у меня запущен локально на той же машине, на которой будут запущены узлы, то адрес хаба я мог указать, как
http://localhost:4444/grid/register/
В консоли мы видим информацию о том, что узел успешно запустился
running selenium node
При этом на консоли hub-a мы видим информацию о том, что зарегистрирован новый узел
10:54:27.585 INFO — Registered a node http://192.168.1.121:5555
Посмотреть текущее состоянии нашего selenium hub, какие node готовы к работе и какие браузеры в них доступны, можно перейдя в строке браузера на урл, где запущен selenium hub.
В моем случае это http://192.168.1.121:4444/ и оттуда мы переходим в selenium grid hub консоль.
В консоли мы видим, что на данный момент к hub подключена одна node. Когда стартует node, она не может определить какие браузеры доступны и поэтому используется стандартная конфигурация состоящая из 5 браузеров chrome, из 5 ff и 1 IE.
selenium grid console
При этом на всех машинах, где у вас запущены node и где вы планируйте гонять свои тесты на разных браузерах, для каждого браузера на соответствующей машине должен лежать свой драйвер и настроена переменная path.
Подробную конфигурацию node можно посмотреть кликнув по вкладке Configuration данной node.
selenium grid config
При запуске теста необходимо указывать адрес диспетчера, в моем случае это http://192.168.1.121:4444/wd/hub
При этот сам сценарий теста не знает адрес сервера, он знает адреса диспетчера. Все запросы идут через этот диспетчер и распределяются по узлам.
И так как на локальном компьютере у меня запущен hub и запущена одна node. И теперь я попробую запустить 1 тест используя браузер chrome, указав адрес hub-a.
В консоли мы видим, что на узле одна иконка хрома стала задизейбленной , это значит что на узле в данный момент запустился браузер chrome и ходит наш тест.
А теперь запустим еще 1 узел на нашей локальной машине, зарегистрировав его на все тот же наш локальной запущенный хаб.
Открываем новую консоль и вводим
java -jar selenium-server-standalone-3.1.0.jar -role node -hub http://192.168.1.121:4444/grid/register/ -port 5556
Так как мы запускаем узел снова локально, на той же машине, то командой -port лучше указать номер порта, чтобы не получилось так, что узел будет пробовать запуститься на том порту, на котором запущен другой узел.
Смотрим в консоль об успешном запуске узла
stating new node
В консоли с запущенным hub-ом мы видим информацию о том, что в диспетчере зарегистрирован новый узел
12:22:44.566 INFO — Registered a node http://192.168.1.121:5556
По адресу хаба http://192.168.1.121:4444/grid/console мы теперь видим информацию уже о двух узлах.
Также можно зайти в консоль конкретного узла, в моем случае это http://192.168.1.121:5555/wd/hub/static/resource/hub.html, где можно остановить сессию с браузером, создать новую, сделать скриншот экрана с нужным браузером.
Каким образом у нас настроен selenium grid на одном из проектов. У нас есть несколько мощных машин, на которых запущены хаб и ноды. При этом на каждой машине на включении настроены тригеры, которые запускают батники, в которых прописаны старты хабов и нодов с нужными конфигурациями. Примерный батник на одной из windows машин
cd C:\Users\Selenium\
java -jar selenium-server-standalone-3.0.1.jar -role node -hub http://192.168.1.2:4444/grid/register -browser browserName=chrome,version=…,maxInstances=8 -maxSession 8
Параметр browserName означает, что на узле должен использоваться браузер chrome.
Параметр -maxInstances задает максимальное количество экземпляров одного поддерживаемого браузера, которые могут быть запущены на одном узле.
Параметр -maxSession задает максимальное количество браузеров, которые могут быть запущены параллельно на одном узле.
В следующей статье попробую описать мои эксперименты с Selenium Grid Extras
Источник
Настраиваем Selenium Grid за 5 минут
Заметка о том, как правильно настроить Selenium-Grid. Многие делали это неоднократно, а некоторые даже не знают, что это такое. Ориентируюсь на обе части аудитории: если у вас есть опыт, заметка будет служить такой себе справкой — вдруг чего забыли; если вы не пробовали, но очень хотели — это прекрасный шанс начать.
Итак Selenium-Grid позволяет запускать тесты на разных машинах в разных браузерах параллельно.
В основном Selenium Grid используют по нескольким причинам:
Для распараллеливания запуска тестов на различных операционных системах, в различных браузерах; Для того, чтобы уменьшить общее время прогона тестов.
Selenium Grid оперирует такими составляющими, как Hub и Node.
Hub — центральная точка, которая принимает запросы и направляет их к Node. Такой себе командный пункт. В гриде может быть только один Hub.
Node — Selenium инстанс, который будет запускать команды, загружаемые в Hub. Node может быть много в гриде. Node — может запускаться на разных операционных системах с разными браузерами.
Скачать Selenium Server Standalone здесь.
Создайте папку seleniumgrid и скопируйте в нее скачанный selenium_server_x.xx.x.jar файл.
Стартуем Hub.
Открываем окно команд и выполняем:
Должно появиться что-то подобное этому:
Для того, чтобы проверить, что все стартовало правильно, нужно набрать в браузере
Стартуем Node.
В моем случае и Hub и Node расположены на одном компьютере, но это не сильно меняет ситуацию.
Открываем консоль и пишем:
Node для браузера FireFox
Для браузеров Chrome и Internet Explorer настройка немного отличается. Нужно дописать путь к драйверам соответствующих браузеров -Dwebdriver.ie.driver=IEDriverServer.exe и -Dwebdriver.chrome.driver=chromedriver.exe. Скачать драйверы можно на сайте selenium.org
Полные команды выглядят так:
Для Internet explorer я уже описывал, как можно использовать драйвер, написанный самим Майкрософт.
Для того, чтобы проверить, что все настроено корректно, нужно открыть все тот же http://localhost:4444/grid/console и убедиться, что там отображается один истанс IE и один Chrome.
Следует добавить, конфигурировать Hub и Node можно с помощью JSON файлов.
Пример для Hub:
Пример для Node:
Ну вот и все, в следующих заметках я покажу, как пользоваться настроенным гридом и запускать тесты. Если вам интересно, подписывайтесь,чтобы получать обновления первым.
Источник
Совет инженерам по тестированию №1: Докеризируйте ваш Selenium Grid
И снова здравствуйте. Перевели для вас полезную заметку в преддверии старта курса «Java QA Engineer».
Каждый год инженеры по автоматизации тестирования со всего мира исследуют новейшие инструменты и методы, чтобы сделать свою среду автоматизации тестирования более стабильной, быстрой и простой в использовании и обслуживании. Это жизненно важно для обеспечения постоянного широкомасштабного внедрения их фреймворков в их компании. Так или иначе, раздутые устаревшие фреймворки быстро выходят из моды.
Selenium Grid, как известно, сложен в настройке, нестабилен и сложен в развертывании и/или управлении версиями на CI конвейере. Более простой, стабильный и удобный способ — использовать предварительно созданные образы Selenium Docker.
Примечание: Единственным недостатком этого метода является то, что не поддерживается IE (Internet Explorer), так как операционную систему Windows на данный момент невозможно поместить в контейнер.
Подготовка к работе
Чтобы приступить к работе, вам необходимо сначала установить Docker и Docker Compose на вашем компьютере. Если вы используете Windows 10 или Mac, они оба будут установлены с помощью Docker Desktop.
Запуск вашего Grid
Официальный репозиторий Selenium на Docker Hub содержит предварительно созданные образы Docker для ваших нодов (узлов) Selenium Hub, Firefox и Chrome.
Самый простой способ использовать их в локальном Selenium Grid — создать файл Docker Compose в корневом каталоге вашего проекта. Назовите файл просто docker-compose.yml .
Я включил пример ниже, который создает следующий Grid:
- Один Selenium Hub
- Один нод Chrome
- Один нод Firefox
Файл Docker Compose описывает настройку вашего Grid. Дополнительные сведения о создании файлов Docker Compose см. в официальной документации.
Чтобы запустить свой Grid, просто используйте любой терминал ( PowerShell или cmd в Windows), в котором выполните следующую команду из корневого каталога вашего проекта:
Подключение к Grid
Вы можете подключиться к своему Selenium Grid точно в так же, как обычно, поскольку Hub прослушивает порт 4444 вашей локальной машины. Вот пример, в котором мы настроили наш Driver для использования нашего Chrome Node.
Затем вы можете использовать библиотеку TestNG, чтобы запускать тесты на нескольких нодах параллельно, как обычно.
Стоит отметить, что на каждом ноде можно запустить несколько браузеров. Однако это не рекомендуется, и использование одного браузера на каждом ноде считается лучшей практикой для достижения оптимальной производительности.
Дополнительные советы и хитрости
Если вы хотите увидеть, что происходит в браузере, в целях отладки своих тестов, то стоит иметь debug версию вашего docker-compose.yml файла, который загружает debug браузерные ноды. Они содержат сервер VNC, поэтому вы можете наблюдать за браузером во время выполнения теста.
Также возможно запускать headlessly-браузеры для увеличения скорости (обычный способ), и Selenium также предоставляет base версии образов, так что вы можете создавать свои собственные образы, если вам нужно установить дополнительное программное обеспечение.
Чтобы создать стабильную версию Grid для вашего CI конвейера, также можно развернуть ваш Grid на Kubernetes или Swarm. Это гарантирует быстрое восстановление или замену докеров в случае их выхода из строя.
Источник
Setting up your own
Grid roles
Several components compose a Selenium Grid. Depending on your needs, you can start each one of them on its own, or a few at the same time by using a Grid role.
Standalone
Standalone is the union of all components, and to the user’s eyes, they are executed as one. A fully functional Grid of one is available after starting it in the Standalone mode.
Standalone is also the easiest mode to spin up a Selenium Grid. By default, the server will be listening on http://localhost:4444 , and that’s the URL you should point your RemoteWebDriver tests. The server will detect the available drivers that it can use from the System PATH .
Hub and Node(s)
It enables the classic Hub & Node(s) setup. These roles are suitable for small and middle-sized Grids.
A Hub is the union of the following components:
- Router
- Distributor
- Session Map
- New Session Queue
- Event Bus
By default, the server will be listening on http://localhost:4444 , and that’s the URL you should point your RemoteWebDriver tests.
Node(s)
One or more Nodes can be started in this setup, and the server will detect the available drivers that it can use from the System PATH .
Distributed
On Distributed mode, each component needs to be started on its own. This setup is more suitable for large Grids.
- Event Bus: serves as a communication path to other Grid components in subsequent steps.
- Session Map: responsible for mapping session IDs to the Node where the session is running.
- New Session Queue: adds the new session request to a queue, then the distributor processes it.
- Distributor: Nodes register to it, and assigns a Node for a session request.
- Router: the Grid entrypoint, in charge of redirecting requests to the right component.
Querying Selenium Grid
After starting a Grid, there are mainly two ways of querying its status, through the Grid UI or via an API call.
The Grid UI can be reached by opening your preferred browser and heading to http://localhost:4444.
API calls can be done through the http://localhost:4444/status endpoint or using GraphQL:
For simplicity, all command examples shown in this page assume that components are running locally. More detailed examples and usages can be found in the Configuring Components section.
Warning
Selenium Grid must be protected from external access using appropriate firewall permissions.
Failure to protect your Grid could result in one or more of the following occurring:
- You provide open access to your Grid infrastructure
- You allow third parties to access internal web applications and files
- You allow third parties to run custom binaries
See this blog post on Detectify, which gives a good overview of how a publicly exposed Grid could be misused: Don’t Leave your Grid Wide Open
Источник