在特定条件下跳过specflow规范

本文关键字:specflow 规范 条件下 | 更新日期: 2023-09-27 17:58:44

我正在考虑为各种级别的测试设置SpecFlow,作为其中的一部分,我希望能够过滤运行的测试。

例如,假设我想进行一次完整的GUI测试运行,在那里我在开发环境中建立GUI测试的依赖关系,并运行所有标记为@GUI的规范,通过GUI执行步骤。同样,在同一个脚本中,我只想运行标记为@smoke的测试,并设置部署环境所需的任何依赖项,步骤通过api执行。

我知道在运行specflow runner时可以过滤标记,但我还需要更改每个测试在测试运行上下文中的工作方式。此外,我希望在构建服务器上运行时,使用单个配置/命令行arg来切换这种行为更改。

因此,到目前为止,我的解决方案是为每种测试运行构建配置,并进行配置转换,以便在测试运行启动时将行为注入到specflow中。但我也不确定用标签过滤的正确方法。

我可以这样做:

[BeforeFeature] 
public void CheckCanRun()
{
   if(TestCannotBeRunInThisContext())
   {
       ScenarioContext.Current.Pending();
   }
}

我认为这会起作用(它不会运行该功能),但测试仍然会出现在我的测试结果中,如果我用标签过滤掉大部分测试,那将是一团糟。如果有一种方法可以让我完全停止运行该功能?

在特定条件下跳过specflow规范

简而言之,不,我认为除了上面概述的内容之外,没有什么可以做你想做的事情。

如果测试只是普通的单元测试,你会如何将它们排除在运行之外?

在ReSharper的运行程序中,您可能会创建一个只包含要运行的测试的测试会话。在CI服务器上,您只会在特定dll或特定类别中运行测试。

Specflow是一个单元测试生成工具。它以配置中指定的风格生成单元测试。运行者仍然需要决定运行这些测试中的哪一个,因此上面选择要运行的测试的相同原则也适用于特定流量测试。

将它们放入类别中并只运行这些类别是最简单的方法,但对其进行更细粒度的编程控制并不适用。你要求做的基本上就像说"运行这个测试,但让我在测试中决定是否要运行它",这真的没有意义。