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();
    } }

  • 相关阅读:
    一张图片入门Python
    4.1. 如何在Windows环境下开发Python
    你必须知道的EF知识和经验
    XUnit的使用
    如何使用NUnit
    Entity Framework 不支持DefaultValue
    Have You Ever Wondered About the Difference Between NOT NULL and DEFAULT?
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Entity Framework 与多线程
    sqlite中的自增主键
  • 原文地址:https://www.cnblogs.com/shenguo/p/3958225.html
Copyright © 2011-2022 走看看