diff --git a/backend/src/main/java/io/metersphere/api/jmeter/APISingleResultListener.java b/backend/src/main/java/io/metersphere/api/jmeter/APISingleResultListener.java index 39d83caeeb..7b0dbcdcfd 100644 --- a/backend/src/main/java/io/metersphere/api/jmeter/APISingleResultListener.java +++ b/backend/src/main/java/io/metersphere/api/jmeter/APISingleResultListener.java @@ -6,6 +6,7 @@ import io.metersphere.api.service.ApiExecutionQueueService; import io.metersphere.api.service.TestResultService; import io.metersphere.cache.JMeterEngineCache; import io.metersphere.commons.utils.CommonBeanFactory; +import io.metersphere.constants.RunModeConstants; import io.metersphere.dto.ResultDTO; import io.metersphere.jmeter.JMeterBase; import io.metersphere.jmeter.MsExecListener; @@ -51,7 +52,7 @@ public class APISingleResultListener implements MsExecListener { JMeterBase.resultFormatting(queues, dto); - dto.setConsole(FixedCapacityUtils.getJmeterLogger(dto.getReportId())); + dto.setConsole(FixedCapacityUtils.getJmeterLogger(dto.getReportId(), !StringUtils.equals(dto.getReportType(), RunModeConstants.SET_REPORT.toString()))); // 入库存储 CommonBeanFactory.getBean(TestResultService.class).saveResults(dto); @@ -75,9 +76,6 @@ public class APISingleResultListener implements MsExecListener { } catch (Exception e) { LoggerUtil.error(e); } finally { - if (FixedCapacityUtils.jmeterLogTask.containsKey(dto.getReportId())) { - FixedCapacityUtils.jmeterLogTask.remove(dto.getReportId()); - } if (JMeterEngineCache.runningEngine.containsKey(dto.getReportId())) { JMeterEngineCache.runningEngine.remove(dto.getReportId()); } diff --git a/backend/src/main/java/io/metersphere/api/jmeter/FixedCapacityUtils.java b/backend/src/main/java/io/metersphere/api/jmeter/FixedCapacityUtils.java index 088b0bf01b..a0a1cac868 100644 --- a/backend/src/main/java/io/metersphere/api/jmeter/FixedCapacityUtils.java +++ b/backend/src/main/java/io/metersphere/api/jmeter/FixedCapacityUtils.java @@ -33,11 +33,11 @@ public class FixedCapacityUtils { } - public static String getJmeterLogger(String testId) { + public static String getJmeterLogger(String reportId, boolean isClear) { try { - Long startTime = FixedCapacityUtils.jmeterLogTask.get(testId); + Long startTime = FixedCapacityUtils.jmeterLogTask.get(reportId); if (startTime == null) { - startTime = FixedCapacityUtils.jmeterLogTask.get("[" + testId + "]"); + startTime = FixedCapacityUtils.jmeterLogTask.get("[" + reportId + "]"); } if (startTime == null) { startTime = System.currentTimeMillis(); @@ -47,9 +47,14 @@ public class FixedCapacityUtils { String logMessage = FixedCapacityUtils.fixedCapacityCache.entrySet().stream() .filter(map -> map.getKey() > finalStartTime && map.getKey() <= endTime) .map(map -> map.getValue()).collect(Collectors.joining()); + return logMessage; } catch (Exception e) { return ""; + } finally { + if (isClear && FixedCapacityUtils.jmeterLogTask.containsKey(reportId)) { + FixedCapacityUtils.jmeterLogTask.remove(reportId); + } } } } diff --git a/backend/src/main/java/io/metersphere/api/jmeter/MsDebugListener.java b/backend/src/main/java/io/metersphere/api/jmeter/MsDebugListener.java index 3ef62c027d..88f5355a52 100644 --- a/backend/src/main/java/io/metersphere/api/jmeter/MsDebugListener.java +++ b/backend/src/main/java/io/metersphere/api/jmeter/MsDebugListener.java @@ -155,7 +155,7 @@ public class MsDebugListener extends AbstractListenerElement implements SampleLi dto.setReportId("send." + this.getName()); dto.setToReport(this.getName()); - String console = FixedCapacityUtils.getJmeterLogger(this.getName()); + String console = FixedCapacityUtils.getJmeterLogger(this.getName(),false); if (StringUtils.isNotEmpty(requestResult.getName()) && requestResult.getName().startsWith("Transaction=")) { requestResult.getSubRequestResults().forEach(transactionResult -> { transactionResult.getResponseResult().setConsole(console); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiExecutionQueueService.java b/backend/src/main/java/io/metersphere/api/service/ApiExecutionQueueService.java index 43f4379f86..a5af48ffb1 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiExecutionQueueService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiExecutionQueueService.java @@ -218,7 +218,7 @@ public class ApiExecutionQueueService { if (StringUtils.equalsIgnoreCase(dto.getRunMode(), ApiRunMode.DEFINITION.name())) { reportId = dto.getTestPlanReportId(); } - apiScenarioReportService.margeReport(reportId, dto.getRunMode()); + apiScenarioReportService.margeReport(reportId, dto.getRunMode(), dto.getConsole()); } return false; } @@ -305,7 +305,7 @@ public class ApiExecutionQueueService { if (StringUtils.equalsIgnoreCase(dto.getRunMode(), ApiRunMode.DEFINITION.name())) { reportId = dto.getTestPlanReportId(); } - apiScenarioReportService.margeReport(reportId, dto.getRunMode()); + apiScenarioReportService.margeReport(reportId, dto.getRunMode(), dto.getConsole()); } } return; @@ -341,7 +341,7 @@ public class ApiExecutionQueueService { if (StringUtils.equalsIgnoreCase(dto.getRunMode(), ApiRunMode.DEFINITION.name())) { reportId = dto.getTestPlanReportId(); } - apiScenarioReportService.margeReport(reportId, dto.getRunMode()); + apiScenarioReportService.margeReport(reportId, dto.getRunMode(), dto.getConsole()); } queueMapper.deleteByPrimaryKey(dto.getQueueId()); LoggerUtil.info("Queue execution ends:" + dto.getQueueId()); diff --git a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java index b0d9337687..7a3cc975f7 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java @@ -345,7 +345,7 @@ public class ApiScenarioReportService { return report; } - public void margeReport(String reportId, String runMode) { + public void margeReport(String reportId, String runMode, String console) { // 更新场景状态 if (StringUtils.equalsIgnoreCase(runMode, ApiRunMode.DEFINITION.name())) { ApiDefinitionExecResultWithBLOBs result = definitionExecResultMapper.selectByPrimaryKey(reportId); @@ -371,8 +371,15 @@ public class ApiScenarioReportService { apiScenarioReportMapper.updateByPrimaryKey(report); } } + + console = StringUtils.isNotEmpty(console) ? console : FixedCapacityUtils.getJmeterLogger(reportId, true); + if (StringUtils.isNotEmpty(console)) { + apiScenarioReportStructureService.update(reportId, console); + } // 更新控制台信息 - apiScenarioReportStructureService.update(reportId, FixedCapacityUtils.getJmeterLogger(reportId)); + if (FixedCapacityUtils.jmeterLogTask.containsKey(reportId)) { + FixedCapacityUtils.jmeterLogTask.remove(reportId); + } } public ApiScenarioReport updateScenario(List requestResults, ResultDTO dto) { diff --git a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportStructureService.java b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportStructureService.java index 05cb663e32..1935c97373 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportStructureService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportStructureService.java @@ -50,8 +50,6 @@ public class ApiScenarioReportStructureService { @Resource private ApiDefinitionExecResultMapper definitionExecResultMapper; @Resource - private ApiScenarioReportResultService apiScenarioReportResultService; - @Resource private ExtApiScenarioReportResultMapper extApiScenarioReportResultMapper; private static final List requests = Arrays.asList("HTTPSamplerProxy", "DubboSampler", "JDBCSampler", "TCPSampler", "JSR223Processor", "AbstractSampler"); diff --git a/backend/src/main/java/io/metersphere/api/service/RemakeReportService.java b/backend/src/main/java/io/metersphere/api/service/RemakeReportService.java index ee091f3fca..afab9a8cdf 100644 --- a/backend/src/main/java/io/metersphere/api/service/RemakeReportService.java +++ b/backend/src/main/java/io/metersphere/api/service/RemakeReportService.java @@ -181,7 +181,7 @@ public class RemakeReportService { LoggerUtil.info("进入异常结果处理报告【" + dto.getReportId() + " 】" + dto.getRunMode() + " 整体执行完成"); // 全局并发队列 PoolExecBlockingQueueUtil.offer(dto.getReportId()); - String consoleMsg = FixedCapacityUtils.getJmeterLogger(dto.getReportId()); + String consoleMsg = FixedCapacityUtils.getJmeterLogger(dto.getReportId(),true); dto.setConsole(consoleMsg + "\n" + errorMsg); // 整体执行结束更新资源状态 CommonBeanFactory.getBean(TestResultService.class).testEnded(dto);