2016-07-27 19 views
2

我正在研究为各种级别的测试设置SpecFlow,并且作为我希望能够过滤哪些测试运行的一部分。例如,假设我想完成一次完整的GUI测试运行,在开发环境中为GUI测试建立依赖关系,并运行所有标记为@gui的规范,并通过gui执行这些步骤。同样来自同一个脚本,我只想运行标记为@smoke的测试,并设置部署环境所需的任何依赖关系,并通过api执行这些步骤。在某些条件下跳过specflow规范

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

所以我到目前为止的解决方案是为每种测试运行建立配置,并进行配置转换,以便在测试运行启动时将行为注入specflow。但我不确定正确的方式来标记过滤。

我能做somethig这样的:

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

,我认为这会工作(它不会运行功能),但测试将仍然会在我的测试结果,如果我这会是麻烦m用我的标签过滤掉大部分测试。如果有办法,我可以做到这一点,从完全运行中删除功能?

+0

当你不想运行这些测试时,你如何运行测试?使用内置的VS跑步者?从命令行?在构建服务器上? –

+0

@SamHolder在开发过程中使用resharper测试运行器和CI服务器(在不同的配置级别上运行不同的配置),以及如果可能的话,部署服务器上的几个规格来检查部署是否正常... –

回答

1

总之,不,我不认为有任何事情要做,除了你上面列出的内容外。

如果测试仅仅是正常的单元测试,你会如何排除测试?

在ReSharper的亚军中,你可能会创建一个只有你想运行的测试的测试会话。在CI服务器上,你只能运行特定的dll或特定类别的测试。

Specflow是一个单元测试生成工具。它会根据配置中指定的风格生成单元测试。跑步者仍然必须决定运行哪些测试,因此选择上述测试的相同原则适用于specflow测试。

将它们放入类别并仅运行这些类别是最简单的方法,但具有更细粒度的程序控制并不适用。你要求做的事情基本上就像是说'运行这个测试,但让我在测试中决定是否让它运行'这并不合理。

+0

谢谢。你所说的实际上给了我一个不同的方式来实现这个想法。假设我能够在这一点上获得正确的信息,我可能会生成一个生成器插件来抑制我不想在生成阶段进行的测试。 –