Selenium C# / NUnit 3.12.0 не выполняет тесты параллельно - PullRequest
0 голосов
/ 07 мая 2020

Я выполняю свои тесты в окне Visual Studio Enterprise 2019 версии 16.3.9 / Test Explorer. Моя архитектура - это процессор Intel (R) Core (TM) i7-7600 @ 2,80 ГГц (4 процессора), ~ 2,9 ГГц
Вот мой псевдо-Selenium C# код ниже:

[TestFixture]
internal class TestClass{

    [OneTimeSetUp]
    public void OneTimeSetUp()
    {
       initializeExtentReport()
    }

    [SetUp]
    public void Setup()
    {
       initializeChromebBrowser();
    }

    [Test]
    public void NavigatoToGmail()
    {
        bool isGmailAccessible = GoToUrl("https://www.google.com/");
        Assert.True(isGmailAccessible);
    }

    [Test]
    public void NavigatoToMicrosoft()
    {
        bool isMicrosoftAccessible = GoToUrl("https://www.microsoft.com/");
        Assert.True(isMicrosoftAccessible);
    }


    [Test]
    public void NavigatoToYahoo()
    {
        bool isYahooAccessible = GoToUrl("https://www.yahoo.com/");
        Assert.True(isYahooAccessible);
    }

    [TearDown]
    public void TearDOwn()
    {
        CloseBrowser();
    }

    [OneTimeTearDown]
    public void OneTimeTearDown()
    {
        FinishExtentReport();
    }

Итак вот то, что я уже пробовал, и это не сработало.

  1. Добавление [Parallelizable(ParallelScope.Children)] в класс и [Parallelizable(ParallelScope.Self)] атрибутов для каждого метода тестирования. Результат - 3 экземпляра браузера открываются без каких-либо других действий. Нет навигации по URL, ничего.

  2. Добавление [Parallelizable(ParallelScope.All)] к классу и [Parallelizable(ParallelScope.Self)] к каждому методу тестирования. Результат - открыто 3 экземпляра браузера. Только последний тест (NavigatoToYahoo) выполняется и дает результат. Первые 2 - никаких других действий не происходит и браузер windows не закрывается, то есть метод TearDown () не выполняется.

  3. Просто добавляйте [Parallelizable(ParallelScope.Self)] к каждому методу тестирования. Результат - 3 экземпляра браузера открываются без каких-либо других действий. Никакой навигации по URL, ничего.

  4. Добавление [Parallelizable(ParallelScope.Self)] к классу и [Parallelizable(ParallelScope.Self)] атрибутов к каждому методу тестирования. Результат - открыто 3 экземпляра браузера. Выполняется второй тест (NavigateToMicrosoft), остальные 2 - никаких других действий, никакой навигации по URL, ничего.

  5. Добавление [Parallelizable(ParallelScope.Self)] к классу и [Parallelizable(ParallelScope.All)] атрибутов к каждому тесту метод. Результат - получение сообщения об ошибке May not specify ParallelScope.Children on a non-parameterized test method - честно говоря, понятия не имею, почему

Я просмотрел документацию здесь https://github.com/nunit/docs/wiki/Parallelizable-Attribute, но мне кажется, что нет фактический способ параллельного выполнения модульных тестов с использованием фреймворка NUnit.

Я просто хочу запустить эти 3 теста (в моем реальном сценарии их около 100) параллельно, независимо друг от друга.

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

@ Ответ Нейла неверен. NUnit будет запускать тесты в сборке параллельно в соответствии с тем, как вы это укажете. Однако здесь вы имеете дело с двумя частями программного обеспечения, каждая из которых имеет свой способ распараллеливания. Я могу ответить WRT NUnit, чтобы вы, по крайней мере, не тратили время на ненужные игры с атрибутами.

  1. [Parallelizable] то же самое, что и `[Parallelizable (ParallelScope.Self)]. Лучший стиль, IMO, - использовать его без атрибута, но они равны.

  2. [ParallelScope.All] - это сокращение от [ParallelScope.Self | ParallelScope.Children].

  3. Итак, вам нужно беспокоиться только о двух параметрах: Self (неявное или явное) и Children.

  4. Размещение Children в классе аналогично размещению Self в каждый тестовый пример. В обоих случаях тесты могут выполняться параллельно друг другу.

  5. При размещении в классе прибора Self означает, что прибор может работать параллельно с другими приборами, которые также имеют Self им. Если тесты в этом приспособлении также можно распараллеливать, то они выполняются параллельно со всеми тестами во всех параллельных приспособлениях.

  6. Если бы вы запускали только NUnit, то есть без Selenium, вы бы просто поставьте [Parallelizable] на каждый тест или '[Parallelizable (ParallelScope.Children)] `на приспособлении - любой из них сделает то же самое.

  7. Если у вас более одного приспособления и вы не хотите, чтобы они работали параллельно, делать больше нечего. Если вы хотите, чтобы они и все их тесты выполнялись параллельно, поставьте [Parallelizable] на приспособление ИЛИ поместите [Parallelizabel(ParallelScope.All)] на приспособление и ничего не на тестовые случаи.

  8. Что-то важное, что многие люди упускают: [Parallelizable] заставляет ваши тесты запускаться параллельно. Это не делает их способными работать параллельно. Вы должны это сделать. Атрибут сообщает NUnit, что вы убедились, что тест может выполняться параллельно, поэтому он запускает его таким образом.

Вот и все, что касается NUnit. Теперь, если вы добавите селен в смесь, это зависит от того, как вы его используете. Если Selenium запускает для вас процессы, то, что вы делали в NUnit, не имеет никакого значения. Вам нужно понять, как распараллеливание Selenium взаимодействует с NUnit. Я просто рассказал вам о том, что делает NUnit.

Наблюдение ... если у вас не очень мало тестовых примеров или они не занимают много времени по отдельности, вы, вероятно, сможете получить такие же хорошие или более производительные приборы, работающие параллельно и позволяя тестам запускаться последовательно внутри прибора.

UPDATE - В вашем последующем комментарии вы сказали, что у вас есть только одно приспособление. Мой ответ был связан с гораздо более сложным предположением. С одним прибором, если вы хотите, чтобы все тесты выполнялись параллельно, используйте ParallelScope.Children на приспособлении. Если один или два теста не могут работать параллельно, пометьте их как NonParallelizable.

0 голосов
/ 07 мая 2020

Модульные тесты не будут выполняться параллельно, если они находятся в одном классе. Если у вас есть 3 отдельных тестовых класса, он должен работать.

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