Моя работа поручила нам написать фреймворк автоматизации, который включает в себя selenium webdriver с C # / nunit. В настоящее время мы используем nunit 3.0. Моя первоначальная идея заключалась в том, чтобы извлечь достаточно материала из фреймворка, чтобы командам, использующим фреймворк, не приходилось беспокоиться о таких вещах, как установка / отключение webdriver.
Мы решили пойти по пути создания тестового вспомогательного класса, у которого есть настройка / разборка, который будет создавать экземпляр драйвера на основе настроек конфигурации (хром, т. Д.), А затем разрывать его после каждого теста. Мы также добавили переменную драйвера защищенного класса, которая устанавливается при каждом вызове программы установки. Таким образом, каждый тестовый класс может расширить TestHelper и получить драйвер бесплатно.
Это отлично работает, когда мы не запускаем тесты параллельно, но как только мы начинаем выполнять параллельные тесты, драйвер каждый раз перезаписывается (что имеет смысл).
Мой вопрос: есть ли лучший способ сделать это, чтобы сохранить исходную идею наличия драйвера в TestHelper и исключить множество манипуляций с драйверами в самих тестах. Я действительно хочу, чтобы в каждом тесте не было объявлений / инициализаций драйверов, а просто оставались наборы тестов для тестирования конкретного кода.
Вот несколько тестовых классов, которые напоминают то, что происходит (на самом деле я не мог опубликовать производственный код, потому что работа по этому поводу забавна):
Вот мой тестовый вспомогательный класс:
using NUnit.Framework;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
namespace AutomationTest
{
class TestHelper
{
protected IWebDriver driver;
[SetUp]
public void startBrowser()
{
driver = new ChromeDriver("C:\\Users\\james\\Desktop");
}
[TearDown]
public void closeBrowser()
{
driver.Close();
driver.Quit();
}
}
}
А вот и мой тестовый класс (8 тестов только для проверки параллельного тестирования):
using NUnit.Framework;
namespace AutomationTest
{
[TestFixture]
[Parallelizable(ParallelScope.All)]
class ParallelTest : TestHelper
{
[Test]
public void test1()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test2()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test3()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test4()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test5()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test6()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test7()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
[Test]
public void test8()
{
driver.Navigate().GoToUrl("http://www.google.com");
Assert.AreEqual(driver.Title, "Google", "Stuff didn't work");
}
}
}