Selenium Grid WebDriver возвращает 504 тайм-аут шлюза в ожидании масштабирования сетки

В настоящее время на AWS Fargate работает Selenium Grid, который автоматически масштабируется в зависимости от желаемых сеансов в хабе. У меня есть сервис, который запускает задачу-концентратор и сервис для задач узла. В настоящее время я использую подход "один сеанс на узел" из-за необходимых ресурсов и того факта, что общая скорость выполнения не является основной целью этого набора тестов. Я также всегда поддерживаю работу хотя бы одного узла.

Фактическое автомасштабирование будет работать; концентратор видит, что ему нужно больше узлов, и масштабирует службу узлов до необходимого масштаба. Концентратор будет удерживать сеанс до тех пор, пока узел не станет доступен, и правильно разместит его там, когда он есть.

Тесты работают отлично, если я просто запускаю по одному, но проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь запустить группу параллельно и мне нужно увеличить сетку, я получаю 504 Gateway Time-out после 30 секунд вызова WebDriver. Я пытался изменить все возможные настройки, чтобы увеличить этот таймаут, но безрезультатно.

Мой конфиг концентратора выглядит так

browserTimeout : 0
debug : false
jettyMaxThreads : -1
host : XXXXXXXXX
port : 4444
role : hub
timeout : 180000
cleanUpCycle : 5000
maxSession : 5
hubConfig : /opt/selenium/config.json
capabilityMatcher : org.openqa.grid.internal.utils.DefaultCapabilityMatcher
newSessionWaitTimeout : -1
throwOnCapabilityNotPresent : true
registry : org.openqa.grid.internal.DefaultGridRegistry

Конфигурация узла выглядит так

browserTimeout: 0
debug: false
jettyMaxThreads: -1
host: XXXXXXXXX
port: 5555
role: node
timeout: 1800
cleanUpCycle: 5000
maxSession: 1
capabilities: Capabilities {applicationName: , browserName: chrome, maxInstances: 1, platform: LINUX, platformName: LINUX, seleniumProtocol: WebDriver, server:CONFIG_UUID: ..., version: 66.0.3359.170}
downPollingLimit: 2
hub: http://XXXXXXXXX:4444/grid/register
id: http://XXXXXXXXX:5555
nodePolling: 5000
nodeStatusCheckTimeout: 5000
proxy: org.openqa.grid.selenium.proxy.DefaultRemoteProxy
register: true
registerCycle: 5000
remoteHost: http://XXXXXXXXX:5555
unregisterIfStillDownAfter: 10000

Я называю свои тесты селена через Jruby по некоторым деловым причинам, и базовая конфигурация выглядит так

co = Java::OrgOpenqaSeleniumChrome::ChromeOptions.new
co.add_arguments(["--disable-extensions"].to_java(:string))
co.add_arguments(["no-sandbox"].to_java(:string))
co.add_arguments("--headless")
chrome_prefs = {}
chrome_prefs["profile.default_content_settings.popups"] = 0.to_s
chrome_prefs["safebrowsing.enabled"] = "true"
co.set_experimental_option("prefs", chrome_prefs)
cap = Java::OrgOpenqaSeleniumRemote::DesiredCapabilities.chrome
cap.set_capability("Capability", co)

$grid_url = ENV['GRID_URL']
$driver = Java::OrgOpenqaSeleniumRemote::RemoteWebDriver.new(Java::JavaNet::URL.new($grid_url), cap) 
# Get timeout after the RemoteWebDriver.new call

У кого-нибудь есть идеи, как изменить время ожидания здесь?

1 ответ

Решение

Это не имеет абсолютно никакого отношения к настройке Selenium, так что, если кто-то случайно столкнется с этим конкретно при использовании Fargate или ECS в целом, и вы используете Hub за балансировщиком нагрузки...

Если вам довелось использовать CloudFormation на примерах AWS Fargate, которые они имеют на своем Github, действительно убедитесь, что вы изменили то, что у них было idle_timeout.timeout_seconds для балансировщика нагрузки установлено значение.

Другие вопросы по тегам