Selenium Grid

Programming Language Preference

 

Этот раздел еще не закончен. Если вы являетесь членом сообщества, имеете опыт работы с Selenium Grid и хотели бы внести свой вклад, пожалуйста, свяжитесь с командой документации. Мы будем рады вашей помощи.

Введение

Кластер Grid обеспечивает:

  • Масштабируемость, за счет распределения тестов по нескольким машинам (за счет параллельного выполнения).
  • Управление различными средами из одного места, упрощая проведение тестов на многочисленных комбинациях ОС и браузеров.
  • Сокращение времени, необходимого для обслуживания кластера, благодаря возможности создания пользовательских хуков для использования виртуальной инфраструктуры узла кластера.

Краткое руководство

На этом примере мы покажем, как запустить хаб Selenium 2, зарегистрировать узел WebDriver или узел старой версии Selenium 1 RC. Мы также покажем, как вызывать кластер из Java. В приведенном примере и хаб, и все узлы запускаются на одной машине, но вы, конечно же, можете скопировать selenium-server-standalone на множество машин. Примечание: Пакет selenium-server-standalone включает в себя хаб, Selnium WebDriver и старый Selenium RC, необходимые для запуска кластера. Ant больше не требуется. Вы можете загрузить selenium-server-standalone-*.jar с http://code.google.com/p/selenium/downloads/list. В этом руководстве предполагается, что Java уже установлена.

Шаг 1: Запуск хаба

Хаб - это центральный узел, который получает все запросы тестов и распределяет их по надлежащим узлам.

Откройте командную строку и перейдите в ту директорию, куда вы скопировали файл selenium-server-standalone . Введите следующую команду:

Хаб автоматически запустится по умолчанию на 4444 порте. Для изменения порта по умолчанию можно добавить к команде необязательный параметр -port. Вы можете наблюдать состояние хаба, открыв браузер и перейдя по адресу http://localhost:4444/grid/console

Шаг 2: Запуск узлов

Независимо от того, хотите ли вы запустить кластер с функционалом нового WebDriver, или функционалом Selenium 1 RC, или обоих одновременно, вы можете использовать один и тот же selenium-server-standalone jar-файл для запуска узлов:

Примечание: в случае, когда присутствует параметр -role не в значении “hub” и порт явно не указан, по умолчанию будет использован 5555.

Для обратной совместимости роли “wd” и “rc” все еще являются допустимыми именами ролей узлов. Но эти роли ограничивают виды удаленных соединений до соответствующего API, в то время как “node” позволяет устанавливать соединения как RC, так и WebDriver.

Шаг 3: Использование кластера для запуска тестов

(Как пример используется Java) Теперь, когда запущен кластер, мы должны получить к нему доступ из наших тестов. Для узлов Selenium RC можно продолжать использовать объект DefaultSelenium и передавать в него настройки хаба:

Selenium selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://www.google.com");

Для узлов WebDriver нужно использовать объекты RemoteWebDriver и ``DesiredCapabilities``для определения желаемого браузера, версии и платформы. Укажите характеристики целевого браузера для проведения тестов:

DesiredCapabilities capability = DesiredCapabilities.firefox();

Передайте их в объект RemoteWebDriver:

WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);

И хаб назначит тест на соответствующий узел.

Узел будет выбран, если все запрошенные характеристики будут совпадать. Чтобы запросить конкретные характеристики у кластера, укажите их перед передачей в объекте WebDriver:

capability.setBrowserName();
capability.setPlatform();
capability.setVersion()
capability.setCapability(,);

Пример: узел, зарегистрированный с настройками

соответствует характеристикам:

capability.setBrowserName("firefox" );
capability.setPlatform("LINUX");
capability.setVersion("3.6");

или также соотвествует характеристикам:

capability.setBrowserName("firefox" );
capability.setVersion("3.6");

Не указанные характеристики будут проигнорированы. Если указать характеристики, не существующие в вашем кластере (например, ваш тест указывает Firefox версии 4.0, но нигде не запущен экземпляр Firefox 4.0), то соответствие не будет установлено и тест не запустится.

