TestNg失敗重試機制


TestNg提供了失敗重試接口IRetryAnalyzer,需要實現retry方法:

 

package com.shunhe.testngprac.retry; import org.testng.IRetryAnalyzer; import org.testng.ITestResult; /** * 設置testng用例失敗重試次數 * Created by shunhe on 2019/2/13. */ public class MyRetryAnalyzer implements IRetryAnalyzer { private int retryCount = 0; private final int MAX_RETRY_COUNT = 3; @Override public boolean retry(ITestResult iTestResult) { if (retryCount < MAX_RETRY_COUNT) { retryCount++; return true; } return false; } }

 

TestNG中的@Test注解包含參數retryAnalyzer,可以在注解中給定重試分析器,如下:

 

    @Test(retryAnalyzer = MyRetryAnalyzer.class) public void test01() { System.out.println("test01"); Assert.assertTrue(false, "test failed"); }

 

TestNg程序化調用情況

 

需要實現接口IAnnotationTransformer中的transform方法,對未設置retryanalyzer的@test方法添加響應的retryanalyzer:

 

package com.shunhe.testngprac.retry; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import org.testng.IAnnotationTransformer; import org.testng.IRetryAnalyzer; import org.testng.annotations.ITestAnnotation; /** * 添加重試監聽器,如果測試方法中未添加重試分析器,則默認添加MyRetryAnalyzer作為重試分析器 * Created by shunhe on 2019/2/13. */ public class MyRetryListener implements IAnnotationTransformer { @Override public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) { IRetryAnalyzer retryAnalyzer = iTestAnnotation.getRetryAnalyzer(); if (null == retryAnalyzer) { iTestAnnotation.setRetryAnalyzer(MyRetryAnalyzer.class); } } } 

 

在構造tesng執行對象時,添加響應的listener

 

package com.shunhe.testngprac.controller; import java.util.ArrayList; import java.util.List; import org.testng.TestNG; import org.testng.xml.XmlClass; import org.testng.xml.XmlSuite; import org.testng.xml.XmlSuite.ParallelMode; import org.testng.xml.XmlTest; /** * Created by shunhe on 2019/2/13. */ public class TestNgController { /** * TestNG測試程序化調用 */ public void executeTests() { //構建testng.xml內存對象 try { List<XmlSuite> suites = new ArrayList<XmlSuite>(); XmlSuite suite = new XmlSuite(); suite.setName("TestNG Retry Test"); //添加失敗重試 List<String> suiteListeners = new ArrayList<String>(); //添加重試監聽器 suiteListeners.add("com.shunhe.testngprac.retry.MyRetryListener"); suite.setListeners(suiteListeners); //類級別的並發 suite.setParallel(ParallelMode.CLASSES); suites.add(suite); XmlTest test = new XmlTest(suite); test.setName("TestNG Retry Test"); //添加將要執行的用例 List<XmlClass> classes = new ArrayList<XmlClass>(); XmlClass testClass = new XmlClass("com.shunhe.testngprac.tests.DemoTest01"); classes.add(testClass); test.setXmlClasses(classes); //TestNG程序化調用 TestNG testNG = new TestNG(); testNG.setXmlSuites(suites); testNG.run(); } catch (Exception e) { System.out.println("測試用例執行失敗: " + e.getMessage()); e.printStackTrace(); } } public static void main(String[] args){ TestNgController testNgController = new TestNgController(); testNgController.executeTests(); } }


免責聲明!

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



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