TestNG retryAnalyzer仅在方法@Test中定义时才起作用,在类’@Test中不起作用

这可以正常工作,测试失败(由于haltTesting())并重复2次

public class A0001_A0003Test extends TestControl { private Kunde kunde = Kunde.FR_WEHLITZ; @Test(retryAnalyzer = TestRepeat.class, groups = {TestGroups.FAILED}, description = "verify adress") public void testkundenDaten_Angaben() throws Exception { bifiTestInitial(); testActions.selectKunde(kunde); haltTesting(); } } 

但是因为我在一个类中有多个测试,所以我在类级别定义了repeatAnalyzer

 @Test(retryAnalyzer = TestRepeat.class) public class A0001_A0003Test extends TestControl { private Kunde kunde = Kunde.FR_WEHLITZ; @Test(groups = {TestGroups.FAILED}, description = "verify adress") public void testkundenDaten_Angaben() throws Exception { bifiTestInitial(); testActions.selectKunde(kunde); haltTesting(); } } 

但随后测试没有重复,文档说:

类级@Test注释的作用是使该类的所有公共方法成为测试方法,即使它们没有注释。 如果要添加某些属性,仍可以在方法上重复@Test注释。

那应该是可能的,还是我期待错误的结果?

您可以实现IAnnotationTransformer侦听器并注册侦听器cmd行或在配置文件中或在类级别。

 public class MyAnnotationTransformer implements IAnnotationTransformer { @Override public void transform(ITestAnnotation testAnnotation, Class clazz, Constructor testConstructor, Method method) { testAnnotation.setRetryAnalyzer(TestRepeat.class); } ... } 

在class级注册:

 @Listeners(value=MyAnnotationTransformer.class) public class A0001_A0003Test extends TestControl { ... } 

我的解决方案是为@BeforeSuite方法中的所有方法设置@BeforeSuite 。 但是不要在beforeMethod中设置它,因为它将使用新的counter =>无限循环重新创建每次调用。

 @BeforeSuite(alwaysRun = true) public void beforeSuite(ITestContext context) { for (ITestNGMethod method : context.getAllTestMethods()) { method.setRetryAnalyzer(new TestRepeat()); } }