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

本文关键字:报告 重新运行 失败 测试 使用 afterscenario Webdriver | 更新日期: 2023-09-27 18:02:20

在"AfterScenario"阶段,是否有可能重新运行刚刚失败的当前测试?据我所知,是游戏机。在AfterScenario期间的WriteLine出现在报告中,因此报告在"AfterScenario"之后生成。

ScenarioContext类可以检测场景是否失败。也许它也可以启动一个场景?任何其他方法都是可以接受的。

编辑:返回到"BeforeScenario"可能也可以。

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

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

所以我会说SpecFlow当然不是设计来支持这个。考虑运行测试中通常涉及的所有部分,

  • 主机,如Visual Studio,构建进程(如TeamCity Agent)或只是一个Cmd行。这些都通过调用;
  • 来启动测试。
  • 测试运行器。它可以是VS或Resharper测试运行程序,TeamCity Nunit运行程序,甚至只是Nunit .console.exe(或msTest等效程序)。这将加载您的测试dll并扫描它们的nunit/mstest [Test] ' [Setup] ' [TearDown]属性。

  • test dll包含SpecFlow插件生成的代码,并将nUnit属性映射到SpecFlow attributes。

我想你只考虑了最后一层,而没有考虑最上面的一层。因此,即使你以某种方式设法说服SpecFlow和nUnit/msTest再次运行这些测试,我认为你最终会在整个过程中出现错误,因为VisualStudio, Resharper, TeamCity Agents或CmdLine无法解析两次运行的相同测试。


或者,你为什么不看看优化的测试运行程序来解决你的问题呢?

  • TeamCity nUnit运行器可以首先运行上次失败的测试,因此您可以很快知道是否会再次失败。
  • NCrunch允许您选择引擎模式,这样您就可以只运行先前失败的测试,或者受代码更改影响的测试,或者两者都运行(通过自定义规则)。

如果您使用的是SpecFlow+ Runner(又名SpecRun),则可以为SpecFlow测试设置失败时的重试,然后Runner将重新运行任何失败的测试。SpecFlow+ Runner是一个商业产品,尽管有一个可用的评估版本。

我100%同意Alski所说的一切,因为我觉得您将以这种方式逆潮流而动,试图使specflow服从您的意愿。

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

但TeamCity仍然是我做这件事的首选。