java - 无法使用 IRetryAnalyzer 运行失败的测试用例
问题描述
我有一个纯数据驱动的测试用例。我的目标是重新运行至少再次失败的测试。我在这里面临的问题是,如果重试计数设置为 3,并且我有以下方式的数据驱动测试,
@Test(dataProvider="PositiveScenarios",groups= "smoke",retryAnalyzer = utils.Retry.class)
public void positiveScenariosTest(LinkedHashMap<String, String> data) throws InterruptedException {
}
And the Retry class is like below
package utils;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class Retry implements IRetryAnalyzer{
int counter = 1;
int retryMaxLimit = 3;
public boolean retry(ITestResult result) {
if (counter < retryMaxLimit) {
System.out.println("Going to retry test case: " + result.getMethod() + ", " + (retryMaxLimit - counter + 1) + " out of " + retryMaxLimit);
counter++;
return true;
}
return false;
}
}
假设我有 10 个测试。如果第 4 次测试失败,则第 4 次测试重试 3 次(这很好)。在此之后,如果第 6 次测试失败,则第 6 次测试只运行一次,而不是 3 次。我期待第 6 次测试在失败之前运行 3 次。
不知道我在这里做错了什么。
我这里没有任何特定的 TestNG 侦听器(例如测试失败)我需要一个吗?如果是这样,第一次测试失败是如何运行 3 次的?是否有我缺少的初始化程序。
任何帮助是极大的赞赏。我正在使用最新版本的 TestNG。
解决方案
我相信您的类中的方法@Override
上方缺少注释。
它应该是这样的:retry(ITestResult result)
Retry
package utils;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class Retry implements IRetryAnalyzer{
int counter = 1;
int retryMaxLimit = 3;
@Override
public boolean retry(ITestResult result) {
if (counter < retryMaxLimit) {
System.out.println("Going to retry test case: " + result.getMethod() + ", " + (retryMaxLimit - counter + 1) + " out of " + retryMaxLimit);
counter++;
return true;
}
return false;
}
}
推荐阅读
- asp.net-mvc - 在 mvc 中下载文件时出现异常
- email - 跟踪最后一封电子邮件的正确方法是什么?
- r - facet_rep_wrap repeat.tick.labels=F 仍然显示所有轴
- c# - 使用 C# 反射查找声明函数的接口
- python - 从嵌套字典开发 matplotlib 表面
- python - 向数据框添加一列重复值
- javascript - JavaScript Regex:匹配所有主题标签,仅捕获哈希字符后的文本
- wpf - WPF:通过 MemoryStream 使用 ImageMagick 显示 gif
- go - 使用golang + vscode时如何修复错误
- php - LocalHost 上的 PHP 连接被拒绝 (HY000/2002)