Ноды в Selenoid не запускаются паралельно и не запускаются в сьюте

selenoid
java
testng
Теги: #<Tag:0x00007fedbbd72ae8> #<Tag:0x00007fedbbd72890> #<Tag:0x00007fedbbd726d8>

(Alex Melnyk) #1

Запускаю тесты с на Selenoid ( Selenide+testng). Они отлично отрабатывают, что с Jenkins, что с удалённой машины из IDE. Но если я захочу запустить несколько тестов паралельно из Jenkins - падают с ошибкой.
Лог

Tests run: 34, Failures: 1, Errors: 0, Skipped: 33, Time elapsed: 97.422 sec <<< FAILURE! - in TestSuite
clickOnHamburgerMenu(caridAutoTest.HamburgerMenu)  Time elapsed: 95.897 sec  <<< FAILURE!
java.lang.IllegalArgumentException: 
org.openqa.selenium.WebDriverException: New session attempts retry count exceeded (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 47.42 seconds
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'pc301', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.16.0-30-generic', java.version: '1.8.0_141'
Driver info: driver.version: RemoteWebDriver
	at caridAutoTest.HamburgerMenu.clickOnHamburgerMenu(HamburgerMenu.java:35)
Caused by: org.openqa.selenium.WebDriverException: 
New session attempts retry count exceeded (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 47.42 seconds
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'pc301', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '3.16.0-30-generic', java.version: '1.8.0_141'
Driver info: driver.version: RemoteWebDriver
	at caridAutoTest.HamburgerMenu.clickOnHamburgerMenu(HamburgerMenu.java:35)

Если запустить сьют из нескольких тестов с IDE первый проходит, остальные валятся со след логом

org.openqa.selenium.WebDriverException: Session timed out or not found (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
Build info: version: '3.6.0', revision: '6fbf3ec767', time: '2017-09-27T15:28:36.4Z'
System info: host: 'PC287', ip: '10.10.6.22', os.name: 'Windows 8.1', os.arch: 'amd64', os.version: '6.3', java.version: '1.8.0_101'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
selenide.url: https://www.carid.com/inflatable-boats-parts.html
Capabilities [{mobileEmulationEnabled=false, hasTouchScreen=false, platform=LINUX, acceptSslCerts=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, platformName=LINUX, setWindowRect=true, unexpectedAlertBehaviour=, applicationCacheEnabled=false, rotatable=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.32.498513 (2c63aa53b2c658de596ed550eb5267ec5967b351), userDataDir=/tmp/.org.chromium.Chromium.pjbuH4}, takesHeapSnapshot=true, pageLoadStrategy=normal, unhandledPromptBehavior=, databaseEnabled=false, handlesAlerts=true, version=61.0.3163.79, browserConnectionEnabled=false, nativeEvents=true, locationContextEnabled=true, cssSelectorsEnabled=true}]
selenide.baseUrl: http://localhost:8080
Session ID: 398cea2d0972c7e7d1b78c74d66fe388

	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
	at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
	at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:82)
	at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:45)
	at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:586)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:643)
	at org.openqa.selenium.remote.RemoteWebDriver.getTitle(RemoteWebDriver.java:314)
	at com.codeborne.selenide.impl.WebDriverThreadLocalContainer.isBrowserStillOpen(WebDriverThreadLocalContainer.java:68)
	at com.codeborne.selenide.impl.WebDriverThreadLocalContainer.getAndCheckWebDriver(WebDriverThreadLocalContainer.java:105)
	at com.codeborne.selenide.WebDriverRunner.getAndCheckWebDriver(WebDriverRunner.java:142)
	at com.codeborne.selenide.impl.Navigator.navigateToAbsoluteUrl(Navigator.java:69)
	at com.codeborne.selenide.impl.Navigator.open(Navigator.java:32)
	at com.codeborne.selenide.Selenide.open(Selenide.java:79)
	at com.codeborne.selenide.Selenide.open(Selenide.java:53)
	at caridAutoTest.CategoryUniversal.test7(CategoryUniversal.java:207)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:85)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:821)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1131)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
	at org.testng.TestRunner.privateRun(TestRunner.java:773)
	at org.testng.TestRunner.run(TestRunner.java:623)
	at org.testng.SuiteRunner.runTest(SuiteRunner.java:357)
	at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:352)
	at org.testng.SuiteRunner.privateRun(SuiteRunner.java:310)
	at org.testng.SuiteRunner.run(SuiteRunner.java:259)
	at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
	at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
	at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185)
	at org.testng.TestNG.runSuitesLocally(TestNG.java:1110)
	at org.testng.TestNG.run(TestNG.java:1018)
	at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:72)
	at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

хотя если запустить тесты один с Jenkins другой с IDE они одновременно норм отработают на Selenoid. Кто-то может подсказать как правильно настроить, что бы тесты запускались паралельно с Jenkins и работали в сютах корректно.


(Yaroslav Pernerovskyy) #2

А если запускать не в Selenoid?
У вас драйвер как обьявляется в тестах, возможно у вас именно там проблема.


(Alex Melnyk) #3

Если не в Selenoid всё работает отлично.


(Eugene Moskalenko) #4

Решили как-то проблему? Тоже столкнулся с такой проблемой, при запуске тестов используя Selenoid, одновременно контейнеров работает где-то 20-ть. Таймауты выставлял:

