zoukankan      html  css  js  c++  java
  • 关于使用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();
    } }

  • 相关阅读:
    DeepLearning.aiWeek1Convolution+model++Application
    搭建自己的git服务器
    Deep Neural Networks for Object Detection(翻译)
    VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGESCALE IMAGE RECOGNTION(翻译)
    windows 10下sublime text3环境的搭建以及配置python开发环境
    DeepLearning.aiWeek2Residual Networks
    DeepLearning.aiWeek4Deep Learning & Art: Neural Style Transfer
    同步&异步+阻塞&非阻塞(理解)
    VGGNet学习——实践
    Realtime MultiPerson 2D Pose Estimation using Part Affinity Fields(理解)
  • 原文地址:https://www.cnblogs.com/shenguo/p/3958225.html
Copyright © 2011-2022 走看看