How to avoid Cucumber from recreating or refreshing the app context

My cucumber tests get the spring boot context refreshed on each pass, I have some database cache being done and it is killing the performance of the compilation process.

My abstract test is marked as @SpringBootTest(defined_port) with a @ContextConfiguration(loader=SpringBootContextLoader.class).

I already tried adding DirtiesContext but it did not work... any ideas?


  • If you are using the latest Cucumber (v5.7.0) to make Cucumber aware of your test configuration you can annotate a configuration class on your glue path with @CucumberContextConfiguration and with one of the following annotations: @ContextConfiguration, @ContextHierarchy or @BootstrapWith. If you are using SpringBoot, you can annotate configuration class with @SpringBootTest

    For example:

    import com.example.app;
    import org.springframework.boot.test.context.SpringBootTest;
    import io.cucumber.spring.CucumberContextConfiguration; 
    @SpringBootTest(classes = TestConfig.class) public class 
    CucumberSpringConfiguration { }

    You can then @Autowire components from the application context into any step definition file. No further spring configuration is needed. For example:

    package com.example.app;
    public class MyStepDefinitions { 
     private MyService myService;
     @Given("feed back is requested from my service")
     public void feed_back_is_requested(){ 

    The only requirement is that both MyStepDefinitions and CucumberSpringConfiguration are both in a package that is on the glue path. So either you have configured @CucumberOptions(glue="com.example") explicitly or your test runner class is in the same package as your step definition (com.example).

    You can find more information in the cucumber-spring module in github. https://github.com/cucumber/cucumber-jvm/tree/main/cucumber-spring