Before and After Hooks in Cucumber

  

In Cucumber@Before and @After hooks are setup and teardown methods that are executed before and after each scenario, respectively. These are used for preconditions and postconditions, such as initializing and quitting browsers, setting up test data, or cleaning resources.


Purpose of @Before and @After Hooks

HookPurpose
@BeforeRuns before each scenario — used for setup tasks
@AfterRuns after each scenario — used for cleanup tasks

Example Use Cases:

  • Open browser before each test (@Before)

  • Delete cookies or close browser after each test (@After)

  • Start a database transaction before a test and rollback after



Code Example



Feature File: login.feature

Feature: Login Functionality

  Scenario: Valid login
    Given user is on login page
    When user enters valid credentials
    Then user should be redirected to dashboard




Step Definition: StepDefinitions.java

package stepDefinitions;

import io.cucumber.java.en.*;

public class StepDefinitions {

    @Given("user is on login page")
    public void user_is_on_login_page() {
        System.out.println("Navigated to login page");
    }

    @When("user enters valid credentials")
    public void user_enters_valid_credentials() {
        System.out.println("Entered username and password");
    }

    @Then("user should be redirected to dashboard")
    public void user_should_be_redirected_to_dashboard() {
        System.out.println("Redirected to dashboard");
    }
}




Hooks Class: Hooks.java

package hooks;

import io.cucumber.java.Before;
import io.cucumber.java.After;

public class Hooks {

    @Before
    public void setUp() {
        System.out.println("Launching browser and initializing test setup");
    }

    @After
    public void tearDown() {
        System.out.println("Closing browser and cleaning up");
    }
}




Test Runner: TestRunner.java

package runners;

import org.junit.runner.RunWith;
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;

@RunWith(Cucumber.class)
@CucumberOptions(
    features = "src/test/java/features",
    glue = {"stepDefinitions", "hooks"}
)
public class TestRunner {}




Output

Launching browser and initializing test setup
Navigated to login page
Entered username and password
Redirected to dashboard
Closing browser and cleaning up




Important Points:

You can define multiple @Before or @After hooks with order to control execution sequence:

@Before(order = 1)
public void setUpDB() { }

@Before(order = 2)
public void setUpBrowser() { }

You can also use Tagged Hooks to run only for specific scenarios. (example: @Before("@SmokeTest"))

No comments:

Post a Comment