Как выполнить до и после запуска теста только один раз при параллельном выполнении specflow - PullRequest
0 голосов
/ 04 февраля 2020

Мне нужно запускать сценарии БД до и после выполнения теста, но если я упомянул в прогоне «Перед запуском», он запускается несколько раз для каждого потока, но мне нужно запускать только один раз при выполнении теста, это означает, что он будет самым верхним из всех потоков

Например: файл хуков

[BeforeTestRun]
public static void BeforeTestrun()
{
    Console.WriteLine("run before test");
}

[AfterTestRun]
public static void AfterTestrun()
{
    Console.WriteLine("run after test");
}

В Default.srprofile Количество потоков = 3

При запуске сборки его показывается так:

  • Тема 0: «запустить до теста»
  • Тема 1: «запустить до теста»
  • Тема 2: «запустить до теста»
  • Тема 0: «запустить после теста»
  • Поток 1: «запустить после теста»
  • Поток 2: «запустить после теста»

Но я должен запускаться только один раз над всеми потоками и после всех потоков

1 Ответ

0 голосов
/ 06 февраля 2020

Если вы используете SpecFlow + Runner с режимом изоляции тестового потока Process или AppDomain, для каждого потока будет выполняться перехват BeforeTestRun `AfterTestRun`.

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

Чтобы выполнить что-то только один раз за весь тестовый запуск, вы должны использовать свой собственный шаг развертывания. Вот пример: https://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/tree/master/CustomDeploymentSteps

Если это происходит для других участников теста или в SharedAppDomain, откройте проблему на GitHub.


Полное раскрытие: я один из разработчиков SpecFlow и SpecFlow +.

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