如何在测试运行之前和之后仅执行一次以并行执行规范流



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

例如: 钩子文件

[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:"测试后运行">

但是我只需要在所有线程上方和所有线程之后运行一次

如果您使用的是 SpecFlow+Runner,测试线程隔离模式为ProcessAppDomain执行BeforeTestRunAfterTestRun钩子将针对每个线程发生。

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

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

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


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

最新更新