核心接口:IRetryAnalyzer
public class MyRetry implements IRetryAnalyzer {
private int count = 0;
private static final int MAX = 2;
@Override
public boolean retry(ITestResult result) {
if (count < MAX) {
count++;
return true; // 重跑
}
return false;
}
}
綁定方式
方法級註解
@Test(retryAnalyzer = MyRetry.class)
public void flakyTest() { ... }
全局 XML 配置 (testng.xml)
動態注入 Listener (IAnnotationTransformer)
public class MyRetryListener implements IAnnotationTransformer {
@Override
public void transform(ITestAnnotation annotation, Class testClass,
Constructor testConstructor, Method testMethod) {
annotation.setRetryAnalyzer(MyRetry.class);
}
}
注意事項
- 重跑會重新執行 @BeforeMethod/@AfterMethod。
- 報告中默認只顯示最後一次結果,需自定義 Reporter 記錄重跑歷史。
- 數據驅動測試 (
@DataProvider) 重跑會重新迭代所有數據。