1、首先编写Java类实现IRetryAnalyzer接口
public class testNgRetry implements IRetryAnalyzer { public static Logger log = Logger.getLogger(testNgRetry.class); private static int maxRetryCount = 3; //这个是最大跑多少次 private int retryCount = 1; //设置1次 public boolean retry(ITestResult result) { // TODO Auto-generated method stub if(retryCount<=maxRetryCount){ //失败之后跑3次 String message = "Running retry for '" + result.getName() + "' on class " + this.getClass().getName() + " Retrying " + retryCount + " times"; log.info(message); Reporter.setCurrentTestResult(result); Reporter.log("RunCount="+(retryCount+1)); retryCount++; return true; } return false; } } |
2.编写重跑监听
public class RetryListener implements IAnnotationTransformer { public void transform(ITestAnnotation annotation, Class testClass,Constructor testConstructor, Method testMethod) { // TODO Auto-generated method stub IRetryAnalyzer retry = annotation.getRetryAnalyzer(); if (retry == null) { annotation.setRetryAnalyzer(testNgRetry.class); } } } |
testng.xml中加一个监听
<listener class-name="com.luray.testngsetting.RetryListener" />
解决办法就是重写onFinish
package com.luray.testngsetting; import java.util.Iterator; import org.apache.log4j.Logger; import org.testng.ITestContext; import org.testng.ITestNGMethod; import org.testng.ITestResult; import org.testng.TestListenerAdapter; 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 了
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。