You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Vishnu (JIRA)" <ji...@apache.org> on 2015/08/13 05:25:46 UTC

[jira] [Created] (MNG-5872) Maven results are wrong after rerun test cases by RetryListeners

Vishnu created MNG-5872:
---------------------------

             Summary: Maven results are wrong after rerun test cases by RetryListeners
                 Key: MNG-5872
                 URL: https://issues.apache.org/jira/browse/MNG-5872
             Project: Maven
          Issue Type: Bug
          Components: Errors
            Reporter: Vishnu


I am getting wrong result count after re-run the failed test case using RetryListener. 

Environment details:

Java,
Selenium with TestNG
Chrome browser
Maven mode execution
Total Running Test case : 1

Simulation:

1. Have added Listener class in TestNG and running test case using maven

        <listeners> 
           <listener class-name="<Package>.RetryListener" /> 
        </listeners> 

2. Made test case failed and it invoked failed test case and 2nd time, it got passed. The results would be as follows;

Expected Results ==> Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 (Correct) 

Actual Results ==> Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 (Wrong)

I've used below classes for Listeners and calling RetryListener class from TestNG.xml and executing them from Maven mode.

IRetryAnalyzer class:

public class RetryAnalyzer implements IRetryAnalyzer {

	private int retryCount = 0;
	private int retryMaxCount = 1;
	
	public RetryAnalyzer() {
		setCount(retryMaxCount);
	}

	 @Override
	  public boolean retry(ITestResult result) {
	    if (!result.isSuccess()) {
	      if (retryCount < retryMaxCount) {
	    	  retryCount++;
	        result.setStatus(ITestResult.SUCCESS);
	        String message = Thread.currentThread().getName() + ": Error in " + result.getName() + " Retrying "
	            + (retryMaxCount + 1 - retryCount) + " more time(s)";
	        System.out.println(message);
	        Reporter.log(message);
	        return true;
	      } else {
	        result.setStatus(ITestResult.FAILURE);
	      }
	    }
	    return false;
	  }
	
	public void setCount(int count) {
		retryMaxCount = count;
	}


RetryLister Class:

public class RetryListener implements IAnnotationTransformer {

	@SuppressWarnings("rawtypes")
	@Override
	public void transform(ITestAnnotation arg0, Class arg1, Constructor arg2,
			Method arg3) {
		IRetryAnalyzer retry = arg0.getRetryAnalyzer();
		if (retry == null) {
			arg0.setRetryAnalyzer(RetryAnalyzer.class);
		}
	}

	
	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 as dup:" + failedTestCase.getTestClass().toString());
	            failedTestCases.remove();
	        } else {

	            if (context.getPassedTests().getResults(method).size() > 0) {
	                System.out.println("failed test case remove as pass retry:" + failedTestCase.getTestClass().toString());
	                failedTestCases.remove();
	            }
	        }
	    }
	   }





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)