我用NUnit编写了几个调用selenium命令的单元测试。我有2个win2k3服务器盒设置,一个运行selenium网格集线器和2个selenium rc。另一个盒子正在运行5个selenium rc。所有这些都在集线器中注册为在Windows上运行Firefox(为了保持简单)。在我的单元测试设置方法中,我已经将它连接到端口4444上的集线器主机名。
运行测试时,它们只按顺序运行(按预期方式)。我已经完成了很多关于NUnit路线图的阅读以及他们如何为并行测试能力拍摄。我已经看到很多指针在此期间使用PNUnit。然而,这似乎完全打败了Selenium Grid的目的。
有没有人使用连接到Selenium Grid设置的C#/ NUnit成功实现了并行测试?如果是这样,请详细说明。
我现在完全不知道如何使用NUnit,因为它现在存在(我使用的是版本2.9.3)
答案 0 :(得分:4)
不幸的是,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/
答案 1 :(得分:1)
还有PNUnit,值得一看,我还没有尝试过并行测试。
答案 2 :(得分:1)
NCrunch(http://www.ncrunch.net/)值得关注 - 它可以选择分布式处理作为构建的一部分,其中一个主要功能是并行测试。
答案 3 :(得分:0)
通过将Selenium Grid与.NET的任务并行库和DynamicObject类结合使用,您可以同时在多个Selenium网格节点(多个浏览器)上运行相同的测试。
http://blog.dmbcllc.com/running-selenium-in-parallel-with-any-net-unit-testing-tool/
答案 4 :(得分:-1)
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<TestCaseData> 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<TestCaseData> 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<TestCaseData> Cases()
=> Enumerable.Range(1, 5).Select(Case);
[TestCaseSource(nameof(Cases)), Parallelizable(ParallelScope.Children)]
public void ItShouldSleep(TimeSpan t)
=> Thread.Sleep(t);
}
}