如何使用NUnit3并行测试执行配置Selenium Grid?

时间:2016-05-04 09:03:48

标签: c# internet-explorer selenium webdriver nunit-3.0

我们当前的C#/ Nunit 2.6.3测试框架有一个回归套件,在一台PC上运行需要35个小时,一些测试持续长达20分钟。设置批量测试以在多台机器上运行是耗时且低效的,因此我尝试将测试迁移到NUnit 3以获得在Selenium Grid上并行执行的好处。

我的目标是让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 http://localhost:4444/wd/hub/session的远程WebDriver服务器的HTTP请求在60秒后超时。   ----> System.Net.WebException:操作已超时

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

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

1 个答案:

答案 0 :(得分:2)

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

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

如果此属性设置为可用节点数,则测试会按预期排队。