【问题标题】:Webdriver, use "AfterScenario" to rerun failed test before report is generatedWebdriver,在生成报告之前使用“AfterScenario”重新运行失败的测试
【发布时间】:2015-10-01 12:26:48
【问题描述】:

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

ScenarioContext 类可以检测 Scenario 是否失败。也许它也可以启动一个场景?任何其他方式也可以这样做。

编辑: 回到“BeforeScenario”可能也可以。

【问题讨论】:

  • 我要问你为什么要这样做?
  • 重新运行失败的测试是在测试失败时手动完成的事情。最好是自动完成。

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


【解决方案1】:

我想说这是不可能的,但就像 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 允许您选择引擎模式,这样您就可以只运行之前失败的测试,或受您的代码更改影响的测试或两者(通过自定义规则)。

【讨论】:

  • 这两个很好的建议,我觉得 OP 不太可能让 specflow 做到这一点。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      相关资源
      最近更新 更多