小黄瓜嵌套步骤的含义

问题描述 投票:0回答:2
我正在我的项目中编写 Gherkin 测试用例和 Java 步骤定义。我是小黄瓜新手,试图理解嵌套步骤的含义。您能帮我理解给出的第二个场景是否涉及嵌套步骤吗?

在我的示例中,我想在给定语句逻辑的第二个场景中重用第一个场景代码。是否有重用或重写逻辑的最佳方法? 注意:下面的例子只是为了解释我的问题。这可能不是一个好的小黄瓜。

Background: Given The application is opened Scenario: Successful Login Given the user name and password are entered When login button is clicked Then user login is successful Scenario: Add Address Successful Given user login is successful And Add Address button is clicked And user city, country are entered when Submit button is clicked
    
cucumber rest-assured gherkin cucumber-java
2个回答
4
投票
嵌套步骤是指在“主”步骤中调用已定义的步骤。在您的示例中,第一个场景具有登录功能,该功能将/可以用于需要用户登录的所有其他场景。

因此,第二个场景将有一个

Given

 步骤,该步骤调用第一个场景的登录操作/步骤。有多种方法可以做到这一点:

1. 如果您在同一个类中定义这些步骤,只需在不同的步骤/方法中调用相同的方法即可。

像这样:

public class TestStepsOne { // Steps from first scenario @Given("^the user name and password are entered$") public void enterUsernamePassword() throws Throwable { System.out.println("User and password entered"); } @When("^login button is clicked$") public void clickLoginButton() throws Throwable { System.out.println("Clicked login button"); } @Then("^user login is successful$") public void isLoggedIn() throws Throwable { System.out.println("Logged in!"); } // All together @Given("the user is logged in") public void loginSuccessfully() throws Throwable { enterUsernamePassword(); clickLoginButton(); isLoggedIn(); } }

现在您可以在任何场景中使用

Given the user is logged in

,它将执行登录操作。

2。使用 Picocontainer -> 详细信息这里

首先您需要将这些依赖项添加到您的pom.xml

<dependency> <groupId>org.picocontainer</groupId> <artifactId>picocontainer</artifactId> <version>2.15</version> </dependency> <dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-picocontainer</artifactId> <version>1.2.5</version> </dependency>

您可以分离步骤定义。

像这样:

public class TestStepsOne { // Same as above, without the nested one }

第二类:

public class TestStepsTwo { private final TestStepsOne testStepsOne; public TestStepsTwo(TestStepsOne testStepsOne) { this.testStepsOne = testStepsOne; } @Given("the user is logged in") public void loginSuccessfully() throws Throwable { testStepsOne.enterUsernamePassword(); testStepsOne.clickLoginButton(); testStepsOne.isLoggedIn(); } }

3.使用 cuke4duke

 -> 详细信息
此处,包括示例

像这样:

public class CallingSteps extends Steps { public CallingSteps(StepMother stepMother) { super(stepMother); } @When("^I call another step$") public void iCallAnotherStep() { Given("the user is logged in"); // This will call a step defined somewhere else. } }

希望这有帮助


0
投票
这些不就是子程序吗? 在这种情况下为什么要称它们为特殊的东西呢?

© www.soinside.com 2019 - 2024. All rights reserved.