3

这按预期工作,测试失败(由于haltTesting())并重复2x

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 注释。

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

4

2 回答 2

2

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

@BeforeSuite(alwaysRun = true)
public void beforeSuite(ITestContext context) {
     TestRepeat testRepeat = new TestRepeat();
     for (ITestNGMethod method : context.getAllTestMethods()) {
         method.setRetryAnalyzer(testRepeat);
     }
}
于 2013-09-18T12:02:19.030 回答
1

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

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

要在班级级别注册:

@Listeners(value=MyAnnotationTransformer.class)
public class A0001_A0003Test extends TestControl {
...
}
于 2013-09-18T15:52:53.560 回答