我有几个用 NUnit 编写的单元测试,它们调用 selenium 命令。我有 2 个 win2k3 服务器盒设置,其中一个正在运行 selenium grid hub 以及 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

加里奥测试运行者: http://www.gallio.org/

其他提示

还有 PNUnit ,值得考虑看看,我有没有尝试过进行平行测试。

NCrunch( http://www.ncrunch.net/ )是值得考虑的 - 它具有分布式处理的选项作为构建的一部分和它的主要特征之一是并行测试。

通过组合使用硒网格与NET的任务并行库和DynamicObject类可以在同一时间运行在多个硒网格节点(多个浏览器)相同的测试。

HTTP://博客.dmbcllc.com /运行 - 硒 - 在平行与 - 任何净单元测试工具/

加利奥是过时的今天,所以你能坚持到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归因
不隶属于 StackOverflow
scroll top