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

StackOverflow https://stackoverflow.com/questions/1757369

Вопрос

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

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

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

Я в полной растерянности от того, как это будет / может работать с использованием 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/

Другие советы

Есть также PNunit ( Единица ), на который стоит взглянуть, я еще не пробовал его для параллельного тестирования.

Сокрушительный удар (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 позволяет запускать тест параллельно.До этого это было возможно сделать на уровне fixture, но в версии 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