0

我在关注几个不同的网站,解释如何使用 RetryAnalyzer(他们都说基本相同的东西,但我检查了几个,看看是否有任何区别)。我按照他们在示例中所做的那样实现,并故意在第一次运行时导致失败(最终成为唯一的运行)。即使失败了,也没有重复测试。我什至在分析器的第一行放置了一个断点(res = false)。从来没有被击中。我告诉它尝试 3 次,但它根本没有重试。我错过了什么吗?我的示例如下:这与设置计数器 = 0 有关吗?但是“res = false”至少应该受到打击?

public class RetryAnalyzer implements IRetryAnalyzer {

    int counter = 0;

    @Override
    public boolean retry(ITestResult result) {
        boolean res = false;
        if (!result.isSuccess() && counter < 3) {
            counter++;
            res = true;
        }
        return res;
    }
}

@Test(dataProvider = "dp",  retryAnalyzer = RetryAnalyzer.class)
public void testA(TestContext tContext) throws IOException {
    genericTest("A", "83701");
}

测试通常通过。我故意让它失败,但它没有重试。我错过了什么吗?

================================================= 默认套件

总测试运行:1,失败:1,跳过:0

4

2 回答 2

0

尝试添加alwaysRun = true到您的测试方法装饰器。

@Test(dataProvider = "dp",  retryAnalyzer = RetryAnalyzer.class, alwaysRun = true)
public void testA(TestContext tContext) throws IOException {
    genericTest("A", "83701");
}

此外,在重试之前,您可能需要重新启动驱动程序实例,以便从干净的测试开始。否则,您的第二次运行将在同一个浏览器实例中执行。

只需driver.Quit()通过重新实例化浏览器驱动程序来执行以下操作。

于 2018-03-22T13:15:00.040 回答
0

RetryAnalyzer 类必须是公开的。此外,如果它是一个内部类,它应该是静态的。否则,TestNg 会默默地忽略 retryAnalyzer。

于 2019-07-24T20:06:41.523 回答