在Selenium Grid中使用无限maxInstance

时间:2017-07-26 19:52:39

标签: selenium testing selenium-webdriver webdriver selenium-grid

我使用默认参数启动Selenium Grid作为Hub:

  

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

然后我启动了一个带有默认参数的节点:

java -Dwebdriver.chrome.driver=C:\selenium\driver\chromedrive r.exe -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register

当我从网络浏览器检查localhost:4444时,我看到以下屏幕

enter image description here

正如预期的那样,允许使用5个chrome实例。

在我执行我的测试脚本5次后,我看到以下屏幕(警告):

enter image description here

所以,我的问题是:这些插槽何时免费?或者,有没有办法设置无限的maxInstance值?

1 个答案:

答案 0 :(得分:2)

在理想情况下,在测试运行完成后,它应释放它在网格中占用的TestSlot。 TestSlot基本上相当于您在Grid控制台上看到的一个浏览器图标。

根据您所分享的内容,这里是我推断的内容。

  • 您的节点支持所有浏览器版本的5 concurrent sessions。这意味着你可以说你运行了6次测试(4次Chrome测试和2次Firefox测试),只有5次测试会运行,其中一次测试会排在队列中[当网格显示时,你会在屏幕上看到{{{ 1}}]

如果您的测试在测试结束时正确调用1 requests waiting for a slot to be free,那么一旦您的5个测试中的任何一个完成,第六个站在队列中将被选中执行。你不需要做任何额外的事情。

但是如果您的测试没有调用RemoteWebDriver.quit()方法或者您的测试本身崩溃(例如,您杀死了运行测试的JVM,或者您是从IDE运行测试,按下IDE的停止按钮,然后这些测试将成为孤立测试。

如果您尚未调整任何值,默认情况下网格将执行以下操作:

  • 集线器将每隔5秒钟运行它所知道的所有活动会话,以检查其中是否有任何挂起等。此值由标记 quit()
  • 控制
  • -cleanUpCycle会查找 node 保持inactive的测试会话并将其清除。

所以回答你的第一个问题,

  

这些插槽何时免费?

只有在 1800 seconds 之后,它们才会免费。 这可以通过在Hub端使用以下属性来控制。

  • 30 minutes 以秒为单位:WebDriver命令运行时允许浏览器会话挂起的秒数(例如:driver.get(url))。如果在WebDriver命令仍在处理时达到超时,则会话将退出。最小值为60.未指定,零或负值意味着无限期等待。默认值:0
  • -browserTimeout (以毫秒为单位):指定集线器轮询超时(即挂起)线程的运行代理的频率。还必须指定超时选项。默认值:5000(5秒)
  • -cleanUpCycle -timeout 以秒为单位:指定服务器自动杀死没有任何活动的会话之前的超时在最后X秒。然后将释放测试槽以供另一个测试使用。这通常用于处理客户端崩溃。对于网格集线器/节点角色,还必须设置cleanUpCycle。默认值:1800

您可以参考我的this SO回复了解更多详情。

你遇到的第二个问题

  

有没有办法设置无限的maxInstance值?

是的,有一种方法可以做到这一点,但这实际上会杀死您的Grid基础架构。例如,假设您将值设置为-sessionTimeout,这将导致集线器关闭节点上的1000个并发浏览器实例。在我看来,这是灾难的秘诀。

您应该尝试利用我上面分享的清理参数来确保没有挂起过时的测试。

为了增加最大会话数,您需要执行以下操作:

  1. 使用参数 1000 并指定一个值(默认值为5 )。您在此处提供的值将是在节点中的任何给定点同时打开的最大浏览器数(跨浏览器风格)。
  2. 为了在每种浏览器风格上进一步控制事物,您可以在节点配置文件中为每个浏览器指定 -maxSession
  3. 例如,如果你有一个节点配置文件如下:

    maxInstances

    这将导致您的节点最多支持打开15个并发浏览器实例,但在这15个实例中,最多只能打开4个firefox实例,并且可以打开11个chrome实例。您可以使用 { "capabilities": [ { "browserName": "firefox", "maxInstances": 4, "seleniumProtocol": "WebDriver" }, { "browserName": "chrome", "maxInstances": 11, "seleniumProtocol": "WebDriver" } ], "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy", "maxSession": 15, "port": 5555, "register": true, "registerCycle": 5000, "hub": "http://localhost:4444", "nodeStatusCheckTimeout": 5000, "nodePolling": 5000, "role": "node", "unregisterIfStillDownAfter": 60000, "downPollingLimit": 2 } 指定上述JSON配置文件的路径。

    您可以参考我的 this SO回复,了解独立,集线器和节点模式中可用的所有参数。

    Here's 来自selenium代码库本身的模板文件。

    希望能回答你的问题。