Selenium Grid开放了数十个Chrome实例

时间:2018-03-07 15:28:03

标签: c# selenium-webdriver nunit selenium-chromedriver selenium-grid

我有一个有趣的问题,我已经搜索了Selenium错误日志和堆栈溢出,但没有遇到任何其他有类似问题的人。

我通过NUnit3控制台运行程序在6个VM Selenium节点上运行我的Selenium C#测试套件。我在我们的套件中有大约400个测试,并且已经将每个节点配置为在任何给定时间仅同时运行4个测试。有时它完全没有问题地执行,然后有时我会进入虚拟机,看到有数十个Chrome实例已经打开,扼杀资源并杀死我的执行。这些实例冻结并且不会被Grid处理掉,因此我必须手动终止进程。

当我运行命令杀死chrome.exe时,我有时会看到50多个Chrome实例被杀死。我的第一个想法是Chrome在每次测试结束时没有得到妥善处理,我和driver.Dispose()以及driver.Close(); driver.Quit();一起玩。这并没有纠正这个问题。

然后我尝试了以下但无济于事:

  • 更新chromedriver,chrome,selenium服务器,selenium webdriver和nunit的版本 - >我尝试过各自的兼容版本的变体,但问题仍然存在于不同的版本中。
  • 减少每个VM的并发会话数(更改NUnit控制台交换机--workers=12(这样每个VM只能在任何给定时间执行2个浏览器实例 - 通常我们使用--workers=24运行4每个VM同时使用浏览器。但是,我们的VM应该能够同时处理4个浏览器实例。
  • 创建JSON节点和集线器配置,在集线器级别设置"timeout": 120,在节点级别设置"maxInstances": 4"maxSessions": 4

以下是我们执行中使用的当前版本:

  • Selenium Webdriver v3.9.1
  • Selenium Standalone Server v3.6.0
  • Chromedriver v2.33.0
  • Chrome v62.0.3202.75
  • NUnit v3.9.0
  • NUnit ConsoleRunner v3.8.0

以下是有关我们的测试运行方式的其他详细信息:

  • 我们有一个在每个测试类中扩展的SetupTeardown类。 [TestFixture]属性位于SetupTeardown类级别。
  • [TearDown]方法会在try/catch/finally块中处理驱动程序,以确保始终调用.Dispose()方法。
  • 所有测试都使用[Parallelizable]属性进行装饰。
  • 启动节点/集线器的Selenium Server Standalone,chromedriver和批处理文件位于共享驱动器上,每个节点都调用共享文件。

我几周来一直在试图找到一个根本原因并且没有任何运气。是否需要在网格集线器上设置其他配置以处理冻结的实例并在它们无响应时将其丢弃?我通过在NUnit3 Console Runner命令中设置--workers属性来混淆网格?非常感谢任何见解。

0 个答案:

没有答案