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

时间:2013-09-18 12:02:19

标签: java selenium automated-tests testng repeat

这是假设的,测试失败(由于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注释   如果你想添加某些属性。

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

2 个答案:

答案 0 :(得分:2)

您可以实现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 {
...
}

答案 1 :(得分:1)

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

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