testng - Rerunning Selenium tests make Maven build fail -


we have set of ui tests run nightly, , of tests fail due network glitches. avoid false-negative test results, used irtetryanalyzer re-runs failed tests upto 3 times.

it works when run tests eclispe right-clicking on suite.xml - if test fails @ first passes when retried, first result not counted failure.

but when running same tests part of maven build, build fails if of tests fail, if pass @ retry.

for example, running suite of 5 tests 1 fails @ first passes on second attempt gives me output when run testng suite:

total tests run: 5, failures: 0, skips: 0

but maven, result different:

tests run: 6, failures: 1, errors: 0, skipped: 0

is there way make maven not count rerun tests failure?

finally got it. use code:

listenerapadter:

public class mytestlisteneradapter extends testlisteneradapter {     @override     public void ontestfailure(itestresult result) {         if (result.getmethod().getretryanalyzer() != null) {             myretryanalyzer retryanalyzer = (myretryanalyzer)result.getmethod().getretryanalyzer();              if(retryanalyzer.isretryavailable()) {                 result.setstatus(itestresult.skip);             } else {                 result.setstatus(itestresult.failure);             }             reporter.setcurrenttestresult(result);         }     }     @overrride    public void onfinish(itestcontext context) {      iterator<itestresult> failedtestcases =context.getfailedtests().getallresults().iterator();     while (failedtestcases.hasnext()) {         system.out.println("failedtestcases");         itestresult failedtestcase = failedtestcases.next();         itestngmethod method = failedtestcase.getmethod();         if (context.getfailedtests().getresults(method).size() > 1) {             system.out.println("failed test case remove dup:" + failedtestcase.gettestclass().tostring());             failedtestcases.remove();         } else {              if (context.getpassedtests().getresults(method).size() > 0) {                 system.out.println("failed test case remove pass retry:" + failedtestcase.gettestclass().tostring());                 failedtestcases.remove();             }         }     }    } } 

retryanalizer:

public class myretryanalyzer implements iretryanalyzer {     private static int max_retry_count = 3;      atomicinteger count = new atomicinteger(max_retry_count);      public boolean isretryavailable() {         return (count.intvalue() > 0);     }      @override     public boolean retry(itestresult result) {         boolean retry = false;         if (isretryavailable()) {             system.out.println("going retry test case: " + result.getmethod() + ", " + (max_retry_count - count.intvalue() + 1) + " out of " + max_retry_count);             retry = true;             count.decrementandget();         }         return retry;     } } 

pom.xml -> surefire configuration:

this should configure "overwrite" surefire listener wich has own counters.

<plugin>   <groupid>org.apache.maven.plugins</groupid>   <artifactid>maven-surefire-plugin</artifactid>   <version>2.18.1</version>   <configuration>     <suitexmlfiles><suitexmlfile>${basedir}/testng.xml</suitexmlfile></suitexmlfiles>  <properties>     <property>     <name>listener</name>     <value>utils.mytestlisteneradapter,utils.myretryanalizer</value>    </property>  </properties> 


Comments