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的方式,使用其中一種即可,不要同時使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM