Execution Order of Hooks in Cucumber
In Cucumber, Hooks 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 type, execution order is determined by assigning an order value.
Execution Rule:
Lower order value means higher priority, so it runs first.
For
@Beforehooks: lower order runs firstFor
@Afterhooks: higher order runs first (reverse order of@Before)
Execution Flow:
| Hook Type | Order Value | Execution |
|---|---|---|
| @Before(order = 0) | Lower | Executes First |
| @Before(order = 1) | Higher | Executes After |
| @After(order = 1) | Lower | Executes Last |
| @After(order = 0) | Higher | Executes 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.
No comments:
Post a Comment