[英]Selenium Grid with parallel testing using C#/NUnit
我用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)
不幸的是,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/
NCrunch( http://www.ncrunch.net/ )值得关注 - 它可以选择分布式处理作为构建的一部分,其中一个主要功能是并行测试。
还有PNUnit ,值得一看,我还没有尝试过并行测试。
通过将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<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);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.