Selenium Grid с параллельным тестированием с использованием C#/NUnit
У меня есть несколько модульных тестов, написанных с NUnit, которые вызывают команды селена. У меня есть 2 сервера win2k3, один из которых работает с сетевым концентратором selenium вместе с 2 RC селена. Другая коробка работает 5 селен RC. Все они зарегистрированы в хабе как работающие с Firefox в Windows (для простоты). В моем методе настройки модульного теста я подключил его к имени хоста концентратора через порт 4444.
При запуске тестов они запускаются только последовательно (как и ожидалось). Я много читал о дорожной карте NUnit и о том, как они стремятся к параллельным способностям тестирования. Я видел множество указаний на использование PNUnit. Однако это, кажется, полностью разрушает цель Селеновой Решетки.
Кто-нибудь из вас успешно реализовал параллельное тестирование с использованием C#/NUnit, подключенного к установке Selenium Grid? Если так, пожалуйста, уточните.
Я в полной растерянности из-за того, как это будет / может работать, используя NUnit, как он существует сейчас (я использую версию 2.9.3)
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
Тестер Gallio: http://www.gallio.org/
Есть также PNUnit, на который стоит обратить внимание, я еще не пробовал его для параллельного тестирования.
На NCrunch ( http://www.ncrunch.net/) стоит обратить внимание - он имеет возможность распределенной обработки как часть сборки, и одной из его основных функций является параллельное тестирование.
Сегодня 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);
}
}
Используя Selenium Grid в сочетании с библиотекой Parallels для задачи.NET и классом DynamicObject, вы можете одновременно выполнять один и тот же тест на нескольких узлах Selenium Grid (несколько браузеров).
http://blog.dmbcllc.com/running-selenium-in-parallel-with-any-net-unit-testing-tool/