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

Testng是Java自动化测试的一个框架,它提供了一个对失败用例重新执行的监听器,即接口 - IRetryAnalyzer。

先准备一个测试类:

import org.testng.annotations.Test;

import static org.testng.Assert.assertTrue;

public class ITTest {
  @Test
  public void f() {
	  assertTrue(false);

  }
}

 测试类包含一个@Test方法,执行会失败。

另外,我们添加2个Java类。第一个,TestngRetry.java。该类实现了接口 IRetryAnalyzer,定义了retry的最大次数,当未达到retry最大数时,返回true;如果达到retry最大数,则返回false,停止retry。

import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;

public class TestngRetry implements IRetryAnalyzer {

    private int count = 1;
    private int maxRetryCount = 3;
    
	public boolean retry(ITestResult result) {
		// TODO Auto-generated method stub
        if(count <= maxRetryCount){
        	
            result.setAttribute("RETRY", new Integer(count));
            count++;
            return true;
        }
        return false;
    }
}

 接下来,添加监听器RetryListener.java,实现接口IAnnotationTransformer。

package com.sso;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.testng.IRetryAnalyzer;
import org.testng.annotations.ITestAnnotation;
import org.testng.internal.annotations.IAnnotationTransformer;

public class RetryListener implements IAnnotationTransformer {
	@SuppressWarnings("rawtypes")
	public void transform(ITestAnnotation annotation, Class testClass,
			Constructor testConstructor, Method testMethod) {
		IRetryAnalyzer retry = annotation.getRetryAnalyzer();
		if (retry == null) {
			annotation.setRetryAnalyzer(TestngRetry.class);
		}
	}
	
    
}

 然后,在testng.xml中添加listener,如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
  <test thread-count="3" name="Test">
        <classes>
          <class name="com.sso.ITTest" />
        </classes>
  </test> <!-- Test -->
  
     <listeners>
        <listener class-name="com.sso.RetryListener" />
    </listeners>
</suite> <!-- Suite -->

运行testng,得到结果:

[RemoteTestNG] detected TestNG version 6.14.3

===============================================
Suite
Total tests run: 4, Failures: 1, Skips: 3
===============================================

 用例一共重复执行3次,加上第一次的执行,共执行4次。重复执行后,失败的用例被标记成了Skip。

另外,除了在testng.xml添加listener,还有2种方式添加listener,其一是在通过@Listeners注释,如:

import org.testng.annotations.Listeners;
import org.testng.annotations.Test;

import static org.testng.Assert.assertTrue;

@Listeners(com.sso.RetryListener.class)
public class ITTest {
  @Test
  public void f() {
	  assertTrue(false);

  }
}

 还有一种是通过@Test注释,如:

import org.testng.annotations.Test;
import static org.testng.Assert.assertTrue;

public class ITTest {
  @Test(retryAnalyzer = com.sso.RetryListener.class)
  public void f() {
	  assertTrue(false);

  }
}

 三种添加listener的方式,使用其中一种即可,不要同时使用。

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