您好:当@Test失败
并且发生Retry
时,TestNG中有没有直接的方法来区分已重试的测试和已重试的测试尚未重试 - 例如通过 NG 上下文方法或变量?
- 情况 1:如果未重试测试,则
第一个测试
是尚未重试的测试。 - 情况 2:如果某个测试已重试 2 次,则
第 3 次测试
是尚未重试的测试。
我找到的一些选项,例如 http://www.seleniumeasy.com/testng-tutorials/retry-listener-failed-tests-count-update - 但想检查社区是否有其他方法和/或建议。
最佳答案
你可以尝试这样的事情。这个想法基本上是检索与特定测试方法关联的重试分析器实例,然后查询其重试计数。如果其重试计数大于零,则重试该方法。
import org.testng.Assert;
import org.testng.IRetryAnalyzer;
import org.testng.ITestContext;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.atomic.AtomicInteger;
@Listeners(IdentifyRetriedTests.IdentifyingListener.class)
public class IdentifyRetriedTests {
private static AtomicInteger counter = new AtomicInteger(0);
private static AtomicInteger anotherCounter = new AtomicInteger(0);
@Test(retryAnalyzer = Retry.class)
public void hello() {
if (counter.incrementAndGet() == 3) {
Assert.assertTrue(true);
} else {
Assert.fail();
}
}
@Test(retryAnalyzer = Retry.class)
public void anotherHello() {
if (anotherCounter.incrementAndGet() == 5) {
Assert.assertTrue(true);
} else {
Assert.fail();
}
}
public static class IdentifyingListener extends TestListenerAdapter {
@Override
public void onTestSuccess(ITestResult tr) {
IRetryAnalyzer retry = tr.getMethod().getRetryAnalyzer();
if (retry instanceof Retry) {
//Check if the retry analyser's retry count was greater than zero. If yes, then its a retried method
if (((Retry) retry).getRetryCount() > 0) {
tr.setAttribute("retried", true);
}
}
}
@Override
public void onFinish(ITestContext testContext) {
Set<ITestResult> results = new HashSet<>();
results.addAll(testContext.getFailedTests().getAllResults());
results.addAll(testContext.getPassedTests().getAllResults());
for (ITestResult result : results) {
if (result.getAttribute("retried") != null) {
System.err.println(result.getMethod().getMethodName() + "() was retried");
}
}
}
}
public static class Retry implements IRetryAnalyzer {
private AtomicInteger retryCount = new AtomicInteger(0);
private static int maxRetryCount = 10;
public boolean retry(ITestResult result) {
return retryCount.getAndIncrement() < maxRetryCount;
}
int getRetryCount() {
return retryCount.get();
}
}
}
关于java - TestNG Reporting,如何快速识别Retry-d Tests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43069150/