Selenium Grid使用C#/ NUnit进行并行测试

我已经用NUnit编写了几个调用selenium命令的unit testing。 我有2个win2k3服务器盒设置,一个运行selenium网格集线器和2个selenium rc。 另一个盒子正在运行5个selenium rc。 所有这些都在集线器中注册为在Windows上运行Firefox(为了保持简单)。 在我的unit testing设置方法中,我已经将它连接到端口4444处的集线器主机名。

运行测试时,它们只按顺序运行(如预期的那样)。 我已经对NUnit的路线图以及它们如何为并行测试能力进行了大量阅读。 在此期间,我已经看到很多关于使用PNUnit的指示。 然而,这似乎完全打败了Selenium Grid的目的。

有没有人使用连接到Selenium Grid设置的C#/ NUnit成功实现了并行测试? 如果是这样,请详细说明。

我现在完全不知道如何使用NUnit,因为它现在存在(我使用的是版本2.9.3)

遗憾的是,NUnit无法并行运行测试,因此您必须使用其他运行器来存档使用Selenium Grid进行并行测试的所有优势。

我使用Gallio runner来测试c#并在这里有例子:

同时运行测试的c#项目: http : //code.google.com/p/design-of-selenium-tests-for-asp-net/

说明: http : //slmoloch.blogspot.com/2009/12/design-of-selenium-tests-for-aspnet_19.html

Gallio测试运行者: http ://www.gallio.org/

还有PNUnit ,值得一看,我还没有尝试过并行测试。

NCrunch( http://www.ncrunch.net/ )值得关注 – 它可以选择分布式处理作为构建的一部分,其中一个主要function是并行测试。

通过将Selenium Grid与.NET的任务并行库和DynamicObject类结合使用,您可以同时在多个Selenium Grid节点(多个浏览器)上运行相同的测试。

http://blog.dmbcllc.com/running-selenium-in-parallel-with-any-net-unit-testing-tool/

Gallio今天已经过时,所以你可以坚持使用NUnit解决方案。

从3.7版本开始,NUnit允许并行运行测试。 在此之前,可以在夹具级别上执行此操作,但在3.7+中,您甚至可以在一个TestFixute中进行测试。 请参阅下面的示例,以演示如何实现。

using NUnit.Framework; using System; using System.Collections.Generic; using System.Linq; using System.Threading; namespace ConsoleApp1 { [TestFixture] public class Dummy { static TestCaseData Case(int i) => new TestCaseData(TimeSpan.FromSeconds(2)).SetName($"Case {i}"); public static IEnumerable Cases() => Enumerable.Range(1, 5).Select(Case); [TestCaseSource(nameof(Cases)), Parallelizable(ParallelScope.Children)] public void ItShouldSleep(TimeSpan t) => Thread.Sleep(t); static TestCaseData Case2(int i) => new TestCaseData(TimeSpan.FromSeconds(2)).SetName($"Case2 {i}"); public static IEnumerable Cases2() => Enumerable.Range(1, 5).Select(Case2); [TestCaseSource(nameof(Cases2)), Parallelizable(ParallelScope.Children)] public void ItShouldSleep2(TimeSpan t) => Thread.Sleep(t); } [TestFixture()] public class Dummy2 { static TestCaseData Case(int i) => new TestCaseData(TimeSpan.FromSeconds(2)).SetName($"Case {i}"); public static IEnumerable Cases() => Enumerable.Range(1, 5).Select(Case); [TestCaseSource(nameof(Cases)), Parallelizable(ParallelScope.Children)] public void ItShouldSleep(TimeSpan t) => Thread.Sleep(t); } }