Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Specflow параллельный запуск Outline Parallelizable(ParallelScope.Children)

csharp
specflow
parallel
testing
selenium
webdriver
Теги: #<Tag:0x00007f7b60f31b18> #<Tag:0x00007f7b60f319b0> #<Tag:0x00007f7b60f316e0> #<Tag:0x00007f7b60f31578> #<Tag:0x00007f7b60f313c0> #<Tag:0x00007f7b60f31168>

(Ли неизвестная) #1

Добрый день! У меня написаны тесты для одного кейса несколько тестовых даных.

Feature: GoalPurchase

@runable
Scenario Outline: Goal Purchase
Given Открыт экран DeltaProDev Выбор роли

When Выбор клиента Фамилия <LastName> Имя <Name> Отчество <MiddleName> 
When Изменить этап сделки <DealStage>

Examples: 
| sotr            | N | LastName  | Name       | MiddleName | DealStage |
| Сотрудник | 0 | Булочкина | Кристина | Сергеевна   | 12              |
| Сотрудник | 0 | Уотсон       | Эмма       | Сергеевна   | 1                |

Появилась необходимость в параллельных запусках тестов. Я хочу, чтобы одновременно запускались эти два теста. Использую для этого такой способ:

[assembly: Parallelizable(ParallelScope.Children)]
[assembly: LevelOfParallelism(4)]

Но тесты выпадают в ошибку :
Message: System.ArgumentException : An item with the same key has already been added.
TearDown : System.NullReferenceException : Object reference not set to an instance of an object.


(Alexandr D.) #2

В SpecFlow параллельный сейчас запуск только для фикстур, не для тестов (касается NUnit3).


(Alexandr D.) #3

Как вариант - это написать свой плагин, который будет добавлять атрибут [Parallelizable] методам в сгенеренных классах, либо руками править сгенеренные классы.


(Ли неизвестная) #4

Вы не подскажите ссылку, как это делать ?


(Alexandr D.) #5

Для этого надо знать программирование :slight_smile:

Вы попробуйте руками для начала добавить атрибуты. Может оно вообще не взлетит.


(Ли неизвестная) #6

Я просто не понимаю, куда именно это нужно добавить. в feature после сценария ? Или куда?


(Alexandr D.) #7

После сохранения изменений в фф, у вас рядом генерится класс этого фф.

Вот там методам с тестами и надо добавить атрибут руками (но уже не трогать сам фф, ибо он перегенерит и сотрёт)


(Ли неизвестная) #8

namespace MarsTests.Specflow.Features.ApplicationScanarios._3_Calculations
{
using TechTalk.SpecFlow;

[System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.4.0.0")]
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[TechTalk.SpecRun.FeatureAttribute("Scenario3.0.CorrectionCalculations", Description="\t\t Корректировка процентной ставки и расчет ПСК. ", SourceFile="Specflow\\Features\\ApplicationScanarios\\3.Calculations\\Scenario3.0.CorrectionCalcu" +
    "lations.feature", SourceLine=0)]
[NUnit.Framework.Parallelizable(NUnit.Framework.ParallelScope.Children)]

(Ли неизвестная) #9

Что-то такое?


(Alexandr D.) #10

Yes.


(Ли неизвестная) #11

Нет, это не помогает)


(Alexandr D.) #12

Тогда стоит смириться с параллельностью только фикстур.
Либо менять раннер


(Ли неизвестная) #13

какой ранер лучше выбрать ?


(Alexandr D.) #14

Понятия не имею, какой больше нравится - такой и выбирайте. Можете попробовать их раннер.

Лично для меня NUnit вне конкуренции, но не в рамках SpecFlow, наверное.


(Юрий Аксютин) #15

Выбирайте SpecRun, если хотите использовать все фичи Specflow
для паралельного запуска тестов идем в файлик *.srprofile, настраиваем блок:

<Execution
stopAfterFailures="-1"
retryFor=“None”
testThreadCount=“30”
testSchedulingMode=“Random”
/>

посмотрите в документации о возможностях разных опций этого файла.


(Nick) #16

И в чём практический смысл писать что-то такое, если [assembly: Parallelizable(ParallelScope.Children)] делает то же самое?

Это 5 :rofl:

@li_neizvestnaya
SpecFlow, действительно не поддерживает работу с Parallelizable.Children из-за своей текущей архитектуры.

Помимо [assembly: Parallelizable(ParallelScope.Fixtures)]
У SpecFlow в конфиге можно указать
<generator markFeaturesParallelizable="true"/>
который благополучно проставит Parallelizable