我有一个在多个线程中执行的方法。该方法执行一个操作,然后将结果写入范围报告中。
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异常。
我搜索了很多,但所有人都说要同步该方法,但在我的情况下不起作用。
答案 0 :(得分:0)
像下面一样,
dfc = pd.concat([df1, df2, ..., df20])
dataf = dfc[dfc.Type == 23][['N1', 'N2']]