上一篇总结了下retry的基本使用方法,但是有一个问题,就是在报告中,一个用例统计了多次,对报告的数据统计造成了影响。为了消除这种影响,需要在listener类中做下改变。RetryListener.java使用继承TestListenerAdapter的方式实现,通过重载onFinish()方法,处理最后TestCase的Result,只统计一次执行结果。
package com.sso; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.Iterator; import org.testng.IRetryAnalyzer; import org.testng.ITestContext; import org.testng.ITestNGMethod; import org.testng.ITestResult; import org.testng.TestListenerAdapter; import org.testng.annotations.ITestAnnotation; public class RetryListener extends TestListenerAdapter { @SuppressWarnings("rawtypes") public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { IRetryAnalyzer retry = annotation.getRetryAnalyzer(); if (retry == null) { annotation.setRetryAnalyzer(TestngRetry.class); } } @Override public void onFinish(ITestContext testContext) { Iterator<ITestResult> listOfFailedTests = testContext.getFailedTests().getAllResults().iterator(); while(listOfFailedTests.hasNext()){ ITestResult failedTest = listOfFailedTests.next(); ITestNGMethod method = failedTest.getMethod(); if(testContext.getFailedTests().getResults(method).size()>1){ listOfFailedTests.remove(); }else{ if(testContext.getPassedTests().getResults(method).size()>0){ listOfFailedTests.remove(); } } } } }
其他类文件无变化,执行testng,得到结果:
[RemoteTestNG] detected TestNG version 6.14.3 =============================================== Suite Total tests run: 1, Failures: 1, Skips: 0 ===============================================
有一点需要提醒的是,Retry机制在遇到DataProvider的时候会失效,无法统计失败用例。