0

我必须在测试执行之前和之后运行 db 脚本,但是如果我在测试运行之前提到它会为每个线程运行多次但我只需要在测试执行中运行一次意味着它是所有线程的顶部

例如:钩子文件

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

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

在 Default.srprofile 线程数=3

运行构建时,它的显示如下

  • Thread0:“测试前运行”
  • Thread1:“测试前运行”
  • Thread2:“测试前运行”
  • Thread0:“测试后运行”
  • Thread1:“测试后运行”
  • Thread2:“测试后运行”

但是我必须在所有线程之上和所有线程之后只运行一次

4

1 回答 1

0

如果您使用具有测试线程隔离模式的 SpecFlow+RunnerProcessAppDomain执行BeforeTestRun`AfterTestRun` 钩子,每个线程都会发生。

这是预期的行为。造成这种情况的原因是这些隔离模式下线程之间的内存隔离。

要在整个测试运行中只执行一次,您必须使用自己的部署步骤。一个例子在这里:https ://github.com/SpecFlowOSS/SpecFlow.Plus.Examples/tree/master/CustomDeploymentSteps

如果其他测试运行程序或在 中发生这种情况SharedAppDomain,请在 GitHub 上打开一个问题。


全面披露:我是 SpecFlow 和 SpecFlow+ 的开发人员之一。

于 2020-02-06T08:42:11.723 回答