是否可以在“AfterScenario”阶段重新运行刚刚失败的当前测试?据我所知,报告中出现了AfterScenario期间的Console.WriteLine,所以报告是在“AfterScenario”之后生成的。
ScenarioContext 类可以检测 Scenario 是否失败。也许它也可以启动一个场景?执行此操作的任何其他方式也是可以接受的。
编辑: 回到“BeforeScenario”可能也行。
请您参考如下方法:
我想说这是不可能的,但就像 IT 中的许多事情一样,如果你施加足够的压力,你可能会强制它工作。
所以我会说 SpecFlow 肯定不是为了支持这个而设计的。考虑运行测试中通常涉及的所有部分,
- 主机,例如 Visual Studio、构建过程(例如 TeamCity Agent)或只是一个 Cmd 行。这些都是通过调用来启动测试的;
测试运行器。它可以是 VS 或 Resharper 测试运行器、TeamCity Nunit 运行器或什至只是 nunit.console.exe(或 msTest 等价物)。这将加载您的测试 dll 并扫描它们以查找 nunit/mstest
[Test]\[Setup]\[TearDown]属性。测试 dll 包含 SpecFlow 插件生成的代码,并将 nUnit 属性映射到 SpecFlow 属性。
我认为您只考虑了最后一层而不是最上面的那些。因此,即使您以某种方式设法说服 SpecFlow 和 nUnit/msTest 再次运行这些测试,我认为您最终会在整个过程中遇到错误,因为 VisualStudio、Resharper、TeamCity Agents 或 CmdLine 无法解析正在运行的相同测试两次。
或者,您为什么不查看优化的测试运行器来解决您的问题。
- TeamCity nUnit 运行器可以首先运行上次失败的测试,因此您可以很快知道是否会再次失败。
- NCrunch 允许您选择引擎模式,这样您就可以只运行之前失败的测试,或受代码更改影响的测试,或两者兼而有之(通过自定义规则)。
