Содержание:
- Что такое Selenium Grid?
- Архитектура Selenium Grid
- Как настроить Selenium Grid?
- Когда использовать Selenium Grid?
- Grid 1.0 Vs Grid 2.0
- Разработка тестовых сценариев, которые могут выполняться на Grid
- Использование объекта DesiredCapabilites
- Использование объекта RemoteWebDriver
- Запуск тестового примера на Grid
- Конфигурация Selenium Grid с помощью JSON-файла
- Конфигурирование NODES с помощью JSON
Что такое Selenium Grid?
Selenium Grid – часть пакета Selenium, которая специализируется на параллельном запуске нескольких тестов в разных браузерах, операционных системах и компьютерах. Это достигается путем маршрутизации команд удаленных экземпляров браузера, где сервер выступает в качестве концентратора. Пользователю необходимо настроить удаленный сервер для выполнения тестов.
У Selenium Grid есть две версии — старая Grid 1 и новая Grid 2. Мы сосредоточимся только на Grid 2, поскольку Grid 1 постепенно выводится из употребления командой Selenium.
Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ
Архитектура Selenium Grid
Selenium Grid имеет архитектуру, состоящую из Hub (хаба) и Node (узла).
Архитектура Selenium Grid
Хаб
- Хаб – это центральная точка, в которую загружаются тесты.
- В сетке должен быть только один хаб.
- Хаб запускается только на одном устройстве, скажем, на компьютере, ОС которого – Windows 7, а браузер – IE.
- На компьютере, содержащем хаб, будут выполняться тесты, но вы увидите, что браузер автоматизируется на узле.
Узлы
- Узлы – это экземпляры Selenium, которые будут выполнять тесты, загруженные вами в хаб.
- В сетке может быть один или несколько узлов.
- Узлы могут быть запущены на нескольких устройствах с различными платформами и браузерами.
- Компьютеры, на которых работают узлы, не обязательно должны быть той же платформы, что и хаб.
Selenium Grid использует концепцию “хаб – узел”, при которой вы запускаете тест только на одном устройстве, называемым хабом, но выполнение будет выполняться на разных устройствах, называемых узлами.
Как настроить Selenium Grid?
В этом разделе будут использоваться два компьютера. Первый будет представлять собой систему, на которой будет работать хаб, а на втором будет работать узел. Для простоты назовем компьютер, на которой работает хаб, “компьютер A”, а компьютер, на которой работает узел, – “компьютер B”. Важно также отметить их IP-адреса. Допустим, устройство A имеет IP-адрес 192.168.1.3, а устройство B – 192.168.1.4.
Шаг 1.
Загрузите Selenium Server по ссылке.
Шаг 2.
Вы можете поместить файл Selenium Server.jar в любое место на жестком диске. Но для целей данного руководства поместите его на диск C компьютера A и компьютера B. После этого завершите установку Selenium Grid. Следующие шаги приведут к запуску хаба и узла.
Шаг 3.
- Затем мы запустим хаб. Перейдите на компьютер A. С помощью командной строки зайдите в корень диска C, поскольку именно в этом каталоге мы разместили Selenium Server.
- В командной строке введите java -jar selenium-server-standalone-2.30.0.jar -role hub.
- Хаб должен быть успешно запущен. Командная строка должна выглядеть так, как показано на рисунке ниже.
Шаг 4.
Другой способ проверить, работает ли хаб, — использовать браузер. Selenium Grid по умолчанию использует порт 4444 устройства A для своего веб-интерфейса. Просто откройте браузер и перейдите по адресу http://localhost:4444/grid/console.
Кроме того, вы можете проверить, может ли компьютер Б получить доступ к веб-интерфейсу хаба, запустив на нем браузер и перейдя туда, где «iporhostnameofmachineA» должен быть IP-адресом или именем хоста устройства, на которой работает хаб. Поскольку IP-адрес компьютера А — 192.168.1.3, то в браузере компьютера Б вам следует ввести http://192.168.1.3:4444/grid/console.
Шаг 5.
- Теперь, когда хаб уже настроен, мы собираемся запустить узел. Перейдите на устройство B и запустите на нем командную строку.
- Перейдите в корень диска C и введите приведенный ниже код. Мы использовали IP-адрес 192.168.1.3, поскольку именно на нем работает хаб. Мы также использовали порт 5566, хотя вы можете выбрать любой свободный номер порта.
- ПРИМЕЧАНИЕ: Теперь вам необходимо указать путь к драйверу Gecko, если вы используете Firefox. Вот обновленный код, который необходимо использовать:
java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar -role webdriver -hub http://192.168.1.3:4444/grid/register -port 5566
- После нажатия клавиши Enter командная строка должна выглядеть так, как показано на рисунке ниже.
Шаг 6
Перейдите в веб-интерфейс Selenium Grid и обновите страницу. Вы должны увидеть что-то вроде этого:
На данном этапе вы уже настроили простую сетку. Теперь вы готовы к удаленному запуску теста на компьютере B.
Когда использовать Selenium Grid?
Вы должны использовать Selenium Grid, если хотите выполнить одно или оба следующих действия:
- Запускайте тесты одновременно в различных браузерах, операционных системах и на разных устройствах. Это гарантирует, что приложение, которое вы тестируете, будет полностью совместимо с широким спектром комбинаций браузеров и ОС.
- Экономия времени при выполнении тестовых наборов. Если настроить Selenium Grid на одновременный запуск, скажем, 4 тестов, то весь набор можно будет выполнить примерно в 4 раза быстрее.
Grid 1.0 и Grid 2.0
Ниже перечислены основные различия между Selenium Grid 1 и 2.
Grid 1 | Grid 2 |
---|---|
Selenium Grid 1 имеет свой собственный пульт дистанционного управления, который отличается от сервера Selenium RC. Это две разные программы. | Selenium Grid 2 теперь поставляется в комплекте с jar-файлом Selenium Server. |
Перед использованием Grid 1 необходимо установить и настроить Apache Ant. | В Grid 2 установка Apache Ant не требуется. |
Поддерживаются только команды/скрипты Selenium RC. | Может поддерживать сценарии как Selenium RC, так и WebDriver. |
Для каждого пульта можно автоматизировать только один браузер. | Один пульт дистанционного управления может автоматизировать до 5 браузеров. |
Selenium Grid можно настроить двумя различными способами: через командную строку и через файл конфигурации JSON.
Разработка тестовых сценариев, которые могут выполняться на Grid
Для разработки тестовых сценариев, которые будут выполняться на Grid, нам необходимо использовать DesiredCapabilites и RemoteWebDriver объекты.
- DesiredCapabilites используется для задания ОС и типа браузера, который мы будем автоматизировать.
- RemoteWebDriver используется для задания узла (или устройства), на котором будет выполняться наш тест.
Для использования объекта DesiredCapabilites необходимо сначала импортировать этот пакет:
Чтобы использовать RemoteWebDriver объект, необходимо импортировать эти пакеты:
Использование объекта DesiredCapabilites
Перейдите в веб-интерфейс Grid и наведите курсор на изображение браузера, который необходимо автоматизировать. Обратите внимание на платформу и имя браузера, показанное во всплывающей подсказке.
В данном случае платформой является “XP”, а имя браузера – “Firefox”.
Мы будем использовать платформу и имя браузера в нашем WebDriver, как показано ниже (разумеется, сначала необходимо импортировать необходимые пакеты).
Использование объекта RemoteWebDriver
Импортируйте необходимые пакеты для RemoteWebDriver, а затем передайте объект DesiredCapabilities, который мы создали выше, в качестве параметра для объекта RemoteWebDriver.
Запуск теста на Grid
Ниже приведен простой WebDriver Testng код, который можно создать в Eclipse на компьютере A. После его запуска автоматизация будет выполнена на компьютере B.
import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; import org.testng.annotations.*; public class Grid_2 { WebDriver driver; String baseUrl, nodeURL; @BeforeTest public void setUpWthrows MalformedURLException { baseUrl = "http://newtours.demoaut.com/"; nodeURL = "http://192.168.1.4:5566/wd/hub"; DesiredCapabilities capability = DesiredCapabilities.firefox(); capability. setBrowserName("firefox"); capability. setPlatform(Platform.XP); driver = new RemoteWebDriver(new URL(nodeURL), capability); } @AfterTest public void afterTest() { driver.quit(); } @Test public void simpleTest() { driver.get(baseUr1); Assert.assertEquas("Welcome: Mercury Tours", driver.getTitle()); } }
Тест должен пройти.
Конфигурация Selenium Grid с помощью JSON-файла:
JSON расшифровывается как Javascript Object Notation. Это стандартный формат, используемый для обмена данными между браузером и веб-сервером. Selenium имеет встроенный JSON-конфигурационный файл, который можно использовать для настройки Selenium Grid.
Ниже описаны шаги по настройке с использованием JSON-файла конфигурации:
Шаг 1) Загрузите код для файла конфигурации JSON, используя указанный ниже путь:
Здесь приведен код:
{ "port": 4444, "newSessionWaitTimeout": -1, "servlets" : [], "withoutServlets": [], "custom": {}, "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher", "registryClass": "org.openqa.grid.internal.DefaultGridRegistry", "throwOnCapabilityNotPresent": true, "cleanUpCycle": 5000, "role": "hub", "debug": false, "browserTimeout": 0, "timeout": 1800 }
Шаг 2) Скопируйте и вставьте код в текстовый редактор, например «Блокнот», с расширением «.json».
Шаг 3) Запустите хаб с помощью следующей команды в командной строке: јаѵа -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hubconfig.json.
ПРИМЕЧАНИЕ: Самостоятельный jar-файл Selenium и json-файл должны находиться в одной директории.
Шаг 4) На экране появится следующее окно, свидетельствующее об успешной настройке хаба:
Шаг 5) Откройте веб-браузер и попробуйте подключиться к указанному ниже URL-адресу:
http://192.168.43.223:4444/grid/console
ПРИМЕЧАНИЕ: URL-адрес может отличаться на разных устройствах. Необходимо использовать URL-адрес, за которым следует ‘Nodes should register to’ на экране выше.
Шаг 6) Появится экран Grid Console, свидетельствующий о том, что хаб запущен и работает.
Конфигурирование NODES с использованием JSON:
Шаг 1) Загрузите примерный файл конфигурации узла, предоставленный Selenium, используя приведенный ниже URL-адрес:
ПРИМЕЧАНИЕ: ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ SELENIUM 3.0 ИЛИ ВЫШЕ, ТО ДОЛЖЕН БЫТЬ ИСПОЛЬЗОВАН ПРИВЕДЕННЫЙ НИЖЕ JSON-ФАЙЛ:
Шаг 2) Скопируйте и вставьте код в текстовый редактор, например «Блокнот», и сохраните файл с расширением «.json».
Шаг 3) Запустите приведенную ниже команду в командной строке:
Java-Dwebdriver.chrome.driver="chromedriver.exe" - Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.gecko.driver="geckodriver.exe" - jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node1.json
ПРИМЕЧАНИЕ: Перед выполнением команды необходимо убедиться, что драйверы для каждого из браузеров загружены в каталог локального компьютера.
Шаг 4) При нажатии клавиши ввода появится следующий экран:
Шаг 5) Перейдите в консоль Grid, чтобы проверить, успешно ли сконфигурированы узлы.
Браузеры отображаются на консоли Grid. Таким образом, мы можем быть уверены, что узлы сконфигурированы успешно.
Примеры тестовых ситуаций на Selenium Grid:.
package com.objectrepository.demo; import org.openqa.selenium.*; import org.openqa.selenium.remote.DesiredCapabilities; import java.net.MalformedURLException; import java.net.URL; import org.openqa.selenium.remote.RemoteWebDriver; import org.testng.Assert; import org.testng.annotations.*; public class SeleniumGrid { WebDriver driver; String baseURL, nodeURL; @BeforeTest public void setUp() throws MalformedURLException { baseURL = "http://demo.guru99.com/test/guru99home/"; nodeURL = "http://192.168.43.223:5566/wd/hub"; DesiredCapabilities capability = DesiredCapabilities.chrome(); capability.setBrowserName("chrome"); capability.setPlatform(Platform.WIN10); driver = new RemoteWebDriver(new URL(nodeURL), capability); } @AfterTest public void afterTest() { driver.quit(); } @Test public void sampleTest() { driver.get(baseURL); if (driver.getPageSource().contains("MOBILE TESTING")) { Assert.assertTrue(true, "Mobile Testing Link Found"); } else { Assert.assertTrue(false, "Failed: Link not found"); } } }
Приведенный выше код запускает браузер Chrome и переходит по URL-адресу, указанному в переменной baseURL. В результате проверки на странице отображается ссылка с именем ‘Mobile Testing’.
URL-адрес переменной nodeURL можно изменить, чтобы он отражал IP-адрес удаленного компьютера. Результат теста можно проверить в отчете TestNG, созданном по умолчанию.
Вывод:
- Selenium Grid используется для одновременного выполнения нескольких тестов на разных браузерах и платформах.
- В Grid используется концепция “узел-хаб”.
- Хаб – это центральная точка, в которую загружаются тесты.
- Узлы – это экземпляры Selenium, которые будут выполнять тесты, загруженные на хаб.
- Для установки Selenium Grid достаточно загрузить jar-файл Selenium Server – тот самый файл, который используется при запуске тестов Selenium RC.
- Проверить, запущен ли хаб, можно двумя способами: первый – через командную строку, второй – через браузер.
- Для запуска тестовых сценариев на Grid следует использовать объекты DesiredCapabilities и RemoteWebDriver.
- DesiredCapabilites используется для задания типа браузера и ОС, которые мы будем автоматизировать.
- RemoteWebDriver используется для задания узла (или компьютера), на котором будет выполняться наш тест.
Перевод статьи «Selenium Grid Tutorial: Setup a Hub and Node (Example)».
Пингбэк: Docker для тестировщиков