Selenium Grid: Node API? - PullRequest
       5

Selenium Grid: Node API?

0 голосов
/ 26 ноября 2018

Проблема:

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

Похоже, я могу нажать этот API, чтобы отключитьузел из концентратора: http://NODE -IP: 5555 / selenium-server / driver /? cmd = shutDownSeleniumServer

В идеале мне нужно найти API для узла непосредственно для сбора данныхсессионной активности.

Альтернативы?Журналы сессий?

1 Ответ

0 голосов
/ 09 декабря 2018

Примечание: Этот ответ действителен только для серии Selenium 3.x (3.14.1, которая на сегодняшний день является последней из сборок в серии Selenium 3).Архитектура сетки Selenium 4 - это совершенно другая архитектура, и поэтому этот ответ не обязательно будет иметь отношение к сетке Selenium 4 (ее еще предстоит выпустить).

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

Узел селена, не имеет возможности отслеживать сеансы, которые в нем выполняются.

Вам необходимо построить все это в Selenium Hub (где находится вся эта информация).

На высоком уровне вам нужно будет сделать следующее

  1. Создайте собственный прокси, расширив org.openqa.grid.selenium.proxy.DefaultRemoteProxy, который будет иметь следующие возможности:
    1. Добавить API, который при использовании будет помечать прокси как в состоянии покоя (что означает, что узел имеетбыл помечен для обслуживания и больше не будет принимать новые запросы сеанса)
    2. Переопределить getNewSession(Map<String, Object> requestedCapability), так что сначала он проверяет, не приостановлен ли узел, и только затем облегчает новый сеанс.
  2. Создайте собственный сервлет, который при вызове может выполнять следующие действия:
    1. Для данного узла он может использовать API, построенный через 1.1, и пометить узел как в состоянии покоя
    2. вернул бы список узлов, в которых не было запущено ни одного сеанса.Если вы строите свой сервлет, расширяя org.openqa.grid.web.servlet.RegistryBasedServlet, то внутри своего сервлета вы сможете получить список свободных URL-адресов узлов, выполнив что-то вроде следующего:
List<RemoteProxy> freeProxies =
    StreamSupport.stream(getRegistry().getAllProxies().spliterator(), false)
        .filter(remoteProxy -> !remoteProxy.isBusy())
        .collect(Collectors.toList());
List<URL> urls =
    freeProxies.stream().map(RemoteProxy::getRemoteHost).collect(Collectors.toList());

Теперьчто у нас есть пользовательский концентратор, который теперь включен с функцией для выполнения этой очистки, теперь вы можете сначала вызвать конечную точку 2.1, чтобы отметить отключаемые узлы, а затем продолжить опрос конечной точки 2.2, чтобы получить все комбинации IP и портов дляузлы, которые больше не поддерживают ни одного сеанса тестирования, а затем вызывают на них http://NODE-IP:5555/selenium-server/driver/?cmd=shutDownSeleniumServer.

Это на высоком уровне может сделать то, что вы ищете.

Некоторые полезные ссылки, которые могут помочьвы ориентируетесь на это (все предоставленные ссылки - это блоги, которые я писал в разные моменты времени).

  1. Самовосстанавливающаяся сетка - https://rationaleemotions.wordpress.com/2013/01/28/building-a-self-maintaining-grid-environment/
  2. Создание собственного прокси -https://rationaleemotions.github.io/gridopadesham/CUSTOM_PROXY.html
  3. Создание собственного сервлета для концентратора - https://rationaleemotions.github.io/gridopadesham/CUSTOM_SERVLETS.html
...