关于使用testng的retry问题

  • Post author:
  • Post category:其他


总体是利用TestNG里面的IRetryAnalyzer、TestListenerAdapter接口来实现相关问题

1、定义一个自己的retryanalyzer

import org.testng.ITestResult;

import org.testng.util.RetryAnalyzerCount;

//这里集成自抽象类RetryAnalyzerCount,该抽象类实现了IRetryAnalyzer

public class TestRetryAnalyzer extends RetryAnalyzerCount{


public TestRetryAnalyzer(){

setCount(1);

}

@Override

public boolean retryMethod(ITestResult arg0) {

// TODO Auto-generated method stub

return true;

}

}

2、定义自己的监听器,集成自TestListenerAdapter

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import org.testng.IResultMap;

import org.testng.ITestContext;

import org.testng.ITestResult;

import org.testng.Reporter;

import org.testng.TestListenerAdapter;

import org.testng.ITestNGMethod;

import org.testng.collections.Lists;

import org.testng.collections.Objects;

public class RetryTestListener extends TestListenerAdapter {


private List<ITestNGMethod> m_allTestMethods =

Collections.synchronizedList(Lists.<ITestNGMethod>newArrayList());

private List<ITestResult> m_passedTests = Collections.synchronizedList(Lists.<ITestResult>newArrayList());

private List<ITestResult> m_failedTests = Collections.synchronizedList(Lists.<ITestResult>newArrayList());

private List<ITestResult> m_skippedTests = Collections.synchronizedList(Lists.<ITestResult>newArrayList());

private List<ITestResult> m_failedButWSPerTests = Collections.synchronizedList(Lists.<ITestResult>newArrayList());

private List<ITestContext> m_testContexts= Collections.synchronizedList(new ArrayList<ITestContext>());

private List<ITestResult> m_failedConfs= Collections.synchronizedList(Lists.<ITestResult>newArrayList());

private List<ITestResult> m_skippedConfs= Collections.synchronizedList(Lists.<ITestResult>newArrayList());

private List<ITestResult> m_passedConfs= Collections.synchronizedList(Lists.<ITestResult>newArrayList());

public synchronized void onTestFailure(ITestResult arg0) {


m_allTestMethods.add(arg0.getMethod());

m_failedTests.add(arg0);

}

@Override

public void onFinish(ITestContext context) {

for(int i=0;i<context.getAllTestMethods().length;i++){


System.out.println(“~~~~~~~~~~”+context.getAllTestMethods()[i].getCurrentInvocationCount());

if(context.getAllTestMethods()[i].getCurrentInvocationCount()==2){


System.out.println(“~~~~~~~~~~~~~~~~~”+context.getAllTestMethods()[i].getParameterInvocationCount());

System.out.println(context.getAllTestMethods()[i].ignoreMissingDependencies());

if (context.getFailedTests().getResults(context.getAllTestMethods()[i]).size() == 2 || context.getPassedTests().getResults(context.getAllTestMethods()[i]).size() == 1){

context.getFailedTests().removeResult(context.getAllTestMethods()[i]);

}

}

}

}



}

3、在测试申明中说明使用retry

@Test(retryAnalyzer = TestRetryAnalyzer.class)

4、加入一个我们自己的监听器

public class RetryTest {


public static void main(String args[]){


TestNG tng = new TestNG();

RetryTestListener rtl = new RetryTestListener();

XmlSuite xs = new XmlSuite();

Parser parser = new Parser(“./testxml/temp.xml”);

List<XmlSuite> suites = new ArrayList<XmlSuite>();

try {


suites = parser.parseToList();

} catch (ParserConfigurationException e) {


// TODO Auto-generated catch block

e.printStackTrace();

} catch (SAXException e) {


// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {


// TODO Auto-generated catch block

e.printStackTrace();

};

tng.setXmlSuites(suites);

tng.addListener(rtl);

tng.run();

} }

转载于:https://www.cnblogs.com/shenguo/p/3958225.html