【问题标题】:Execute Scenario Outline in a feature file only if previous one passes仅当前一个通过时才在功能文件中执行场景大纲
【发布时间】:2019-10-03 21:02:48
【问题描述】:

我正在使用一个 Cucumber 功能文件,其中包含两个使用 Scenario Outline 的场景。有没有办法执行第二个场景大纲,只有第一个通过?场景大纲:测试 1 失败,然后场景大纲:测试 2 永远不会执行。

我想知道是否有一些标签可以像 @BeforeTest 一样工作,我可以在 Scenario Outline: Test 2 之前应用它们。但后来我必须找到一种方法来监听场景大纲中的失败:测试 1

特征文件的结构如下:

 Scenario Outline: Test 1
 Given i run test one
 When test one passes 
 Then run test 2

 Scenario Outline: Test 2
 Given test one passes
 When i run test two successfully
 Then both tests pass

谢谢!

【问题讨论】:

  • 你找到解决办法了吗?

标签: cucumber bdd scenarios cucumber-serenity


【解决方案1】:

不推荐/不支持。

来自Cucumber FAQ

“每个场景都应该测试一件事并由于一个特定原因而失败。这意味着没有理由跳过步骤。

如果您确实希望有条件地跳过步骤,那么您可能有一个反模式。例如,您可能试图在一个场景中测试多个事物,或者您可能无法控制测试环境或测试数据的状态。

最好的办法是解决根本原因。”

【讨论】:

  • 您发布的所有内容都是真实的,这正是我的测试结构。每个场景大纲都是一个单独的测试。在许多情况下,当测试的功能相关时,放置两个或多个场景大纲是有意义的。但我想要实现的是节省测试执行时间。对我来说,在功能文件中运行 Scenario Outlines 2 或 Scenario Outlines n 是没有意义的,因为知道 Scenario Outlines 1 失败,这将使 Scenario Outlines 2..n 也失败。在这种情况下,我可以保存测试执行时间,这是我的主要目标。
  • 每个场景大纲本质上都是一个单独的测试。如果场景 1 失败,意味着场景 2 等也会失败,它们的附加值是多少?
  • 是的,我的功能文件的结构是逐页和 e2e 测试。虽然每个场景大纲 (SO) 都是一个单独的测试,但与该应用程序的该页面或模块相关的所有 SO 都放在同一个功能文件中。这种方法的价值正是我在这里要问的,如果我知道所有测试的通用流程在以前的执行中失败,我可以通过不运行其余的 SO 来节省执行时间。因此,实现这一点的一种方法是将每个 SO 测试结果写入一个文件并在运行下一个之前读取它,但如果框架支持它会很棒。
  • 除了 Cucumber 是一个固执己见的框架,并且认为您的测试应该是独立的。
  • 嗯,我没有关注你的最后评论。根据定义: Scenario Outline 关键字可用于多次运行相同的 Scenario,具有不同的值组合。参考:cucumber.io/docs/gherkin/reference/#scenario-outline
猜你喜欢
  • 1970-01-01
  • 2018-09-22
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多