У меня есть существующий проект, который запускает тесты последовательно, и я пытаюсь реализовать параллельное выполнение.
Я изначально добавил эти атрибуты в AssemblyInfo.cs
[assembly: Parallelizable(ParallelScope.Fixtures)]
[assembly: LevelOfParallelism(2)]
, чтобычтобы попытаться выполнить параллельное выполнение, мне пришлось создать две функции, каждая с одним тестом, а затем в обозревателе тестов Visual Studio запустить их все.Это попыталось запустить каждый тест в каждой функции одновременно.
У меня один из тестов настроен для запуска в Chrome, а другой - в Firefox.Это также порядок, в котором веб-драйвер вызывает экземпляры браузера.
Сначала открывается Chrome, затем открывается Firefox - но Chrome осиротел, и тест проводится только в Firefox.
Я полагаю, что этопотому что мой веб-драйвер статичен, поэтому Firefox захватывает поток, используемый Chrome.Я читал, что не могу использовать статический веб-драйвер для параллельного тестирования, поэтому я пытаюсь использовать нестатический.
Кажется, теперь мне нужно передать драйвер между методами, чтобы убедиться, что все операции выполняютсяв этом конкретном случае.
Нестатически внедрив вебдрайвер, я сначала пытаюсь убедиться, что один тест выполняется, прежде чем запускать все тесты параллельно.
НоЯ столкнулся с дорожным блоком.В следующем тесте драйвер сбрасывается в ноль после начала второго шага (Когда):
Scenario Outline: C214 Log in
Given I launch the site for <profile> and <environment> and <parallelEnvironment>
When I log in to the Normal account
Then I see that I am logged in
Examples:
| profile | environment | parallelEnvironment |
| single | Chrome75 | |
#| single | Firefox67 | |
Как сделать так, чтобы нестатический веб-драйвер сохранялся между шагами?
ThreadLocal ответ?Если да, то будет ли это проблемой позже, если я захочу использовать это параллельное выполнение в Selenium Grid для Windows Desktop, устройств Android и iOS?
Вот мои настройки:
SetUp.cs
using TechTalk.SpecFlow;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Edge;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using System;
namespace OurAutomation
{
[Binding]
public class SetUp
{
public IWebDriver Driver;
public string theEnvironment;
public IWebDriver InitialiseDriver(string profile, string environment, string parallelEnvironment)
{
theEnvironment = environment;
if (profile == "single")
{
if (environment.Contains("IE"))
{
Driver = new InternetExplorerDriver();
}
else if (environment.Contains("Edge"))
{
Driver = new EdgeDriver();
}
else if (environment.Contains("Chrome"))
{
Driver = new ChromeDriver(@"C:\Automation Test Drivers\");
}
else if (environment.Contains("Firefox"))
{
Driver = new FirefoxDriver(@"C:\Automation Test Drivers\");
}
}
Driver.Manage().Window.Maximize();
Driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);
return Driver;
}
[AfterScenario]
public void AfterScenario()
{
Driver.Quit();
}
}
}
BaseSteps.cs
using OpenQA.Selenium;
namespace OurAutomation.Steps
{
public class BaseSteps : SetUp
{
public IWebDriver driver;
public void DriverSetup(string profile, string environment, string parallelEnvironment)
{
driver = InitialiseDriver(profile, environment, parallelEnvironment);
}
}
}
LaunchTestSteps.cs
using OurAutomation.BaseMethods;
using OurAutomation.Pages;
using TechTalk.SpecFlow;
namespace OurAutomation.Steps
{
[Binding]
public class LaunchTestSteps : BaseSteps
{
[Given(@"I launch the site for (.*) and (.*) and (.*)")]
public void ILaunchTheSite(string profile, string environment, string parallelEnvironment)
{
DriverSetup(profile, environment, parallelEnvironment);
new Common().LaunchSite(driver);
new Core().Wait(10, "seconds");
}
}
}
Есть еще, но не уверен, нужен ли полный пакет длявыяснить это.Возможно, это очевидно по моим фатальным ошибкам!