簡體   English   中英

TestNG retryAnalyzer僅在方法@Test中定義時起作用,而在類的@Test中不起作用

[英]TestNG retryAnalyzer only works when defined in methods @Test, does not work in class' @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);
}
...
}

要在課程級別注冊:

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

我的解決辦法是設置一個retryAnalyzer在所有方法@BeforeSuite方法。 但是不要在beforeMethod中設置它,因為這樣每次調用時都會使用新的counter => endless loop重新創建它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM