我在 TestNG 中使用 IRetryAnalyzer 类来重新启动失败的测试(最多 5 次尝试)。现在,如果我运行一个测试,并且在通过之前失败了 3 次,它会说:
测试运行:4,失败:3,错误 0,跳过 0。
我想要显示的结果是:
测试运行:1,失败:0,错误 0,跳过 0。
基本上,我不希望它算作失败,除非它全部 5 次重新运行都失败了。我该怎么做?
既然没有人回复,我就试试吧。
只是我在阅读你的文章时的随机想法,同时我正在寻找解决我的问题的方法......
您可以通过
@AfterTest
在
ITestResult result
方法中获取测试结果
@AfterMethod
public void AfterMethod_CheckForFailure(ITestResult result, Method m)
当带有 @AfterMethod
注释的方法完成时,会调用
@Test
。
能够从具有 static
成员的 static
类中读取当前迭代
如果它 <5
那么使用
result.setStatus(ITestResult.SUCCESS); // or what ever status you want
setCurrentTestResult(result);
不知道这是否有效,但在我看来可以:)祝你好运
我刚刚做了这件事,我是如何做到的,我考虑了上次成功之前的一切。我这样做是为了允许重新运行 3 次,这是我使用的代码:
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
import org.testng.Reporter;
public class RetryAnalyzer implements IRetryAnalyzer {
private int count = 0;
private int maxCount = 2;
@Override
public boolean retry(ITestResult result) {
if (!result.isSuccess()) {
if (count < maxCount) {
count++;
result.setStatus(ITestResult.SUCCESS);
String message = Thread.currentThread().getName() + ": Error in " + result.getName() + " Retrying "
+ (maxCount + 1 - count) + " more times";
System.out.println(message);
Reporter.log(message);
return true;
} else {
result.setStatus(ITestResult.FAILURE);
}
}
return false;
}
}
这里的关键是当我还在重试时,我将结果设置为成功
result.setStatus(ITestResult.SUCCESS)
当尝试完成后仍然失败,则将其设置为失败
result.setStatus(ITestResult.FAILURE);