What are Hooks in Cucumber?

  

What are Hooks in Cucumber?

Hooks in Cucumber are blocks of code that run before or after each scenario or step in your test suite. They are used to setup and teardown test environments. Hooks are written in the Step Definition file using annotations like:

  • @Before

  • @After

  • @BeforeStep

  • @AfterStep


These come from io.cucumber.java, and are similar to setup and teardown methods in testing frameworks like JUnit or TestNG.


Why Use Hooks?

Hooks are useful for:

  • Launching a browser before each test

  • Logging into a system

  • Setting up test data

  • Cleaning up after test execution

  • Capturing screenshots on failure


Types of Hooks

HookDescription
@BeforeRuns before each scenario
@AfterRuns after each scenario
@BeforeStepRuns before each step (rarely used)
@AfterStepRuns after each step (example: take screenshot)


Hook Execution Order

You can control the order using the order parameter:

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

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

Lower order values run first.


Example: Cucumber Hooks in Java

1. Feature File:

Feature: Login Feature

  Scenario: Successful login
    Given user is on login page
    When user enters valid credentials
    Then user is redirected to home page




2. Step Definition File (LoginSteps.java):

package stepdefinitions;

import io.cucumber.java.en.*;

public class LoginSteps {

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

    @When("user enters valid credentials")
    public void user_enters_valid_credentials() {
        System.out.println("User enters valid credentials");
    }

    @Then("user is redirected to home page")
    public void user_is_redirected_to_home_page() {
        System.out.println("User is redirected to home page");
    }
}




3. Hook File (Hooks.java):

package stepdefinitions;

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

public class Hooks {

    @Before
    public void beforeScenario() {
        System.out.println("==== Launching browser before scenario ====");
    }

    @After
    public void afterScenario() {
        System.out.println("==== Closing browser after scenario ====");
    }
}



Output:

==== Launching browser before scenario ====
User is on login page
User enters valid credentials
User is redirected to home page
==== Closing browser after scenario ====

No comments:

Post a Comment