繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM