我有一个有趣的问题,我已经搜索了Selenium错误日志和堆栈溢出,但没有遇到任何其他有类似问题的人。
我通过NUnit3控制台运行程序在6个VM Selenium节点上运行我的Selenium C#测试套件。我在我们的套件中有大约400个测试,并且已经将每个节点配置为在任何给定时间仅同时运行4个测试。有时它完全没有问题地执行,然后有时我会进入虚拟机,看到有数十个Chrome实例已经打开,扼杀资源并杀死我的执行。这些实例冻结并且不会被Grid处理掉,因此我必须手动终止进程。
当我运行命令杀死chrome.exe时,我有时会看到50多个Chrome实例被杀死。我的第一个想法是Chrome在每次测试结束时没有得到妥善处理,我和driver.Dispose()
以及driver.Close(); driver.Quit();
一起玩。这并没有纠正这个问题。
然后我尝试了以下但无济于事:
--workers=12
(这样每个VM只能在任何给定时间执行2个浏览器实例 - 通常我们使用--workers=24
运行4每个VM同时使用浏览器。但是,我们的VM应该能够同时处理4个浏览器实例。"timeout": 120
,在节点级别设置"maxInstances": 4
和"maxSessions": 4
。以下是我们执行中使用的当前版本:
以下是有关我们的测试运行方式的其他详细信息:
[TestFixture]
属性位于SetupTeardown类级别。[TearDown]
方法会在try/catch/finally
块中处理驱动程序,以确保始终调用.Dispose()
方法。[Parallelizable]
属性进行装饰。我几周来一直在试图找到一个根本原因并且没有任何运气。是否需要在网格集线器上设置其他配置以处理冻结的实例并在它们无响应时将其丢弃?我通过在NUnit3 Console Runner命令中设置--workers
属性来混淆网格?非常感谢任何见解。