在多个线程中运行测试时,可以在使用EndTest安全结束测试之前调用Close

时间:2018-12-10 08:55:18

标签: java testng extentreports

多个线程中运行测试时,我遇到了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)

遵循的步骤

  1. 我正在使用范围报告@BeforeTest方法的startTest方法开始测试
  2. 并以endTest方法以范围报告@AfterMethod结束我的测试
  3. 我的范围报告关闭方法在@AfterSuite函数中定义。
  4. 我从close()中删除了@AfterSuite方法调用,但在这种情况下,很少有测试用例的结果显示为未知。

有人可以帮助我解决此查询吗?

2 个答案:

答案 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);
        }

    }