当前位置: 首页 > 知识库问答 >
问题:

Cucumber:如何跳过一个步骤并继续场景(Java,JUnit)

郭阳泽
2023-03-14

我有一个如下结构的场景:

Scenario Outline: Sections displayed on login
  Given Robert is at the home page
  When Robert logs in as "<role>"
  Then the "<section1>" should be displayed
  And the "<section2>" should be displayed

  Examples:
  | email         | section1       | section2  |
  | Administrator | Administration | Profile   |
  | External      | IGNORED        | Profile   |

如您所见,在第二个示例中有一个参数“被忽略”。如果我在运行时检测到这个关键字,我希望跳过出现关键字的步骤。

目前我使用这个:

@Then("the {string} should be displayed")
public void the_section_should_be_displayed(String sectionName) {
   if(sectionName.contentEquals("IGNORED"))
       return;

   // rest of code
}

如果存在IGNORED关键字,则此步骤将设置为PASSED。相反,我想要的是将这单个步骤标记为SKIPPED,并且仍然执行以下步骤,然后根据其他步骤的状态将完整的测试场景标记为PASSED或FAILED。

所以我的问题是:

有没有办法手动将 Cucumber 步骤设置为“已跳过”状态,而无需跳过方案的其余部分?

我知道我可以简单地创建两个场景,每个角色一个。但我目前别无选择。我无法更改功能文件中的任何内容,需要用代码解决这个问题。所以如果可以的话,请尝试回答这个问题。我感谢任何帮助!

共有1个答案

汪博艺
2023-03-14

请考虑创建一个跳过此步骤的单独方案,而不是向步骤定义添加逻辑。我假设“第1节”与“外部”的角色无关是有原因的吗?在具有不同名称的不同方案中捕获它被认为是一种很好的做法。请记住,功能文件的目标是描述系统的预期行为。在这里使用2种不同的场景,可以指定不同角色的行为差异。

例如,如下所示:

Scenario Outline: Admin section is visible to Admin
  Given Robert is at the home page
  When Robert logs in as Administrator
  Then the Administration section should be displayed
  And the Profile section should be displayed

Scenario Outline: Relevant sections are visible to External
  Given Robert is at the home page
  When Robert logs in as External
  Then the Profile section should be displayed

或者,如果您想检查特定部分是否显示,您可以这样做,并使用步骤定义根据提供的值检查部分是否显示:

Scenario Outline: Sections displayed on login
  Given Robert is at the home page
  When Robert logs in as "<role>"
  Then the admin section "<admin>" be displayed
  And the "<section2>" should be displayed

  Examples:
  | email         | admin       | section2  |
  | Administrator | should      | Profile   |
  | External      | should not  | Profile   |

(我的例子可能不正确,小cucumber,但应该给你一个想法)

 类似资料:
  • 我已经在Cucumber中有了我的特性文件,并且正在使用Given,When,Then语法(Gherkin)在其中编写我的场景,并在步骤定义文件中有相应的步骤。我有一个场景,我正在检查特定数据集是否存在(这是我给定步骤的一部分),然后继续执行“然后”、“和”等的下一步,但如果不存在,则应跳过其余步骤并退出步骤定义文件,而不会使场景失败。有人能告诉我cucumber是否支持这一点吗?如果是,最好的方

  • cucumber场景使用JUnit运行。 我有一个用例,需要根据Jira票据的状态跳过特定的Cumber场景。然后,我需要将该场景标记为在html报告中传递。 我可以使用PendingException()或AssumptionViolatedException()轻松跳过场景,两者都可以正常跳过场景执行并将步骤标记为跳过。但是场景本身将被标记为失败,我希望它被通过。 无论如何,我可以做到这一点?

  • 我目前有一个项目,里面有一大堆cucumber。特征文件,其中许多场景都被破坏。这些场景用< code>@broken标记,我们通过用< code>-t ~@broken执行cucumber来避免运行它们。不幸的是,当我们检查cucumber输出时,这些场景实际上是不可见的。它们不会显示为通过、失败或跳过。我想要的是在cucumber输出中包含这些场景的计数。它们应该显示为“跳过的”测试,而不是根

  • 我试图用Cucumber在我的selenium项目中实现一种软断言。 什么触发计数器,如何手动标记JUnit失败而不引发AssertionError? 或者,是否有一个Cucumber选项,我可以添加到运行器中,以便不停止失败的测试?我希望至少在cucumber报告中有预期和实际结果的失败。

  • 我将硒与cucumber一起使用(使用JAVA,但不太相关) 假设我有以下场景: 功能:示例功能 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,用户按“登录”,然后执行操作A 场景:在网站上执行操作A给定网站已打开,用户输入正确的登录名并传入字段,然后用户按“登录”,然后执行操作B 现在,将有数百个场景,网站总是需要登录到网站,所以我假设对于每个测试场景,我必须重复登录步

  • 无论chunk是新的还是重复的用例1,没有这两项,如果在Writer中第二个事务失败,我希望回滚第一个事务,而不手动执行回滚和提交。因此,如果写抛出异常,它将自动回滚第一个事务。这很好。但我想要的是,即使有异常和事务回滚(对于那个块),我也希望以相同的方式、相同的行为继续下一个块,依此类推到最后一个块。 为了实现用例1,我想我必须将步骤配置为: 我的工作没有安排。当当前工作完成时,我手动开始下一个