1

我们当前的 C#/Nunit 2.6.3 测试框架有一个回归套件,它需要超过 35 小时才能在单台 PC 上运行,其中一些测试持续时间长达 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。

4

1 回答 1

2

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

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

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

于 2016-05-11T12:23:01.683 回答