trivago / cucable-plugin

Maven plugin that simplifies running Cucumber scenarios in parallel.
Apache License 2.0
115 stars 42 forks source link

How to avoid running the java template file? #116

Closed murali4624 closed 5 years ago

murali4624 commented 5 years ago

Following is my cucumber template java file.

package some.template;

import cucumber.api.CucumberOptions; //import cucumber.api.junit.Cucumber; import cucumber.api.testng.CucumberFeatureWrapper; import cucumber.api.testng.PickleEventWrapper; import cucumber.api.testng.TestNGCucumberRunner; //import org.junit.runner.RunWith; import org.testng.IRetryAnalyzer; import org.testng.ITestResult; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.DataProvider; import org.testng.annotations.Test;

//@RunWith(Cucumber.class) @CucumberOptions( glue = "com.fifa.stepdefs", features = {"target/parallel/features/[CUCABLE:FEATURE].feature"}, plugin = {"json:target/cucumber-report/[CUCABLE:RUNNER].json"} )

public class CucableJavaTemplate implements IRetryAnalyzer {

private int count = 0;
private static int maxTry = 3;

@Override
public boolean retry(ITestResult iTestResult) {
    if (!iTestResult.isSuccess()) {  ;//Check if test not succeed
        if (count < maxTry) {                            //Check if maxtry count is reached
            count++;                                    //Increase the maxTry count by 1
            iTestResult.setStatus(ITestResult.FAILURE);  //Mark test as failed
            return true;                                 //Tells TestNG to re-run the test
        } else {
            iTestResult.setStatus(ITestResult.FAILURE);  //If maxCount reached,test marked as failed
        }
    } else {
        iTestResult.setStatus(ITestResult.SUCCESS);      //If test passes, TestNG marks it as passed
    }
    return false;
}
private TestNGCucumberRunner testNGCucumberRunner;

@BeforeClass(alwaysRun = true)
public void setUpClass() throws Exception {
    System.out.println("Before Scenario ****");
    testNGCucumberRunner = new TestNGCucumberRunner(this.getClass());
}

@Test(groups = "cucumber", description = "Runs Cucumber Scenarios", dataProvider = "scenarios",retryAnalyzer = CucableJavaTemplate.class)
public void scenario(PickleEventWrapper pickleEvent, CucumberFeatureWrapper cucumberFeature) throws Throwable {
    testNGCucumberRunner.runScenario(pickleEvent.getPickleEvent());
}

@DataProvider
public Object[][] scenarios() {
    return testNGCucumberRunner.provideScenarios();
}

@AfterClass(alwaysRun = true)
public void tearDownClass() throws Exception {
    System.out.println("After Scenario ****");
    testNGCucumberRunner.finish();
}

} When I run mvn clean verify, the following happens:

Scenario in feature files are broken into multiple scenarios and individual runners are generated and Tests are run.

But before the actual tests are run, cucumber-testng also tries to run '[CUCABLE:FEATURE].feature' and fails with error:

Configuring TestNG with: .org.apache.maven.surefire.testng.conf.TestNG652Configurator@725bef66 [Utils] [ERROR] [Error] java.lang.IllegalArgumentException: Not a file or directory: /projectpath/target/parallel/features/[CUCABLE:FEATURE].feature

How can I avoid running the '[CUCABLE:FEATURE].feature'?

murali4624 commented 5 years ago
<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
            <skipTests>true</skipTests>
        </configuration>
    </plugin>

I think I figured this out. Added the above plugin and those tests are skipped.