Execution Order of Hooks

  

Execution Order of Hooks in Cucumber

In CucumberHooks allow us to run blocks of code at specific points in the test execution cycle. They help in setting up and tearing down test environments.

You can define multiple hooks using annotations like @Before@After, etc. When there are multiple hooks of the same typeexecution order is determined by assigning an order value.


Execution Rule:

  • Lower order value means higher priority, so it runs first.

  • For @Before hooks: lower order runs first

  • For @After hooks: higher order runs first (reverse order of @Before)



Execution Flow:

Hook TypeOrder ValueExecution
@Before(order = 0)LowerExecutes First
@Before(order = 1)HigherExecutes After
@After(order = 1)LowerExecutes Last
@After(order = 0)HigherExecutes Before


Code Example: Hook Execution Order in Cucumber (Java)

Hooks.java

package stepDefinitions;

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

public class Hooks {

    @Before(order = 0)
    public void beforeHookOrder0() {
        System.out.println("Before Hook - Order 0");
    }

    @Before(order = 1)
    public void beforeHookOrder1() {
        System.out.println("Before Hook - Order 1");
    }

    @After(order = 1)
    public void afterHookOrder1() {
        System.out.println("After Hook - Order 1");
    }

    @After(order = 0)
    public void afterHookOrder0() {
        System.out.println("After Hook - Order 0");
    }
}




Feature: HookDemo.feature

Feature: Hook Order Demo

  Scenario: Check the order of hook execution
    Given This is a test step




StepDefinitions.java

package stepDefinitions;

import io.cucumber.java.en.Given;

public class StepDefinitions {

    @Given("This is a test step")
    public void this_is_a_test_step() {
        System.out.println("Executing Test Step");
    }
}




Console Output:

Before Hook - Order 0
Before Hook - Order 1
Executing Test Step
After Hook - Order 0
After Hook - Order 1




Important Points:

Hooks are used for setup (@Before) and teardown (@After) logic.
Use order to control the sequence.
@Before hooks run in ascending order.
@After hooks run in descending order.