![](/img/trans.png)
[英]TestNG: RetryAnalyzer, dependent groups are skipped if a test succeeds upon retry
[英]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.