Rancher: docker-compose.yml

version: '2'
services:
  selenoid:
    image: registry.companyname.com/evgeniy.moskalenko/selenoid-companyname:master
    network_mode: bridge
    ports:
      - "4444:4444/tcp"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: "-limit 20 -service-startup-timeout 120s -session-attempt-timeout 120s -session-delete-timeout 120s -timeout 120s"
  selenoid-ui:
    image: aerokube/selenoid-ui:latest-release
    network_mode: bridge
    links:
      - selenoid
    ports:
      - "8080:8080"
    command: ["--selenoid-uri", "http://selenoid:4444"]
  chrome:
    image: selenoid/chrome
    links:
    - selenoid:hub
    labels:
      io.rancher.container.dns: 'true'
      io.rancher.sidekickk: chrome
  firefox:
    image: selenoid/firefox
    links:
    - selenoid:hub
    labels:
      io.rancher.container.dns: 'true'
      io.rancher.sidekickk: firefox

Rancher: rancher-compose.yml

version: '2'
services:
  selenoid:
    scale: 1
    start_on_create: true
  selenoid-ui:
    scale: 1
    start_on_create: true
  chrome:
    scale: 20
    start_on_create: true
  firefox:
    scale: 1
    start_on_create: false

конфиг файл "browsers.json"

{
    "firefox": {
      "default": "latest",
      "versions": {
        "latest": {
          "image": "selenoid/firefox:latest",
          "port": "4444",
          "tmpfs": {"/tmp": "size=512m"},
          "path": "/wd/hub",
          "shmSize" : 268435456
        }
      }
    },
    "chrome": {
      "default": "latest",
      "versions": {
        "latest": {
          "image": "selenoid/chrome:latest",
          "port": "4444",
          "tmpfs": {"/tmp": "size=512m"},
          "path": "/wd/hub",
          "shmSize" : 268435456
        }
      }
    }
}

из Jenkins тесты запускаю так:

mvn clean test -Dparallel=methods -DthreadCount=20 -Dselenide.baseUrl=https://dev-url.test.env -Dselenide.browser=chrome -Dtest=250+тестов -Dremote=http://selenoid_hub:4444/wd/hub/ -Dselenide.browser-size=1920x1080

многие тесты падают с ошибкой, где-то половина:

org.openqa.selenium.WebDriverException: Session timed out or not found (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 4 milliseconds
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:49:13 -0700'
System info: host: 'jenkins.test.env', ip: '', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-66-generic', java.version: '1.8.0_144'
Driver info: org.openqa.selenium.remote.RemoteWebDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, networkConnectionEnabled=false, chrome={chromedriverVersion=2.32.498513 (2c63aa53b2c658de596ed550eb5267ec5967b351), userDataDir=/tmp/.org.chromium.Chromium.Vj5mBA}, takesHeapSnapshot=true, pageLoadStrategy=normal, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=61.0.3163.79, platform=LINUX, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true, setWindowRect=true, unexpectedAlertBehaviour=}]
Session ID: 5d40b653bd652b566bbf8e31fcb3c048
	at sun.reflect.GeneratedConstructorAccessor44.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:216)
	at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:168)
	at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:635)
	at org.openqa.selenium.remote.RemoteExecuteMethod.execute(RemoteExecuteMethod.java:35)
	at org.openqa.selenium.remote.RemoteLogs.getRemoteEntries(RemoteLogs.java:81)
	at org.openqa.selenium.remote.RemoteLogs.get(RemoteLogs.java:77)
	at com.codeborne.selenide.Selenide.getLogEntries(Selenide.java:733)
	at com.codeborne.selenide.Selenide.getWebDriverLogs(Selenide.java:728)
	at autotest.listeners.AllureReportListener.getListBrowserConsoleLog(AllureReportListener.java:58)
	at autotest.listeners.AllureReportListener.run(AllureReportListener.java:70)
	at org.testng.internal.MethodInvocationHelper.invokeHookable(MethodInvocationHelper.java:209)
	at org.testng.internal.Invoker.invokeMethod(Invoker.java:639)
	at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:820)
	at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1128)
	at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:129)
	at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:112)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

Может подскажет кто, как решить проблему?

Java, Selenide, Selenoid, Jenkins


(Pavel Melnikov) #5

Тут давно нет ответов, может решили как-нибудь проблему? Тоже актуально


(vania-pooh) #6

Такое происходит по нескольким причинам:

  1. Действительно таймаут в тестах. Больше минуты (по-умолчанию) не было запросов к Selenoid. Значение регулируется флагом -timeout.
  2. Машинка тормозит и поэтому все медленно и получаются таймауты. Тут нужно смотреть на системные метрики. Количество параллельно работающих контейнеров не должно в разы отличаться от количества ядер (в 2 раза больше тестов, чем ядер - скорее всего будет тормозить). Может еще тормозить из-за того, что Docker storage driver выставлен в device mapper.
  3. Тормозит сеть в Docker. Можно попробовать настроить как написано в http://aerokube.com/selenoid/latest/#_recommended_docker_settings

(Pavel Melnikov) #7

Поигрался с аргументами -mem и -cpu, в итоге падения по таймаутам закончились. Спасибо.


(Yury Dyagilev) #8

Какие параметры CPU, Mem установили?