Настройка узлов

По умолчанию запускается 11 браузеров: 5 Firefox, 5 Chrome, 1 Internet Explorer. Максимальное количество параллельных тестов по умолчанию равно 5. Для изменения этих и прочих настроек браузеров можно передавать параметры в каждом ключе -browser (каждый ключ представляет узел с заданными вами параметрами). Если используется ключ -browser, браузеры по умолчанию игнорируются и будут использоваться только те браузеры, которые заданы этим ключом.

Такие параметры приведут к запуску 5 узлов с Firefox 3.6 на Linux-машине.

Если на вашей удаленной машине есть несколько версий Firefox, которые вы бы хотели использовать, вы можете указать расположение исполняемых файлов соответствующих версий на одной и той же машине:

Совет: если в значении какого-либо параметра присутствуют пробелы, необходимо заключить этот параметр в двойные кавычки:

Необязательные параметры

  • -port 4444 (4444 - значение по умолчанию)
  • -nodeTimeout 30 (30 - значение по умолчанию) Время в секундах перед тем, как хаб автоматически освободит узел, не получающий никаких запросов более определенного количества секунд. По истечении этого времени узел будет освобожден для следующего в очереди теста. Это позволяет обходить клиентские сбои без ручного вмешательства. Чтобы отключить эту возможность, укажите -nodeTimeout 0. Тогда хаб не будет освобождать узел.

Примечание: Это НЕ таймаут WebDriver для команд типа “wait for WebElement”.

  • -maxSession 5 (5 - значение по умолчанию) Максимальное количество браузеров, которые могут быть запущены параллельно на одном узле. Этот параметр отличается от параметра maxInstance, задающего макс. количество экземпляров одного поддерживаемого браузера (например maxSession=1 на узле, поддерживающим Firefox 3.6, Firefox 4.0 и Internet Explorer 8, обеспечит, что никогда не будет запущено больше одного браузера. С maxSession=2 может быть одновременно запущено 2 Firefox теста, или 1 Internet Explorer и 1 Firefox тест).
  • -browser < params > Если параметр -browser не задан, узел запустится с пятью экземплярами Firefox, пятью Chrome и одним Internet Explorer (предполагается, что это Windows-машина). Для задания различных типов браузеров можно несколько раз указать этот параметр в одной строке.

Параметры, поддерживаемые -browser: .. code-block:: bash browserName={android, chrome, firefox, htmlunit, internet explorer, iphone, opera}

version={версия браузера} firefox_binary={путь к исполняемому файлу} maxInstances={максимальное количество браузеров указанного типа} platform={WINDOWS, LINUX, MAC}
  • -registerCycle насколько часто в миллисекундах узел будет пытаться перерегистрировать себя. Позволяет перезапускать хаб без необходимости перезапуска узлов.

Сообщения для диагностики хаба

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

Client requested session XYZ that was terminated due to REASON| (Клиент запросил сессию XYZ, которая была завершена по причине REASON)
REASONПричинакак исправить
TIMEOUT Эта сессия истекла, поскольку клиент не обращался к ней в течение указанного времени. Если клиент был каким-либо образом приостановлен, это может случиться при его пробуждении.
ORPHAN Ожидающий в очереди клиент отказался, как только ему была выделена новая сессия.
CLIENT_STOPPED_SESSION Сессия была остановлена клиентом с использованием обычного запроса для остановки/выхода. Почему вы снова используете ее?
CLIENT_GONE Клиентский процесс (ваш код) либо умер, либо по иной причине не отвечает на запросы. Может быть связано с проблемами сети.
FORWARDING_TO_NODE_FAILED Хаб не смог связаться с узлом. Может быть вызвано нехваткой памяти, нестабильностью узла или проблемами сети.
CREATIONFAILED Узел не смог запустить браузер. Это обычно случается, когда есть проблемы с средой/конфигурацией самого узла. Попробуйте непосредственно зайти на узел для выяснения проблемы.
PROXY_REREGISTRATION Сессия была отменена, поскольку узел перерегистрировался в кластере (во время выполнения теста).

Дополнительная информация