Запись результатов в Extent Report через метод, который выполняется несколькими потоками - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть метод, который выполняется в несколько потоков. Метод выполняет действие, а затем записывает результат в отчет экстента.

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 - это глобальная переменная, которая переопределяется другим потоком перед помощью экстента. может быть выполнена строка, которая дает мне исключение ExtentTestInterruptedException.

Я много искал, но все они говорят, что синхронизируют метод, но в моем случае он не работает.

1 Ответ

0 голосов
/ 19 апреля 2019

Как показано ниже,

public ThreadLocal<ExtentReports> extent = new ThreadLocal<>();

@BeforeSuite
public synchronized void setUp() throws IOException {
       extent.set(new ExtentReports());
       extent.get().attachReporter(htmlReporter);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...