Селеновая сетка с параллельным тестированием c использованием C# / NUnit


У меня есть несколько модульных тестов, написанных с помощью NUnit, которые вызывают команды selenium. У меня есть 2 win2k3 серверные коробки установки, один работает selenium grid hub вместе с 2 selenium rc. другой ящик работает 5 selenium rc. все они зарегистрированы в хабе как работает Firefox на Windows (чтобы сохранить его простым). В моем методе установки модульного теста я подключил его к имени хоста концентратора в порту 4444.

При выполнении тестов они выполняются только последовательно (как и ожидалось). Я уже сделал это. много читал о дорожной карте Нунита и о том, как они стреляют для параллельного тестирования способностей. Я видел много указателей на использование PNUnit в то же время. Однако это, по-видимому, полностью противоречит цели селеновой сетки.

Кто-нибудь из вас успешно реализовал параллельное тестирование с использованием C#/NUnit, подключенного к сетке Selenium? Если да, пожалуйста, уточните.

Я в полной растерянности от того, как это будет / может работать, используя NUnit, как он существует сейчас (я использую версию 2.9.3)

5 5

5 ответов:

К сожалению, 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/) стоит посмотреть - он имеет возможность распределенной обработки как часть сборки, и одна из его основных особенностей-параллельное тестирование.

Используя 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);
    }
}