我已经编写了一个代码,用于在selenium web驱动程序和java中重试失败的测试用例。 我们应该如何增强脚本以在测试用例输出中仅保存一条记录,即使是多次执行的相同测试用例。 我不希望测试输出报告包含任何冗余结果条目。
代码: 重试逻辑:
package tests;
import org.testng.IRetryAnalyzer;
import org.testng.ITestResult;
public class Retry implements IRetryAnalyzer {
private int retryCount = 0;
private int maxRetryCount = 2; // retry a failed test 2 additional times
@Override
public boolean retry(ITestResult result) {
if (retryCount <maxRetryCount) {
retryCount++;
return true;
}
return false;
}
}
在课堂上实施
@Test(retryAnalyzer=Retry.class)
public void example() throws CustomException
{
throw new CustomException("Example");
}
请告诉我需要进行哪些更改。
谢谢和问候 Sushanth.G
答案 0 :(得分:5)
之前我遇到过同样的问题。 我们使用jenkins来运行CI,并且需要确保所有测试用例结果都是SUCCESS(即使经过一些重试后),然后我们可以部署构建。
如果再次运行此测试,解决方案是添加TestListenerAdapter以将测试结果状态重新写入SKIP。
public class MyTestListenerAdapter extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result) {
if (result.getMethod().getRetryAnalyzer() != null) {
MyRetryAnalyzer retryAnalyzer = (MyRetryAnalyzer)result.getMethod().getRetryAnalyzer();
if(retryAnalyzer.isRetryAvailable()) {
result.setStatus(ITestResult.SKIP);
} else {
result.setStatus(ITestResult.FAILURE);
}
Reporter.setCurrentTestResult(result);
}
}
}
RetryAnalyzer需要为TestListenerAdapter提供另一个方法(在此示例中为isRetryAvailable())。
public class MyRetryAnalyzer implements IRetryAnalyzer {
private static int MAX_RETRY_COUNT = 3;
AtomicInteger count = new AtomicInteger(MAX_RETRY_COUNT);
public boolean isRetryAvailable() {
return (count.intValue() > 0);
}
@Override
public boolean retry(ITestResult result) {
boolean retry = false;
if (isRetryAvailable()) {
System.out.println("Going to retry test case: " + result.getMethod() + ", " + (MAX_RETRY_COUNT - count.intValue() + 1) + " out of " + MAX_RETRY_COUNT);
retry = true;
count.decrementAndGet();
}
return retry;
}
}
现在我们可以将此TestListenerAdapter添加到测试类。
@Listeners({MyTestListenerAdapter.class})
public class AppTest {
@Test(retryAnalyzer=MyRetryAnalyzer.class)
public void testSum(){
MyClass c = new MyClass();
Assert.assertEquals(c.sum(2, 3), 5);
}
}