Maven Surefire plugin did not rerun failed Cucumber tests
Asked Answered
N

1

8

I am using the Java implementation of Selenium WebDriver (version 2.53.0) to run some automated tests against a web application. The tests are written in Behaviour Driven Testing format using the Java implementation of Cucumber (version 1.2.3). I use Maven (version 3.3.9) to import all my dependencies and also to build and run the tests. The tests are organised into different categories using Cucumber tags. For example, I can run one category of tests tagged with @JohnnyBravo from the command line using the following commands:

cd path_to_Maven_POM_file
mvn clean test -Dcucumber.options="--tags @JohnnyBravo"

After doing some research, I found out that you can use the Maven SureFire plugin to rerun failed tests by adding "-Dsurefire.rerunFailingTestsCount=2" to the Maven command above according to this link. I then tried to rerun that category of tests using the command below while ensuring that some of them will definitely fail so as to see if they will be rerun or not:

mvn clean test -Dcucumber.options="--tags @JohnnyBravo" -Dsurefire.rerunFailingTestsCount=2

Unfortunately, the failed tests did not rerun. What am I doing wrong here ?

My POM file is shown below:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>regression-test</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <properties>
        <cucumber.version>1.2.3</cucumber.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.8.2</version>
        </dependency>

        <dependency>
            <groupId>net.sourceforge.jtds</groupId>
            <artifactId>jtds</artifactId>
            <version>1.3.1</version>
        </dependency>

        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-picocontainer</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-java</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>info.cukes</groupId>
            <artifactId>cucumber-junit</artifactId>
            <version>${cucumber.version}</version>
        </dependency>
        <dependency>
            <groupId>com.vimalselvam</groupId>
            <artifactId>cucumber-extentsreport</artifactId>
            <version>1.1.0</version>
        </dependency>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>2.53.0</version>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

        <dependency>
            <groupId>com.pojosontheweb</groupId>
            <artifactId>monte-repack</artifactId>
            <version>1.0.1</version>
        </dependency>

    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.18.1</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.18.1</version>
                <configuration>
                    <systemPropertyVariables>
                        <webdriver.chrome.driver>src/test/resources/chromedriver/chromedriver.exe</webdriver.chrome.driver>
                    </systemPropertyVariables>
                    <!--<testFailureIgnore>true</testFailureIgnore>-->
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

The Cucumber JUnit test runner class is shown below:

import com.cucumber.listener.ExtentCucumberFormatter;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
import org.junit.BeforeClass;
import org.junit.runner.RunWith;

import java.io.File;
import java.util.HashMap;

@RunWith(Cucumber.class)
@CucumberOptions(
        monochrome = false,
        plugin = {
                "pretty",
                "html:C:/Test_Output_Data/Results/HTML/",
                "json:C:/Test_Output_Data/Results/results.json",
                "com.cucumber.listener.ExtentCucumberFormatter"
        },
        features = {"src/test/resources/"},
        tags = {
                "@JohnnyBravo",
                //"@AgentUI", "@Smoke",
                //"@GenUI", "@Smoke",
                //"@GenUI", "@Regression",
        }
)
public class GeneralRunnerTest {

    @BeforeClass
    public static void setup() {
        ExtentCucumberFormatter.initiateExtentCucumberFormatter();
        ExtentCucumberFormatter.loadConfig(new File("src/test/resources/extent-config.xml"));

        ExtentCucumberFormatter.addSystemInfo("Browser Name", "Firefox");
        ExtentCucumberFormatter.addSystemInfo("Browser version", "46.0.1");
        ExtentCucumberFormatter.addSystemInfo("Selenium version", "2.53.0");

        HashMap<String, String> systemInfo = new HashMap<>();
        systemInfo.put("Cucumber Version", "1.2.3");
        systemInfo.put("Extent Cucumber Reporter Version", "1.1.0");
        ExtentCucumberFormatter.addSystemInfo(systemInfo);
    }
}
Niacin answered 8/7, 2016 at 11:15 Comment(2)
I see you have clean in your maven command. That will probably remove the run results to rerun from. Can you try without clean, e.g. mvn test ...?Careen
@mykola-gurov I tried running the command mvn test -Dcucumber.options="--tags @JohnnyBravo" but the failed test did not rerun.Niacin
C
0

Check if you are using the right version for your cucumber dependencies.

On the page for this feature on the surefire website, it says

Since of 2.21.0 the provider surefire-junit47 can rerun scenarios created by cucumber-jvm 2.0.0 and higher.

Also check if you're using the same junit provider that they've mentioned. I'm not sure which is the default provider.

Cellobiose answered 19/2, 2019 at 18:49 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.