如何重用Feature文件中的步骤/重复步骤定义/

时间:2017-09-25 08:02:41

标签: java cucumber gherkin cucumber-java

我在功能文件中有一些可重复的步骤(“我在登录表单上”和“点击登录按钮”)。测试失败,错误为Duplicate step definitions in Steps.LoginSteps。 有可能以某种方式重用重复的步骤吗?

Feature: LoginFeature

Scenario: Login with valid username and password
    Given I am on Login form
    And I enter valid username and password
    And click on login button
    Then I should see the main page


  Scenario: Login with invalid username and password
    Given  I am on Login form
    And I enter invalid email username and password
    And click on login button
    When modal error is displayed
    Then click on Ok button
    And I should see the login form 

2 个答案:

答案 0 :(得分:0)

所有步骤都是全局的,Cucumber将使用匹配正则表达式的方法。

这背后的逻辑是,如果你使用一种方法在两个或多个地方描述你想要的行为,你怎么能期望这种行为在不同的场景中有所不同?

您在登录步骤中提供了一个完美的示例。您是否希望仅仅因为您计划验证正面和负面案例而登录不同的登录页面?答案显然是否定的,因此不需要一步以上的实施。

您可能会发现接下来的事情是从另一个步骤调出一步的冲动。不要那样做。创建一个辅助方法,在这种情况下两个步骤都会调用。

在大多数情况下,我会尽量保持我的步骤,一两行。我通常直接委托给一个助手。这允许我改变抽象级别,并从转换参数转到与被测系统交互的步骤。

答案 1 :(得分:0)

您可以将Background用于同一功能中所有场景的常用步骤(目标是避免重复) 例如:

Feature: LoginFeature

Background:

Given I am on Login form

Scenario: Login with valid username and password

    And I enter valid username and password
    And click on login button
    Then I should see the main page


  Scenario: Login with invalid username and password

    And I enter invalid email username and password
    And click on login button
    When modal error is displayed
    Then click on Ok button
    And I should see the login form 

您还可以修改按钮单击的步骤以传递参数。通过这种方式,您只需按一下按钮即可在不同的场景中使用不同的参数(登录,确定等)。

示例:

Click on "login" button