通过由多个线程执行的方法将结果写入Extent Report



我有一个在多个线程中执行的方法。该方法执行一个操作,然后将结果写入数据块报告中。

public LinkedHashMap doSomething(){
// do something
....
extentReporObj.writeToReport(testName,result,..);
}

上面的方法是在实现可调用的类的调用方法内部调用的

我遇到的问题是多个线程同时试图在报告中写入,并且抛出ConcurrentModificationException。

我已经使writeToReport方法同步

public synchronized void writeToReport(String testName, String url, String request, String response, String resultStatus) {
setTest(testName);
test.log(LogStatus.INFO, testName + " Test Start");
test.log(LogStatus.INFO, "API URL  ::   " + url);
if (request != null)
test.log(LogStatus.INFO, "API Request  ::   " + request);
if (resultStatus.equalsIgnoreCase("pass"))
test.log(LogStatus.PASS, "Status :: Pass");
else
test.log(LogStatus.FAIL, "Status :: Fail");
if (null != response)
test.log(LogStatus.INFO, "API Response ::   " + response);
test.log(LogStatus.INFO, testName + " Test End");
extent.endTest(test); 
}

另一件事是,由于testName是一个全局变量,它在extent.endTest(test(;行,这给了我ExtentTestInterruptedException异常。

我搜索了很多,但他们都说同步方法,但在我的情况下不起作用。

就像下面一样,

public ThreadLocal<ExtentReports> extent = new ThreadLocal<>();
@BeforeSuite
public synchronized void setUp() throws IOException {
extent.set(new ExtentReports());
extent.get().attachReporter(htmlReporter);
}

相关内容

  • 没有找到相关文章

最新更新