Search code examples
cucumberhookexecution

How to define the execution order of cucumber Test Cases


I want to have two different scenarios in the same feature. The thing is that Scenario 1 needs to be executed before Scenario 2. I have seen that this can be achieved through cucumber Hooks but when digging in the explanations, there's no concrete cucumber implementation in the examples I have found.

How can I get Scenario 1 executed before Scenario 2?

The feature file is like this:

@Events @InsertExhPlan @DelExhPln
Feature: Insert an Exh Plan and then delete it

  @InsertExhPlan
  Scenario: Add a new ExhPlan
    Given I login as admin
    And I go to automated test
    When I go to ExhPlan section
    And Insert a new exh plan
    Then The exh plan is listed

  @DeleteExhPlan
  Scenario: Delete an Exh Plan
    Given I login as admin 
    And Open the automatized tests edition
    When I go to the exh plan section 
    And The new exh plan is deleted
    Then The new exhibitor plan is deleted

The Hooks file is:

package com.barrabes.utilities;

import cucumber.api.java.After;
import cucumber.api.java.Before;

import static com.aura.steps.rest.ParentRestStep.logger;

public class Hooks {

    @Before(order=1)
    public void beforeScenario(){
        logger.info("================This will run before every Scenario================");
    }
    @Before(order=0)
    public void beforeScenarioStart(){
        logger.info("-----------------Start of Scenario-----------------");
    }

    @After(order=0)
    public void afterScenarioFinish(){
        logger.info("-----------------End of Scenario-----------------");
    }
    @After(order=1)
    public void afterScenario(){
        logger.info("================This will run after  every Scenario================");
    }

}

The order is now as it should be but I don't see how does the Hooks file control exection order.


Solution

  • You don't use Hooks for that purpose. Hooks are used for code that you need to run before and/or after tests, and/or before and/of after test suites; not to control the order of features and/or scenarios.

    Cucumber scenarios are executed top to bottom. For the example you showed there, Scenario: Add a new ExhPlan will execute before Scenario: Delete an Exh Plan if you pass the tag @Events in the test runner. Also, you should not have the scenario tags at the feature level. So, you should remove @InsertExhPlan and @DelExhPln at the Feature level. Alternatively, you could pass a comma-separated list of scenario tags to the test runner in the order you want. For example, if you need to run scenario 2 before scenario 1, you would pass the tags for the corresponding scenarios in the order you wish them to be executed. Moreover, you can do this as well from your CI environment. For example, you can have Jenkins jobs that execute the tasks in a specific order by passing the scenario tags in that order. And, if you wish to be run in the default order, simply you can pass the feature tag.

    About Hooks, this should be for code that needs to be run for all features and scenarios. For specific stuff you need to run for a particular feature, you need to use Background in the Cucumber file. Background block is run before each scenario in a given feature file.