Учебное пособие по Selenium Grid

Содержание:

Что такое Selenium Grid?

Selenium Grid – часть пакета Selenium, которая специализируется на параллельном запуске нескольких тестов в разных браузерах, операционных системах и компьютерах. Это достигается путем маршрутизации команд удаленных экземпляров браузера, где сервер выступает в качестве концентратора. Пользователю необходимо настроить удаленный сервер для выполнения тестов.

У Selenium Grid есть две версии — старая Grid 1 и новая Grid 2. Мы сосредоточимся только на Grid 2, поскольку Grid 1 постепенно выводится из употребления командой Selenium.

Подпишитесь на наш ТЕЛЕГРАМ КАНАЛ ПО АВТОМАТИЗАЦИИ ТЕСТИРОВАНИЯ

Архитектура Selenium Grid

Selenium Grid имеет архитектуру, состоящую из Hub (хаба) и Node (узла).

Архитектура Selenium Grid

Архитектура 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 по ссылке.

Загрузка 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
IP - адрес компьютера, на котором запущен хаб
  • После нажатия клавиши Enter командная строка должна выглядеть так, как показано на рисунке ниже.
пример командной строки

Шаг 6

Перейдите в веб-интерфейс Selenium Grid и обновите страницу. Вы должны увидеть что-то вроде этого:

веб-интерфейс Selenium Grid

На данном этапе вы уже настроили простую сетку. Теперь вы готовы к удаленному запуску теста на компьютере B.

Когда использовать Selenium Grid?

Вы должны использовать Selenium Grid, если хотите выполнить одно или оба следующих действия:

  • Запускайте тесты одновременно в различных браузерах, операционных системах и на разных устройствах.  Это гарантирует, что приложение, которое вы тестируете, будет полностью совместимо с широким спектром комбинаций браузеров и ОС.
  • Экономия времени при выполнении тестовых наборов. Если настроить Selenium Grid на одновременный запуск, скажем, 4 тестов, то весь набор можно будет выполнить примерно в 4 раза быстрее.

Grid 1.0 и Grid 2.0

Ниже перечислены основные различия между Selenium Grid 1 и 2.

Grid 1Grid 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 и наведите курсор на изображение браузера, который необходимо автоматизировать. Обратите внимание на платформу и имя браузера, показанное во всплывающей подсказке.

веб-интерфейс Selenium Grid

В данном случае платформой является “XP”, а имя браузера – “Firefox”.

Мы будем использовать платформу и имя браузера в нашем WebDriver, как показано ниже (разумеется, сначала необходимо импортировать необходимые пакеты).

Использование объекта RemoteWebDriver

Импортируйте необходимые пакеты для RemoteWebDriver, а затем передайте объект DesiredCapabilities, который мы создали выше, в качестве параметра для объекта RemoteWebDriver.

пример использования объекта 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()); } 
} 

Тест должен пройти.

результаты запуска тест-кейса в Grid

Конфигурация Selenium Grid с помощью JSON-файла:

JSON расшифровывается как Javascript Object Notation. Это стандартный формат, используемый для обмена данными между браузером и веб-сервером. Selenium имеет встроенный JSON-конфигурационный файл, который можно использовать для настройки Selenium Grid.

Ниже описаны шаги по настройке с использованием JSON-файла конфигурации:

Шаг 1) Загрузите код для файла конфигурации JSON, используя указанный ниже путь:

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultHub.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, свидетельствующий о том, что хаб запущен и работает.

экран Grid Console

Конфигурирование NODES с использованием JSON:

Шаг 1) Загрузите примерный файл конфигурации узла, предоставленный Selenium, используя приведенный ниже URL-адрес:

https://github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json

ПРИМЕЧАНИЕ: ЕСЛИ ВЫ ИСПОЛЬЗУЕТЕ SELENIUM 3.0 ИЛИ ВЫШЕ, ТО ДОЛЖЕН БЫТЬ ИСПОЛЬЗОВАН ПРИВЕДЕННЫЙ НИЖЕ JSON-ФАЙЛ:

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultNodeWebDriver.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

Браузеры отображаются на консоли 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)».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *