在多个线程中运行测试时,我遇到了ExtentTestInterruptedException
异常(使用TestNG在多个线程中启动测试):
com.relevantcodes.extentreports.ExtentTestInterruptedException:
Close was called before test could end safely using EndTest.
at com.relevantcodes.extentreports.Report.terminate(Report.java:425)
at com.relevantcodes.extentreports.ExtentReports.close(ExtentReports.java:917)
遵循的步骤
@BeforeTest
方法的startTest
方法开始测试endTest
方法以范围报告@AfterMethod
结束我的测试@AfterSuite
函数中定义。close()
中删除了@AfterSuite
方法调用,但在这种情况下,很少有测试用例的结果显示为未知。有人可以帮助我解决此查询吗?
答案 0 :(得分:0)
这与范围报告有关。我不确定您如何编写@after方法,但是我只能猜测您在代码中使用了reports.endTest(test);
。 这是旧版的范围报告。您最有可能的问题是它。这是最新的范围报告解决方案的替代性,因为此处没有与您的问题相关的范围报告相关代码。
@AfterMethod
public synchronized void afterMethod(ITestResult result) {
StringBuilder inputArgs = new StringBuilder();
Object objects[] = result.getParameters();
for(Object obj : objects){
if(obj==null){
inputArgs.append(" ");
}else{
inputArgs.append(obj.toString());
}
inputArgs.append(" , ");
}
if (result.getStatus() == ITestResult.FAILURE)
test.get().fail(result.getThrowable()+ "Input Parameters : "+inputArgs.toString());
else if (result.getStatus() == ITestResult.SKIP)
test.get().skip(result.getThrowable() + "Input Parameters : "+inputArgs.toString());
else
test.get().pass( " Test Passed. Input parameters : " +inputArgs.toString());
extent.flush();
}
答案 1 :(得分:0)
当测试失败时,如果未对extend.endTest()进行处理,则将遇到此问题。 我使用下面的ITestListener方法来处理测试失败。在这里,原因被捕获并记录到报告中,并结束范围报告记录。
public void onTestFailure(ITestResult t)
{
if(t.getStatus()==ITestResult.FAILURE) {
String reason = t.getThrowable().toString();
logger.log(LogStatus.FAIL, reason);
extent.endTest(logger);
}
}