在“AfterScenario”阶段,是否可以重新运行刚刚失败的当前测试?据我所知,AfterScenario期间的Console.WriteLine出现在报告中,因此报告是在“AfterScenario”之后生成的。
ScenarioContext类可以检测Scenario是否失败。也许它也可以推出一个场景?任何其他意思也是可以接受的。
编辑: 回到“BeforeScenario”可能也会有用。
答案 0 :(得分:3)
我想说这是不可能的,但是像IT中的许多事情一样,如果你施加足够的压力,你可能会强迫它发挥作用。
相反,我会说SpecFlow肯定不是为了支持这一点而设计的。考虑通常参与运行测试的所有部分,
测试跑步者。它可能是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无法解析运行的相同测试两次。
或者,为什么不看优化的测试跑步者来解决您的问题。
答案 1 :(得分:1)
如果您使用SpecFlow + Runner(AKA SpecRun),您可以在specflow测试失败时设置重试,然后跑步者将重新运行任何失败的测试。 SpecFlow + Runner是商业产品,尽管有评估版本。
答案 2 :(得分:0)
我100%同意Alski所说的一切,因为我觉得你将会逆着潮流游泳,试图以这种方式弯曲你的意志。
但是我也想提供一种替代解决方案,如果我遇到这个问题,我会尝试。我可能会检查AfterScenario
中的测试失败,然后写出一个文件,其中包含失败的测试名称。然后在测试运行之后,如果文件存在,那么我将使用它再次重新运行单个失败的测试。
但是TeamCity仍然是我做这件事的第一选择。