Как мне реализовать параллельное выполнение в Specflow / Selenium / C # / NUnit? - PullRequest
0 голосов
/ 11 июля 2019

У меня есть существующий проект, который запускает тесты последовательно, и я пытаюсь реализовать параллельное выполнение.

Я изначально добавил эти атрибуты в 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");
        }
    }
}

Есть еще, но не уверен, нужен ли полный пакет длявыяснить это.Возможно, это очевидно по моим фатальным ошибкам!

1 Ответ

0 голосов
/ 16 июля 2019

После долгих церемоний нашел https://github.com/minhhoangvn/AutomationFramework, который позволил мне удалить необходимый код для параллельного тестирования с использованием ThreadLocal.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...