通过多个线程执行的方法将结果写入范围报告

时间:2018-11-06 11:45:06

标签: java spring-boot executorservice extentreports

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

public LinkedHashMap doSomething(){

// do something
....

extentReporObj.writeToReport(testName,result,..);
}

在实现Callable的类的调用方法中调用上述方法

我遇到的问题是多个线程试图同时写入报告,并且抛出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是一个全局变量,因此它在range.endTest(test);之前被其他线程覆盖。可以执行该行,从而给我ExtentTestInterruptedException异常。

我搜索了很多,但所有人都说要同步该方法,但在我的情况下不起作用。

1 个答案:

答案 0 :(得分:0)

像下面一样,

dfc = pd.concat([df1, df2, ..., df20])
dataf = dfc[dfc.Type == 23][['N1', 'N2']]