Время ожидания HTTP-клиента Grid Hub при ожидании освобождения слота - PullRequest
3 голосов
/ 19 сентября 2011

Есть ли способ запросить мой сетевой концентратор (2.6.0), чтобы узнать, есть ли свободные слоты для конкретной желаемой возможности?

Пример:

Веб-страница Grid Hub по адресу

http://localhost:4444/grid/console

Правильно показывает, что 1 запрос должен ждать освобождения слота, чтобы тест мог продолжаться после завершения текущего:


Сетка Hub 2.6.0

Прослушивание WebDriverRemoteProxy на http://192.168.3.15:5523/wd/hub

истечение времени сеанса тестирования через 300 с.

Поддерживает до 1 одновременных тестов

1 запрос, ожидающий освобождения слота.

  • {платформа = ЛЮБАЯ, javascriptEnabled = истина, cssSelectorsEnabled = истина, browserName = firefox, nativeEvents = ложь, поворотный = ложь, принимаетScreenshot = истина, версия =}

просмотр конфигурации


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

Я использую привязки ruby, но могу воспроизвести ошибку с помощью простого curl, выполнив следующие действия:

Шаг 1. Настройка концентратора и узла сервера:

Настройка My Hub (на сервере Ubuntu)

java -jar selenium-server-standalone.jar -role hub

Настройка My Node (на компьютере с Windows XP):

java -jar selenium-server-standalone.jar -role webdriver -hub $HUBURL -port 5522 -maxSession 1 -browser "maxInstances=1,browserName=firefox"

Обратите внимание, что maxSession и maxInstances специально установлены в 1, чтобы легко воспроизвести проблему.

Шаг 2. Запустите длительный тест, чтобы занять первый и единственный доступный слот

(ради примера)

Шаг 3. Эмулируйте выполнение другого теста с помощью этого запроса curl:

curl -L --max-redirs 20 -v -i -H "Accept: application/json" -X POST http://localhost:4444/wd/hub/session -d '{"desiredCapabilities":{"javascriptEnabled":false,"version":"","rotatable":false,"takesScreenshot":true,"cssSelectorsEnabled":true,"browserName":"firefox","nativeEvents":false,"platform":"ANY"}}'

Результат:

Соединение оставлено на удержании, серверное сообщение не указывает, что происходит, сообщение json, сообщающее, что вы ожидаете освобождения слота, должно это сделать. В некоторых библиотеках http это просто время ожидания, как в настоящее время на ruby ​​ gem 'selenium-webdriver' <= 2.6.0 </strong>

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

Я проверил JsonWireProtocol, но не смог найти путь для запроса этой информации. JsonWireProtocol

1 Ответ

5 голосов
/ 20 сентября 2011

По-видимому, клиент ruby ​​не может ждать и отключится на низком уровне.

К счастью, вы можете заставить Grid2 генерировать исключение RuntimeException через определенное время:

Изменение максимального времени ожидания для нового сеанса

При запуске концентратора сетки вы можете передать этот параметр в мс: -newSessionWaitTimeout 25000

java -jar selenium-server-standalone.jar -role hub -newSessionWaitTimeout 25000

Используя предоставленные вами параметры curl, вы увидите, что через 25 секунд вы получите:

{
  "status":13,
  "value":{
     "message":"java.lang.RuntimeException: Request timed out waiting 
      for a node to become available."...
}

С чем вы можете работать и справляться на своей рубиновой стороне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...