testng擴充套件 失敗的用例重跑

aiee發表於2018-09-28

新建包TestngRetry , implements IRetryAnalyzer實現重跑功能

implements 是實現多個介面, 介面的方法一般為空的, 必須重寫才能使用

 


import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.Reporter;
import com.test.utils.PropertiesDataProvider;

public class TestngRetry implements IRetryAnalyzer {

    private int retryCount = 1;
    private static int maxRetryCount;

    static {
        maxRetryCount = 2;//重跑的次數
        String sourcecodedir = src;//原始碼路徑
        String sourcecodeencoding = UTF-8;//原始碼編碼
    }

    public boolean retry(ITestResult result) {
        if (retryCount <= maxRetryCount) {
            String message = result.getName()+" 測試用例執行失敗!即將重跑第 ["+ retryCount + "]次 :class [" + result.getTestClass().getName();
            logger.info(message);
            Reporter.setCurrentTestResult(result);
            Reporter.log("RunCount=" + (retryCount + 1));
            retryCount++;
            return true;
        }
        return false;
        
    }

    public static int getMaxRetryCount() {
        return maxRetryCount;
    }

    public int getRetryCount() {
        return retryCount;
    }

}

 

新建RetryListener,implements IAnnotationTransformer

重寫transform方法,讀取TestngRetry的重跑設定

 

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

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);
        }
    }

}
 

最後在xml檔案中加入監聽器RetryListener

    <listeners>
        <listener class-name="com.test.listener.RetryListener" />
    </listeners>

相關文章