我正在为各种级别的测试设置SpecFlow,作为其中的一部分,我希望能够过滤哪些测试运行。
例如,假设我想进行完整的GUI测试运行,我在开发环境中构建GUI测试的依赖项,并运行标记为@gui的所有规范,并通过gui执行这些步骤。同样来自同一个脚本我想只运行标记为@smoke的测试,并设置部署环境所需的任何依赖项,并通过api执行这些步骤。
我知道您可以在通过specflow运行程序运行时过滤标记,但我还需要在测试运行的上下文中更改每个测试的工作方式。此外,我希望在构建服务器上运行时,使用单个配置/命令行arg切换此行为更改。
所以到目前为止,我的解决方案是为每种测试运行构建配置,并进行配置转换,以便在测试运行启动时将行为注入specflow。但我也不确定按标签过滤的正确方法。
我可以像这样做一些事情:
[BeforeFeature]
public void CheckCanRun()
{
if(TestCannotBeRunInThisContext())
{
ScenarioContext.Current.Pending();
}
}
我认为这样可以工作(它不会运行该功能)但是我的测试结果仍会出现测试结果,如果我用我的标签过滤掉大多数测试,那将会很麻烦。如果有一种方法可以做到这一点,这将使功能完全无法运行?
答案 0 :(得分:1)
简而言之,除了上面提到的内容之外,我不会认为无论如何都要做你想做的事。
如果测试只是正常的单元测试,你会如何排除测试?
在ReSharper的跑步者中,您可能只创建一个只想运行测试的测试会话。在CI服务器上,您只能在特定的dll或特定类别中运行测试。
Specflow是一种单元测试生成工具。它以配置中指定的风格生成单元测试。运行者仍然必须决定运行哪些测试,因此选择上面运行的测试的相同原则适用于specflow测试。
将它们分类并仅运行这些类别是最简单的方法,但对其进行更细粒度的程序控制并不是真正适用的。您要求做的事情基本上就是说“运行此测试”,但让我在测试中决定是否要让它运行'这并没有多大意义。