testNG-失敗用例重跑機制


下面簡單介紹下testNG的失敗重跑的實現方法:

1.首先編寫一個類,實現IRetryAnalyzer類,重寫其中的retry方法。

public class TestNGRetry implements IRetryAnalyzer {

    private int retryCount = 1;//設置當前的重跑次數
    private static final int maxRetryCount = 3;//設置最大重跑次數,定義為常量。

    @Override
    public boolean retry(ITestResult iTestResult) {
        if (retryCount<=maxRetryCount){
            System.out.println("it's the "+retryCount+"times retry.And the current case is"+iTestResult.getName());//輸出當前的重跑次數以及當前的正在重跑的用例名稱。

            retryCount++;//重跑之后,次數+1
            return true;//當return true之后,代表繼續重跑
        }
        return false;//return false之后,代表停止重跑
    }

    public void reSetCount(){
        retryCount=1;
    }

}

在完成這個方法的重寫之后,其實已經可以實現失敗用例重跑了。前提是,用例上注解設置如下:

@Test(retryAnalyzer= TestNGRetry.class)
當然,我們是期望所有的用例執行失敗之后,都可以重跑,所以就需要考慮執行時動態修改我們用例的注解。testNG已經給實現了,我們只
需要編寫一個類去實現IAnnotationTransformer,並重寫方法transform
 
        
public class RetryListener implements IAnnotationTransformer {
    @Override
    public void transform(ITestAnnotation iTestAnnotation, Class aClass, Constructor constructor, Method method) {
        IRetryAnalyzer retryAnalyzer = iTestAnnotation.getRetryAnalyzer();//獲取到retryAnalyzer的注解
if (retryAnalyzer == null){ iTestAnnotation.setRetryAnalyzer(TestNGRetry.class); } } }//如果注解為空,則動態設置注解,以確保用例失敗后重跑。

 

在testNG的xml配置文件中配置上述監聽器:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="NeuronIOSSystemTest" parallel="true"
    thread-count="2">
    <listeners>
        <listener
            class-name="com.neuron.util.TestRunnerListener" />
        <listener class-name="com.nervos.neuron.retry.RetryListener"/>
    </listeners>

    <test verbose="2" name="Neuron iOS App System Test"
        preserve-order="true" enabled="true">
        <classes>
            <class name="com.xxx.xxx.xxxTest" />
            
        </classes>
    </test>
</suite>

 

綜上,失敗用例重跑機制基本實現。但是在執行的時候,會發現一個問題:

使用了dataProvider並且提供多個數據的時候,這個重跑次數是共用的,就會導致dataProvider提供的第一個數據執行失敗后,重跑3次。如果提供的第二個數據再次失敗了,就不會再重跑了。

或者dataProvider提供的第一個數據執行失敗后,重跑第一次的時候又成功了。提供的第二個數據再次失敗了,就只重跑2次。

所以,在用例執行失敗和用例執行成功后,都需要重置當前的重跑次數。

public class TestRunnerListener extends TestListenerAdapter {
    @Override
    public void onTestSuccess(ITestResult tr) {
        TestNGRetry retryAnalyzer = (TestNGRetry) tr.getMethod().getRetryAnalyzer();
        retryAnalyzer.reSetCount();
        finish(tr);
    }


    @Override
    public void onTestFailure(ITestResult tr) {
     TestNGRetry retryAnalyzer = (TestNGRetry) tr.getMethod().getRetryAnalyzer();
        retryAnalyzer.reSetCount();
        finish(tr);
    }
}

 

以上,完全實現了失敗用例的重跑機制。

 

 





免責聲明!

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



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