我在selenium代码中使用RetryAnalyzer,其中如果测试用例在第一次执行时失败,retryAnalyzer将再次执行它。在我的情况下,如果第一次执行失败并且第二次执行通过,我想在范围报告中显示仅第二次执行的结果。但我在报告中得到了测试用例结果。
以下是我的代码。
ExtentTest test;
int maxRetryCount = 1;
@AfterMethod
protected void afterMethod(ITestResult result) {
boolean firstTry = true;
if(maxRetryCount>0){
if (result.getStatus() == ITestResult.FAILURE && firstTry == true) {
firstTry = false;
} else if (result.getStatus() == ITestResult.SKIP) {
test.log(LogStatus.SKIP, "Test skipped " + result.getThrowable());
} else if (result.getStatus() == ITestResult.FAILURE && firstTry == false) {
test.log(LogStatus.ERROR, test.addScreenCapture(imgPath));
test.log(LogStatus.FAIL, result.getThrowable());
} else {
test.log(LogStatus.PASS, "Test passed");
}
}else{
if (result.getStatus() == ITestResult.FAILURE) {
test.log(LogStatus.ERROR, test.addScreenCapture(imgPath));
test.log(LogStatus.FAIL, result.getThrowable());
} else if (result.getStatus() == ITestResult.SKIP) {
test.log(LogStatus.SKIP, "Test skipped " + result.getThrowable());
} else {
test.log(LogStatus.PASS, "Test passed");
}
}
}
在这种情况下,如果测试用例在第一次执行时失败,它会将该测试用例的状态显示为" unknown",并假设执行过程重试(第二次执行),传递百分比显示为50%,而不是100%,因为它也会计算未知的百分比。
我应该在下面的循环条件下做些什么更改,以便此测试用例的结果不会显示在报告中。
if (result.getStatus() == ITestResult.FAILURE && firstTry == true) { }
请建议。
答案 0 :(得分:0)
如果测试状态为“已跳过”,则可以删除当前的测试节点。这样的事情会起作用...
@BeforeMethod(alwaysRun=true)
public void beforeMethod(){
//be sure to create node in the BeforeMethod
HtmlReporter.createNode("CurrentTest");
}
@AfterMethod(alwaysRun = true)
public void afterMethod(ITestResult result) {
if (result.getStatus() == ITestResult.SKIP) {
HtmlReporter.removeCurrentNode();
}
删除当前节点的代码如下:
public static synchronized void removeCurrentNode() {
_report.removeTest(getNode());
}
public static synchronized ExtentTest getNode() {
return extentTestMap.get("node_" + Thread.currentThread().getId());
}