Нужна помощь в создании параллельных тестов. У меня есть установка selenium c #, которая использует комбинацию NUnit, C # и selenium для последовательного запуска тестов локально на моей машине или на сервере CI.
Ранее я изучал распараллеливание тестирования, но не смог выполнить переход, и выполнение в последовательности прошло нормально.
В тот момент, когда я добавляю тег NUnit [Parallelizable], я получаю ошибку 'OpenQA.Selenium.WebDriverException: неверный идентификатор сеанса', основываясь на чтении, которое я сделал, мне нужно сделать каждый новый драйвер, который я называю уникальным , Тем не менее, я не уверен, как это сделать? или даже начать в этом отношении ... это вообще возможно в моей текущей настройке?
Мои тесты в настоящее время проводят ограниченные тесты дыма и просто убирают повторяющиеся регрессионные тесты для нескольких браузеров, однако я предвижу необходимость значительно расширить мой охват возможностями тестирования.
Я, вероятно, буду рассчитывать на получение Browserstack или Sauselab в долгосрочной перспективе, но очевидно, что для этого требуется финансирование, и мне нужно получить его подписанное, поэтому я буду стремиться к тому, чтобы оно работало локально.
вот посмотрите на базовую настройку моего кода
тестовые файлы:
1-й .cs тестовый файл
{
[TestFixture]
[Parallelizable]
public class Featur2Tests1 : TestBase
{
[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test1(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);
//Run test steps....
}
[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test2(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);
//Run test steps....
}
}
}
2-й тестовый файл .cs
{
[TestFixture]
[Parallelizable]
public class FeatureTests2 : TestBase
{
[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test1(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);
//Run test steps....
}
[Test]
[TestCaseSource(typeof(TestBase), "TestData")]
public void test2(string BrowserName, string Environment, string System)
{
Setup(BrowserName, Environment, System);
//Run test steps....
}
}
}
TestBase.cs, где мои настройки для каждого теста
{
public class TestBase
{
public static IWebDriver driver;
public void Setup(string BrowserName, string Environment, string System)
{
Driver.Intialize(BrowserName);
//do additional setup before test run...
}
[TearDown]
public void CleanUp()
{
Driver.Close();
}
public static IEnumerable TestData
{
get
{
string[] browsers = Config.theBrowserList.Split(',');
string[] Environments = Config.theEnvironmentList.Split(',');
string[] Systems = Config.theSystemList.Split(',');
foreach (string browser in browsers)
{
foreach (string Environment in Environments)
{
foreach (string System in Systems)
{
yield return new TestCaseData(browser, Environment, System);
}
}
}
}
}
}
}
IEnumerable TestData поступает из файла с именем config.resx и содержит следующие данные:
- {Имя}: {Значение}
- theBrowserList: Chrome, Edge, Firefox
- theEnvironmentList: QA
- theSystemList: WE
Здесь я создаю свой драйвер в Driver.cs
{
public class Driver
{
public static IWebDriver Instance { get; set; }
public static void Intialize(string browser)
{
string appDirectory = Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.Parent.FullName;
string driverFolder = $"{appDirectory}/Framework.Ditto.AI.RioPlatform/bin/debug";
if (browser == "Chrome")
{
ChromeOptions chromeOpts = new ChromeOptions();
chromeOpts.AddUserProfilePreference("safebrowsing.enabled", true);
chromeOpts.AddArgument("start-maximized");
chromeOpts.AddArgument("log-level=3");
Instance = new ChromeDriver(driverFolder, chromeOpts);
}
else if (browser == "IE")
{
var options = new InternetExplorerOptions { EnsureCleanSession = true };
options.AddAdditionalCapability("IgnoreZoomLevel", true);
Instance = new InternetExplorerDriver(driverFolder, options);
Instance.Manage().Window.Maximize();
}
else if (browser == "Edge")
{
EdgeOptions edgeOpts = new EdgeOptions();
Instance = new EdgeDriver(driverFolder, edgeOpts);
Instance.Manage().Window.Maximize();
Instance.Manage().Cookies.DeleteAllCookies();
}
else if (browser == "Firefox")
{
FirefoxOptions firefoxOpts = new FirefoxOptions();
Instance = new FirefoxDriver(driverFolder, firefoxOpts);
Instance.Manage().Window.Maximize();
}
else { Assert.Fail($"Browser Driver; {browser}, is not currently supported by Initialise method"); }
}
public static void Close(string browser = "other")
{
if (browser == "IE")
{
Process[] ies = Process.GetProcessesByName("iexplore");
foreach (Process ie in ies)
{
ie.Kill();
}
}
else
{
Instance.Quit();
}
}
}
}