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
| Hook | Purpose |
|---|---|
| @Before | Runs before each scenario — used for setup tasks |
| @After | Runs 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
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"))