Testng Retry失败用例重新运行的方法(二)

上一篇总结了下retry的基本使用方法,但是有一个问题,就是在报告中,一个用例统计了多次,对报告的数据统计造成了影响。为了消除这种影响,需要在listener类中做下改变。RetryListener.java使用继承TestListenerAdapter的方式实现,通过重载onFinish()方法,处理最后TestCase的Result,只统计一次执行结果。

package com.sso;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.Iterator;
import org.testng.IRetryAnalyzer;
import org.testng.ITestContext;
import org.testng.ITestNGMethod;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import org.testng.annotations.ITestAnnotation;

public class RetryListener extends TestListenerAdapter {
  @SuppressWarnings("rawtypes")
  public void transform(ITestAnnotation annotation, Class testClass,
      Constructor testConstructor, Method testMethod) {
    IRetryAnalyzer retry = annotation.getRetryAnalyzer();
    if (retry == null) {
      annotation.setRetryAnalyzer(TestngRetry.class);
    }
  }
  
    @Override
    public void onFinish(ITestContext testContext) {
        Iterator<ITestResult> listOfFailedTests = testContext.getFailedTests().getAllResults().iterator();
        while(listOfFailedTests.hasNext()){
            ITestResult failedTest = 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();
                }
            }
        }
    } 
}

其他类文件无变化,执行testng,得到结果:

[RemoteTestNG] detected TestNG version 6.14.3

===============================================
Suite
Total tests run: 1, Failures: 1, Skips: 0
===============================================

 

有一点需要提醒的是,Retry机制在遇到DataProvider的时候会失效,无法统计失败用例。

posted @ 2018-10-24 15:33  心笔轩  阅读(320)  评论(0编辑  收藏  举报