• 关于使用testng的retry问题


    总体是利用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();
    } }

  • 相关阅读:
    Ubuntu14.04+cuda 7.5+cudnn_v4+tensorflow安装
    error C2275: “XXX”: 将此类型用作表达式非法
    DLL调试方法
    OpenCV ——双线性插值(Bilinear interpolation)
    OpenCV ——背景建模之CodeBook(2)
    OpenCV ——背景建模之CodeBook(1)
    OpenCV——GMM混合高斯模型
    OpenCV——运用于pixels war游戏
    【SpringSecurityOAuth2】源码分析@EnableOAuth2Sso在Spring Security OAuth2 SSO单点登录场景下的作用
    【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程
  • 原文地址:https://www.cnblogs.com/shenguo/p/3958225.html
Copyright © 2020-2023  润新知