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

时间:2009-11-18 16:45:07

标签: c# nunit selenium-grid pnunit

我用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)

5 个答案:

答案 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);
    }
}