Webdriver,使用“AfterScenario”在生成报告之前重新运行失败的测试

时间:2015-07-13 09:40:25

标签: c# visual-studio-2013 webdriver specflow

在“AfterScenario”阶段,是否可以重新运行刚刚失败的当前测试?据我所知,AfterScenario期间的Console.WriteLine出现在报告中,因此报告是在“AfterScenario”之后生成的。

ScenarioContext类可以检测Scenario是否失败。也许它也可以推出一个场景?任何其他意思也是可以接受的。

编辑: 回到“BeforeScenario”可能也会有用。

3 个答案:

答案 0 :(得分:3)

我想说这是不可能的,但是像IT中的许多事情一样,如果你施加足够的压力,你可能会强迫它发挥作用。

相反,我会说SpecFlow肯定不是为了支持这一点而设计的。考虑通常参与运行测试的所有部分,

  • 主机,例如Visual Studio,构建过程(例如TeamCity代理)或仅仅是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允许您选择引擎模式,以便您可能只运行先前失败的测试,或者受代码更改影响的测试或两者(通过自定义规则)。

答案 1 :(得分:1)

如果您使用SpecFlow + Runner(AKA SpecRun),您可以在specflow测试失败时设置重试,然后跑步者将重新运行任何失败的测试。 SpecFlow + Runner是商业产品,尽管有评估版本。

答案 2 :(得分:0)

我100%同意Alski所说的一切,因为我觉得你将会逆着潮流游泳,试图以这种方式弯曲你的意志。

但是我也想提供一种替代解决方案,如果我遇到这个问题,我会尝试。我可能会检查AfterScenario中的测试失败,然后写出一个文件,其中包含失败的测试名称。然后在测试运行之后,如果文件存在,那么我将使用它再次重新运行单个失败的测试。

但是TeamCity仍然是我做这件事的第一选择。