Сетка Selenium с параллельным тестированием с использованием C # / NUnit
-
20-09-2019 - |
Вопрос
У меня есть несколько модульных тестов, написанных с помощью 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);
}
}