无法使用 IRetryAnalyzer 运行 失败的测试用例
Unable to run the failed test cases using IRetryAnalyzer
我有一个纯数据驱动的测试用例。我的 objective 是重新 运行 至少再失败一次的测试。我在这里面临的问题是,如果重试次数设置为 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
class.
中的 retry(ITestResult result)
方法上方丢失
它应该是这样的:
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;
}
}
我终于知道了。不确定这是否是 TestNG 问题。
我所做的是每次测试通过时(即使在第 2 轮或第 3 轮之后)重置计数器,如下所示
@AfterMethod(alwaysRun = true)
public void AfterTest(ITestResult result) throws IOException {
if(result.getStatus() == ITestResult.FAILURE) {
}
else if(result.getStatus() == ITestResult.SUCCESS) {
Retry retry = new Retry();
retry.resetCounter();
}
else if(result.getStatus() == ITestResult.SKIP) {
}
}
希望这对某些人有用。再次感谢。这似乎是一个 hack 但有效。
我有一个纯数据驱动的测试用例。我的 objective 是重新 运行 至少再失败一次的测试。我在这里面临的问题是,如果重试次数设置为 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
class.
中的 retry(ITestResult result)
方法上方丢失
它应该是这样的:
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;
}
}
我终于知道了。不确定这是否是 TestNG 问题。 我所做的是每次测试通过时(即使在第 2 轮或第 3 轮之后)重置计数器,如下所示
@AfterMethod(alwaysRun = true)
public void AfterTest(ITestResult result) throws IOException {
if(result.getStatus() == ITestResult.FAILURE) {
}
else if(result.getStatus() == ITestResult.SUCCESS) {
Retry retry = new Retry();
retry.resetCounter();
}
else if(result.getStatus() == ITestResult.SKIP) {
}
}
希望这对某些人有用。再次感谢。这似乎是一个 hack 但有效。