TestNG 中失敗用例重跑機制


1、首先編寫Java類實現IRetryAnalyzer接口

public class OverrideRetry implements IRetryAnalyzer {
private int count = 1;
private int max_count = 3;

@Override
public boolean retry(ITestResult result) {
System.out.println("執行用例:"+result.getName()+",第"+count+"次失敗");
if (count < max_count) {
count++;
return true;
}
return false;
}
}

 

2.編寫重跑監聽

public class RetryListener implements IAnnotationTransformer {

public void transform(ITestAnnotation annotation, Class testClass,Constructor testConstructor, Method testMethod) {

IRetryAnalyzer retry = annotation.getRetryAnalyzer();
if (retry == null) {
annotation.setRetryAnalyzer(OverrideRetry .class);  // 這個類名一定要和上方的對上

}
}
}

 

 

testng.xml中加一個監聽

   

<listeners>
<listener class-name="com.traapi.request.Teacher.RetryListener ">
</listener>
</listeners>
<test name="test">
<classes>
<class name="com.traapi.request.Teacher.RetryTest">
<methods>
<include name="test1"/>
<include name="test2"/>
</methods>
</class>
</classes>
</test>

已上 就 可以 實現失敗重跑了,但是,用例重跑之后,失敗的結果也記錄在運行結果中了,測試結果中運行的用例數增加了,不利於我們查看測試結果。因此,我們還需要把重復的用例去掉。 

 

 

解決辦法就是重寫onFinish

   

public class TestngListener extends TestListenerAdapter {
    private static Logger logger = Logger.getLogger(TestngListener.class);

@Override
public void onTestFailure(ITestResult tr) {
super.onTestFailure(tr);
logger.info(tr.getName() + " Failure");
}

@Override
public void onTestSkipped(ITestResult tr) {
super.onTestSkipped(tr);
logger.info(tr.getName() + " Skipped");
}

@Override
public void onTestSuccess(ITestResult tr) {
super.onTestSuccess(tr);
logger.info(tr.getName() + " Success");
}

@Override
public void onTestStart(ITestResult tr) {
super.onTestStart(tr);
logger.info(tr.getName() + " Start");
}

@Override
public void onFinish(ITestContext testContext) {
super.onFinish(testContext);
Iterator<ITestResult> listOfFailedTests = testContext.getFailedTests().getAllResults().iterator();
while (listOfFailedTests.hasNext()) {
ITestResult failedTest = (ITestResult) 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();
}

}
}
}
}

重新添加監聽

<suite name="Suite1" verbose="1">
<test name="CheckName">
<classes>
<class name="com.luray.testsuite.CheckStockList" />
</classes>
</test>
<listeners>
<listener class-name="com.luray.testngsetting.RetryListener" />
<listener class-name="com.luray.testngsetting.TestngListener" />
<listener class-name="org.uncommons.reportng.HTMLReporter" />
<listener class-name="org.uncommons.reportng.JUnitXMLReporter" />
</listeners>

</suite>

這次就只記錄最后一次結果了

Ok  了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM