您好,登錄后才能下訂單哦!
TestNG如何通過自定義Listener形式實現用例失敗重試,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
前面的文章講解了可以通過標簽的形式實現用例失敗重試的方法,@Test(retryAnalyzer = MyRetry.class)。
詳情可以參考文章:詳解TestNG中的用例失敗重試和自定義監聽器
但是通過@Test標簽方式仍然存在一定的問題,即該方法只能左右在類或者方法上,當測試類非常多的時候,需要在每一個類前都增加標簽@Test(retryAnalyzer = MyRetry.class)。
有沒有什么全局的方式來搞定這件事兒呢?我們可以通過自定義listener來解決!
我們已經通過標簽實現了用例失敗的重試機制,那么我們就可以寫一個listenser來控制標簽。TestNG中提供了IAnnotationTransformer來讓我們實現這一目的。話不多說,直接上代碼
重試代碼邏輯的代碼實現如下:
import org.testng.IRetryAnalyzer; import org.testng.ITestResult; public class MyRetry implements IRetryAnalyzer{ private int retryCount = 0; private static final int maxRetryCount = 3;//用例失敗重新執行3次 @Override public boolean retry(ITestResult result) { if (retryCount < maxRetryCount) { retryCount++; return true; } return false; } }
自定義Retry 的listener代碼實現如下:
import java.lang.reflect.Constructor; import java.lang.reflect.Method; import org.testng.IAnnotationTransformer; import org.testng.annotations.ITestAnnotation; public class RetryListener implements IAnnotationTransformer { @Override public void transform(ITestAnnotation testannotation, Class testClass, Constructor testConstructor, Method testMethod) { testannotation.setRetryAnalyzer(MyRetry.class); } }
測試類代碼如下:
import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class Case1 { @Test public void f1() { System.out.println("f11"); assertEquals("a","b"); } @Test public void f2() { System.out.println("f21"); assertEquals("a","a"); } }
設置testng的配置文件,添加自定義的RetryListener
運行結果如下,可以看到重試了3次。
備注:如果在一個case中,方法中有標簽重試機制代碼如下(設置重試為1),那該如何處理呢?
@Test(retryAnalyzer = MyRetry2.class) public void f1() { System.out.println("f11"); assertEquals("a","b"); }
我們運行代碼會發現以testng的配置文件中的添加自定義RetryListener中使用的MyRetry.class為主。
關于TestNG如何通過自定義Listener形式實現用例失敗重試問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。