Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Selenium Grid. Параллелизация. Увеличение количества Nodes

selenium-grid
parallel
java
webdriver
Теги: #<Tag:0x00007f7b60758ea0> #<Tag:0x00007f7b60758d60> #<Tag:0x00007f7b60758c20> #<Tag:0x00007f7b60758ae0>

(James May) #1

Добрый день!

С проблемой еще не столкнулся, но видимо, собираюсь.

Есть тесты, которые бегают на Win7, Win8, Win XP (Все виртуалки)
Тесты проходят на FF, IE, Chrome.

Сейчас это выглядит так, запускается регрессия под хром, когда она заканчивается, стартует FF и т.д.

Т.к. количество тестов постепенно растет, растет и время их выполнения.
Соответственно, хочется создать еще 6 виртуалок, чтобы в итоге получилось 3 на каждый браузер. И запускать все это в параллели.

Вопрос в том, как сконфигурировать грид, а точнее по какому параметру выбирать машину для теста?
Сейчас платформа для теста определяется по параметру Platform, но в случае появления одинаковых систем возникнет путаница.

Спасибо!

Update:
И возможно ли это сделать, используя IP Node’а?


(Sergey Korol) #2

Есть такая проблема… В случае одинаковых конфигураций (браузер / семейство ОС) будет выбран первый свободный нод, что не дает никакой гарантии, что тест уйдет именно туда, куда вам нужно.

Мы в свое время решали эту проблему при помощи кастомного CapabilityMatcher. Каждой ноде присваивался свой собственный уникальный идентификатор, передающийся в последствии в качестве доп. параметра в DesiredCapabilities.

Чтобы “попросить” грид анализировать ваш кастомный параметр, необходимо расширить класс DefaultCapabilityMatcher, переопределив метод matches. Сам метод принимает на вход 2 мапы: с установленными капабилити нода, и теми, что вы отправляете в запросе хабу при создании инстанса RemoteWebDriver. Основной задачей тут является - включить ваш кастомный параметр в процесс верификации. На основании результатов, хаб будет принимать решение, какому ноду отдать управление.

После создания кастомного матчера, вам нужно засетить его в classpath грида + указать соответствующий класс в конфигурации хаба при помощи -capabilityMatcher аргумента. Либо можете просто пересобрать jar standalone сервера с вашим классом, чтобы явно не сетить в его в classpath.