如何使用NUnit3并行测试执行配置SeleniumGrid



我们当前的C#/Nunit 2.6.3测试框架有一个回归套件,在一台pc上运行需要35个多小时,其中一些测试持续时间长达20分钟。设置在多台机器上运行的测试批次既耗时又低效,因此我试图将测试迁移到NUnit3,以获得在SeleniumGrid上并行执行的好处。

我的目标是让12个节点每个节点运行一个IE实例。然而,VS的NUnit3测试适配器似乎试图同时运行所有测试。

由于我总是从比我拥有的节点更多的固定装置执行测试,所以重要的是,固定装置将位于队列中,直到节点可用。在实践中,测试夹具可能需要等待几个小时才能获得空闲节点。对于我目前的配置实验,我有以下设置:

  • 具有以下配置的集线器:java -jar selenium-server-standalone-2.48.2.jar -role hub -newSessionWaitTimeout:-1 -browserTimeout 120 -timeout 3600
  • 默认配置中的单个节点。

  • 两个测试夹具,每个夹具有10个测试。测试夹具具有以下属性:[Parallelizable(ParallelScope.Self)]

在这种情况下,我希望只有一个节点支持IE的单个实例,那么只有一个测试会被执行。集线器会在空闲时将队列中的下一个测试发送到节点。然而,这两个测试设备似乎是同时运行的。一个测试被推送到节点,但另一个夹具上的测试失败,并显示以下消息:

结果消息:
OpenQA.Selenium.WebDriverException:对URL的远程WebDriver服务器的HTTP请求http://localhost:4444/wd/hub/session60秒后超时。---->System.Net.WebException:操作已超时

当我在Java/JUnit框架中使用Eclipse上的网格时,我没有遇到任何问题。集线器将使用默认配置对测试进行排队,直到节点空闲而没有任何超时。

有人知道正确的配置吗?或者这是NUnit 3测试适配器的问题吗?不幸的是,浏览器选择被固定为IE。

我发现可以通过在AssemblyInfo中设置LevelOfParallelism属性来控制并行线程的数量。

//Determines the number parallel threads that run simultaneously
[assembly: LevelOfParallelism(7)]

如果将此属性设置为可用的节点数,则测试队列将如我所期望的那样。

最新更新