From 1badc4e1f6c79708c89c37e56cbf8f535d865eac Mon Sep 17 00:00:00 2001 From: song-tianyang Date: Fri, 19 Nov 2021 00:45:08 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=B5=8B=E8=AF=95=E8=AE=A1=E5=88=92?= =?UTF-8?q?=E6=89=A7=E8=A1=8C):=20=E4=BF=AE=E5=A4=8D=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=AE=A1=E5=88=92=E6=89=A7=E8=A1=8C=E6=8A=A5=E5=91=8A=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E4=B8=8D=E5=87=86=E7=A1=AE=E7=9A=84=E7=BC=BA=E9=99=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复测试计划报告中接口案例只显示最新执行结果的问题,以及场景用例未执行时显示最近一次执行报告的问题。 --- .../dto/automation/TestPlanFailureApiDTO.java | 1 + .../api/service/ApiAutomationService.java | 18 ++--- .../ApiDefinitionExecResultService.java | 15 ++++ .../api/service/ApiScenarioReportService.java | 11 +++ .../ext/ExtApiDefinitionExecResultMapper.java | 3 + .../ext/ExtApiDefinitionExecResultMapper.xml | 10 +++ .../ext/ExtApiScenarioReportMapper.java | 3 + .../mapper/ext/ExtApiScenarioReportMapper.xml | 7 ++ .../track/dto/TestPlanLoadCaseDTO.java | 1 + .../track/service/TestPlanApiCaseService.java | 71 +++++++++++++------ .../track/service/TestPlanReportService.java | 4 +- .../service/TestPlanScenarioCaseService.java | 22 +++++- .../track/service/TestPlanService.java | 64 ++++------------- .../detail/component/ApiCaseFailureResult.vue | 26 +++++-- 14 files changed, 161 insertions(+), 95 deletions(-) diff --git a/backend/src/main/java/io/metersphere/api/dto/automation/TestPlanFailureApiDTO.java b/backend/src/main/java/io/metersphere/api/dto/automation/TestPlanFailureApiDTO.java index 807496c340..28e79f2e4b 100644 --- a/backend/src/main/java/io/metersphere/api/dto/automation/TestPlanFailureApiDTO.java +++ b/backend/src/main/java/io/metersphere/api/dto/automation/TestPlanFailureApiDTO.java @@ -10,4 +10,5 @@ import lombok.Setter; @JsonInclude(JsonInclude.Include.NON_NULL) public class TestPlanFailureApiDTO extends TestPlanApiCaseDTO { private String response; + private String reportId; } diff --git a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java index 9bdaac920d..35912172f6 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiAutomationService.java @@ -1230,8 +1230,6 @@ public class ApiAutomationService { String scenarioId = entry.getValue(); ApiScenarioWithBLOBs scenario = scenarioMap.get(scenarioId); -// } -// for (ApiScenarioWithBLOBs scenario : apiScenarios) { if (scenario.getStepTotal() == null || scenario.getStepTotal() == 0) { continue; } @@ -1239,16 +1237,12 @@ public class ApiAutomationService { Map planEnvMap = new HashMap<>(); //测试计划页面触发的执行方式,生成报告时createScenarioReport第二个参数需要特殊处理 -// String testPlanScenarioId = scenario.getId(); -// if (request.getScenarioTestPlanIdMap() != null && request.getScenarioTestPlanIdMap().containsKey(item.getId())) { -// testPlanScenarioId = request.getScenarioTestPlanIdMap().get(item.getId()); - // 获取场景用例单独的执行环境 - TestPlanApiScenario planApiScenario = testPlanApiScenarioMapper.selectByPrimaryKey(testPlanScenarioId); - String environment = planApiScenario.getEnvironment(); - if (StringUtils.isNotBlank(environment)) { - planEnvMap = JSON.parseObject(environment, Map.class); - } -// } + // 获取场景用例单独的执行环境 + TestPlanApiScenario planApiScenario = testPlanApiScenarioMapper.selectByPrimaryKey(testPlanScenarioId); + String environment = planApiScenario.getEnvironment(); + if (StringUtils.isNotBlank(environment)) { + planEnvMap = JSON.parseObject(environment, Map.class); + } if(StringUtils.isEmpty(projectId)){ projectId = testPlanScenarioCaseService.getProjectIdById(testPlanScenarioId); } diff --git a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java index 02c6c7e365..fcf29c6843 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java @@ -423,4 +423,19 @@ public class ApiDefinitionExecResultService { return returnList; } } + + public Map selectReportResultByReportIds(Collection values) { + if(CollectionUtils.isEmpty(values)){ + return new HashMap<>(); + }else { + Map returnMap = new HashMap<>(); + List idStatusList = extApiDefinitionExecResultMapper.selectStatusByIdList(values); + for (ApiDefinitionExecResult model: idStatusList){ + String id = model.getId(); + String status = model.getStatus(); + returnMap.put(id,status); + } + return returnMap; + } + } } 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 0cf4e9556f..a9033ea186 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java @@ -863,4 +863,15 @@ public class ApiScenarioReportService { return count; } + public Map getReportStatusByReportIds(Collection values) { + if(CollectionUtils.isEmpty(values)){ + return new HashMap<>(); + } + Map map = new HashMap<>(); + List reportList = extApiScenarioReportMapper.selectStatusByIds(values); + for (ApiScenarioReport report : reportList) { + map.put(report.getId(),report.getStatus()); + } + return map; + } } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.java index 38f4841e8b..fa3d030d85 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.java @@ -4,6 +4,7 @@ import io.metersphere.api.dto.datacount.ExecutedCaseInfoResult; import io.metersphere.base.domain.ApiDefinitionExecResult; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; public interface ExtApiDefinitionExecResultMapper { @@ -24,4 +25,6 @@ public interface ExtApiDefinitionExecResultMapper { String selectExecResult(String resourceId); ApiDefinitionExecResult selectPlanApiMaxResultByTestIdAndType(String resourceId, String type); + + List selectStatusByIdList(@Param("ids")Collection values); } \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.xml index 99ee9a98bd..8abf019d6d 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiDefinitionExecResultMapper.xml @@ -92,4 +92,14 @@ where resource_id = #{resourceId,jdbcType=VARCHAR} and `type` = #{type, jdbcType=VARCHAR} ORDER BY start_time DESC LIMIT 1 + + + \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.java index 4a3cd2a159..8dcca9fa9b 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.java @@ -7,6 +7,7 @@ import io.metersphere.base.domain.ApiScenarioReport; import io.metersphere.dto.ApiReportCountDTO; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; public interface ExtApiScenarioReportMapper { @@ -29,4 +30,6 @@ public interface ExtApiScenarioReportMapper { List idList(@Param("request") QueryAPIReportRequest request); List countByApiScenarioId(); + + List selectStatusByIds(@Param("ids") Collection values); } \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.xml index ca1e3360dc..be041d4abe 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtApiScenarioReportMapper.xml @@ -285,4 +285,11 @@ WHERE scenario_id is not null GROUP BY scenario_id; + \ No newline at end of file diff --git a/backend/src/main/java/io/metersphere/track/dto/TestPlanLoadCaseDTO.java b/backend/src/main/java/io/metersphere/track/dto/TestPlanLoadCaseDTO.java index d37f3dd16e..e942f86ed7 100644 --- a/backend/src/main/java/io/metersphere/track/dto/TestPlanLoadCaseDTO.java +++ b/backend/src/main/java/io/metersphere/track/dto/TestPlanLoadCaseDTO.java @@ -24,6 +24,7 @@ public class TestPlanLoadCaseDTO extends TestPlanLoadCaseWithBLOBs { private String num; private String name; private ResponseDTO response; + private String reportId; @Getter @Setter diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java index d5cd6c4fee..6620cc67bd 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java @@ -419,10 +419,23 @@ public class TestPlanApiCaseService { // 开始选择执行模式 if (request.getConfig() != null && request.getConfig().getMode().equals(RunModeConstants.SERIAL.toString())) { Map executeQueue = new HashMap<>(); + + //记录案例线程结果以及执行失败的案例ID + Map executeThreadIdMap = new HashMap<>(); + planApiCases.forEach(testPlanApiCase -> { ApiDefinitionExecResult report = addResult(request, testPlanApiCase, APITestStatus.Waiting.name(), batchMapper); executeQueue.put(testPlanApiCase, report); + executeThreadIdMap.put(testPlanApiCase.getId(),report.getId()); }); + + //如果是测试计划生成报告的执行,则更新执行信息、执行线程信息。 + if(TestPlanReportExecuteCatch.containsReport(request.getPlanReportId())){ + if (!executeThreadIdMap.isEmpty()) { + TestPlanReportExecuteCatch.updateTestPlanThreadInfo(request.getPlanReportId(), executeThreadIdMap,null, null); + } + } + sqlSession.commit(); List reportIds = new LinkedList<>(); // 开始串行执行 @@ -433,8 +446,6 @@ public class TestPlanApiCaseService { try { Thread.currentThread().setName("TestPlanCase串行执行线程"); - //记录案例线程结果以及执行失败的案例ID - Map executeThreadIdMap = new HashMap<>(); List executeErrorList = new ArrayList<>(); for (TestPlanApiCase testPlanApiCase : executeQueue.keySet()) { @@ -479,7 +490,7 @@ public class TestPlanApiCaseService { break; } } - executeThreadIdMap.put(testPlanApiCase.getId(),randomUUID); + } catch (Exception e) { executeErrorList.add(testPlanApiCase.getId()); reportIds.remove(executeQueue.get(testPlanApiCase).getId()); @@ -507,9 +518,6 @@ public class TestPlanApiCaseService { } TestPlanReportExecuteCatch.updateApiTestPlanExecuteInfo(request.getPlanReportId(), executeErrorMap, null, null); } - if (!executeThreadIdMap.isEmpty()) { - TestPlanReportExecuteCatch.updateTestPlanThreadInfo(request.getPlanReportId(), executeThreadIdMap,null, null); - } } } catch (Exception e) { @@ -522,17 +530,23 @@ public class TestPlanApiCaseService { thread.start(); } else { Map executeQueue = new HashMap<>(); + //记录案例线程结果以及执行失败的案例ID + Map executeThreadIdMap = new HashMap<>(); planApiCases.forEach(testPlanApiCase -> { ApiDefinitionExecResult report = addResult(request, testPlanApiCase, APITestStatus.Running.name(), batchMapper); executeQueue.put(report.getId(), testPlanApiCase); + executeThreadIdMap.put(testPlanApiCase.getId(),report.getId()); MessageCache.caseExecResourceLock.put(report.getId(), report); }); sqlSession.commit(); + //如果是测试计划生成报告的执行,则更新执行信息、执行线程信息。 + if(TestPlanReportExecuteCatch.containsReport(request.getPlanReportId())){ + if (!executeThreadIdMap.isEmpty()) { + TestPlanReportExecuteCatch.updateTestPlanThreadInfo(request.getPlanReportId(), executeThreadIdMap,null, null); + } + } // 开始并发执行 - - //记录案例线程结果以及执行失败的案例ID - Map executeThreadIdMap = new HashMap<>(); List executeErrorList = new ArrayList<>(); for (String reportId : executeQueue.keySet()) { @@ -542,7 +556,6 @@ public class TestPlanApiCaseService { if (request.getConfig() != null && StringUtils.isNotEmpty(request.getConfig().getResourcePoolId())) { String testId = testPlanApiCase.getId()+":"+ request.getPlanReportId() + ":" +reportId; jMeterService.runTest(testId, reportId, request.getTriggerMode(), request.getPlanReportId(), request.getConfig()); - executeThreadIdMap.put(testPlanApiCase.getApiCaseId(),testPlanApiCase.getId()); } else { HashTree hashTree = generateHashTree(testPlanApiCase.getId()); if(StringUtils.isEmpty(debugId)){ @@ -550,7 +563,6 @@ public class TestPlanApiCaseService { } String testId = reportId+":"+ request.getPlanReportId(); jMeterService.runLocal(testId,request.getConfig(), hashTree, debugId, request.getTriggerMode()); - executeThreadIdMap.put(testPlanApiCase.getId(),reportId); } }catch (Exception e){ executeErrorList.add(testPlanApiCase.getId()); @@ -567,9 +579,6 @@ public class TestPlanApiCaseService { } TestPlanReportExecuteCatch.updateApiTestPlanExecuteInfo(request.getPlanReportId(), executeErrorMap, null, null); } - if (!executeThreadIdMap.isEmpty()) { - TestPlanReportExecuteCatch.updateTestPlanThreadInfo(request.getPlanReportId(), executeThreadIdMap,null, null); - } } } return request.getId(); @@ -678,14 +687,6 @@ public class TestPlanApiCaseService { return buildCases(apiTestCases); } - public List getAllCases(Collection caseIdList,String status) { - if (caseIdList.isEmpty()) { - return new ArrayList<>(); - } - List apiTestCases = extTestPlanApiCaseMapper.getFailureListByIds(caseIdList, status); - return buildCases(apiTestCases); - } - public List buildCases(List apiTestCases) { if (CollectionUtils.isEmpty(apiTestCases)) { return apiTestCases; @@ -713,4 +714,30 @@ public class TestPlanApiCaseService { testPlanApiCaseMapper::updateByPrimaryKeySelective); } + public List getByApiExecReportIds(Map testPlanApiCaseReportMap,boolean isFinish) { + if (testPlanApiCaseReportMap.isEmpty()) { + return new ArrayList<>(); + } + String defaultStatus = "Running"; + if(isFinish){ + defaultStatus = "error"; + } + List apiTestCases = extTestPlanApiCaseMapper.getFailureListByIds(testPlanApiCaseReportMap.keySet(),null); + Map reportResult = apiDefinitionExecResultService.selectReportResultByReportIds(testPlanApiCaseReportMap.values()); + for (TestPlanFailureApiDTO dto : apiTestCases) { + String testPlanApiCaseId = dto.getId(); + String reportId = testPlanApiCaseReportMap.get(testPlanApiCaseId); + dto.setReportId(reportId); + if(StringUtils.isEmpty(reportId)){ + dto.setStatus(defaultStatus); + }else { + String status = reportResult.get(reportId); + if(status == null){ + status = defaultStatus; + } + dto.setStatus(status); + } + } + return buildCases(apiTestCases); + } } diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java index 01a636f6c6..3ce7fc1505 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanReportService.java @@ -595,7 +595,7 @@ public class TestPlanReportService { Map> testPlanExecuteResult = executeInfo.getExecutedResult(); testPlanLog.info("ReportId[" + testPlanReport.getId() + "] COUNT OVER. COUNT RESULT :" + JSONObject.toJSONString(testPlanExecuteResult)); - TestPlanSimpleReportDTO reportDTO = testPlanService.buildPlanReport(executeInfo, testPlanReport.getTestPlanId(), false); + TestPlanSimpleReportDTO reportDTO = testPlanService.buildPlanReport(executeInfo, testPlanReport.getTestPlanId(), apiCaseIsOk && scenarioIsOk && performanceIsOk); reportDTO.setStartTime(testPlanReport.getStartTime()); long endTime = System.currentTimeMillis(); //全部结束时,更新时间 @@ -1102,7 +1102,7 @@ public class TestPlanReportService { //如果间隔超过5分钟没有案例执行完成,则把执行结果变成false long lastCountTime = executeInfo.getLastFinishedNumCountTime(); long nowTime = System.currentTimeMillis(); - if (nowTime - lastCountTime > 300000) { + if (nowTime - lastCountTime > 1800000) { TestPlanReportExecuteCatch.finishAllTask(planReportId); } } diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java index a4651d56ce..c8c882a2a4 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java @@ -450,9 +450,27 @@ public class TestPlanScenarioCaseService { return buildCases(apiTestCases); } - public List getAllCases(Collection ids, String status) { + public List getAllCases(Map idMap, boolean isFinish) { List apiTestCases = - extTestPlanScenarioCaseMapper.getFailureListByIds(ids, status); + extTestPlanScenarioCaseMapper.getFailureListByIds(idMap.keySet(), null); + + String defaultStatus = "Running"; + if(isFinish){ + defaultStatus = "Error"; + } + Map reportStatus = apiScenarioReportService.getReportStatusByReportIds(idMap.values()); + for (TestPlanFailureScenarioDTO dto: apiTestCases) { + String reportId = idMap.get(dto.getId()); + dto.setReportId(reportId); + if(reportId != null){ + String status = reportStatus.get(reportId); + if(status == null ){ + status = defaultStatus; + } + dto.setStatus(status); + } + + } return buildCases(apiTestCases); } diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanService.java index e274a06ea6..bf4a11a290 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanService.java @@ -36,7 +36,6 @@ import io.metersphere.log.utils.ReflexObjectUtil; import io.metersphere.log.vo.DetailColumn; import io.metersphere.log.vo.OperatingLogDetails; import io.metersphere.log.vo.track.TestPlanReference; -import io.metersphere.notice.service.NoticeSendService; import io.metersphere.performance.base.*; import io.metersphere.performance.dto.LoadTestExportJmx; import io.metersphere.performance.dto.MetricData; @@ -1118,7 +1117,7 @@ public class TestPlanService { //执行性能测试任务 Map performaneReportIDMap = new LinkedHashMap<>(); - + Map performaneThreadIDMap = new LinkedHashMap<>(); for (Map.Entry entry : performanceIdMap.entrySet()) { String id = entry.getKey(); String caseID = entry.getValue(); @@ -1155,12 +1154,14 @@ public class TestPlanService { } catch (Exception e) { e.printStackTrace(); } + performaneThreadIDMap.put(performanceRequest.getTestPlanLoadId(),reportId); if (StringUtils.isNotEmpty(reportId)) { executePerformanceIdMap.put(caseID, TestPlanApiExecuteStatus.RUNNING.name()); } else { executePerformanceIdMap.put(caseID, TestPlanApiExecuteStatus.PREPARE.name()); } } + TestPlanReportExecuteCatch.updateTestPlanThreadInfo(planReportId,null,null,performaneThreadIDMap); if (!performaneReportIDMap.isEmpty()) { //性能测试时保存性能测试报告ID,在结果返回时用于捕捉并进行 testPlanReportService.updatePerformanceInfo(testPlanReport, performaneReportIDMap, triggerMode); @@ -1707,7 +1708,7 @@ public class TestPlanService { } } - public void buildApiReport(TestPlanSimpleReportDTO report, JSONObject config, TestPlanExecuteInfo executeInfo, String planId, boolean saveResponse) { + public void buildApiReport(TestPlanSimpleReportDTO report, JSONObject config, TestPlanExecuteInfo executeInfo,boolean isFinish) { if (MapUtils.isEmpty(executeInfo.getApiCaseExecInfo()) && MapUtils.isEmpty(executeInfo.getApiScenarioCaseExecInfo())) { return; } @@ -1718,33 +1719,12 @@ public class TestPlanService { if (checkReportConfig(config, "api", "all")) { if (MapUtils.isNotEmpty(executeInfo.getApiCaseExecInfo())) { // 接口 - apiAllCases = testPlanApiCaseService.getAllCases(executeInfo.getApiCaseExecInfo().keySet(), null); - if (saveResponse) { - apiAllCases.forEach(item -> { - String apiReportid = executeInfo.getApiCaseReportMap().get(item.getId()); - ApiDefinitionExecResult result = apiDefinitionExecResultMapper.selectByPrimaryKey(apiReportid); - if (result != null) { - APIReportResult dbResult = apiDefinitionService.buildAPIReportResult(result); - if (dbResult != null && StringUtils.isNotBlank(dbResult.getContent())) { - item.setResponse(dbResult.getContent()); - } - } - }); - } + apiAllCases = testPlanApiCaseService.getByApiExecReportIds(executeInfo.getApiCaseExecuteThreadMap(),isFinish); report.setApiAllCases(apiAllCases); } if (MapUtils.isNotEmpty(executeInfo.getApiScenarioCaseExecInfo())) { //场景 - scenarioAllCases = testPlanScenarioCaseService.getAllCases(executeInfo.getApiScenarioCaseExecInfo().keySet(), null); - if (saveResponse) { - scenarioAllCases.forEach((item) -> { - String resultId = executeInfo.getApiScenarioReportMap().get(item.getId()); - APIScenarioReportResult result = apiScenarioReportService.get(resultId); - if (result != null) { - item.setResponse(result); - } - }); - } + scenarioAllCases = testPlanScenarioCaseService.getAllCases(executeInfo.getApiScenarioThreadMap(),isFinish); report.setScenarioAllCases(scenarioAllCases); } } @@ -1756,18 +1736,6 @@ public class TestPlanService { .filter(i -> StringUtils.isNotBlank(i.getExecResult()) && i.getExecResult().equals("error")) .collect(Collectors.toList()); - if (saveResponse) { - for (TestPlanFailureApiDTO item : apiFailureCases) { - String apiReportid = executeInfo.getApiCaseReportMap().get(item.getId()); - ApiDefinitionExecResult result = apiDefinitionExecResultMapper.selectByPrimaryKey(apiReportid); - if (result != null) { - APIReportResult dbResult = apiDefinitionService.buildAPIReportResult(result); - if (dbResult != null && StringUtils.isNotBlank(dbResult.getContent())) { - item.setResponse(dbResult.getContent()); - } - } - } - } } report.setApiFailureCases(apiFailureCases); @@ -1778,15 +1746,6 @@ public class TestPlanService { .filter(i -> StringUtils.isNotBlank(i.getLastResult()) && i.getLastResult().equals("Fail")) .collect(Collectors.toList()); - if (saveResponse) { - for (TestPlanFailureScenarioDTO item : scenarioFailureCases) { - String resultId = executeInfo.getApiScenarioReportMap().get(item.getId()); - APIScenarioReportResult result = apiScenarioReportService.get(resultId); - if (result != null) { - item.setResponse(result); - } - } - } } report.setScenarioFailureCases(scenarioFailureCases); } @@ -1801,6 +1760,11 @@ public class TestPlanService { List allCases = null; if (checkReportConfig(config, "load", "all")) { allCases = testPlanLoadCaseService.getAllCases(executeInfo.getLoadCaseExecInfo().keySet(), planId, null); + for (TestPlanLoadCaseDTO dto : + allCases) { + String reportId = executeInfo.getLoadCaseReportIdMap().get(dto.getId()); + dto.setReportId(reportId); + } if (saveResponse) { buildLoadResponse(allCases); } @@ -1819,7 +1783,7 @@ public class TestPlanService { } } - public TestPlanSimpleReportDTO buildPlanReport(TestPlanExecuteInfo executeInfo, String planId, boolean saveResponse) { + public TestPlanSimpleReportDTO buildPlanReport(TestPlanExecuteInfo executeInfo, String planId, boolean isFinish) { TestPlanWithBLOBs testPlan = testPlanMapper.selectByPrimaryKey(planId); if (testPlan != null) { String reportConfig = testPlan.getReportConfig(); @@ -1829,8 +1793,8 @@ public class TestPlanService { } TestPlanSimpleReportDTO report = getReport(planId); buildFunctionalReport(report, config, planId); - buildApiReport(report, config, executeInfo, planId, true); - buildLoadReport(report, config, executeInfo, planId, saveResponse); + buildApiReport(report, config, executeInfo, isFinish); + buildLoadReport(report, config, executeInfo, planId, false); return report; } else { return null; diff --git a/frontend/src/business/components/track/plan/view/comonents/report/detail/component/ApiCaseFailureResult.vue b/frontend/src/business/components/track/plan/view/comonents/report/detail/component/ApiCaseFailureResult.vue index 5700f416b0..4de1081582 100644 --- a/frontend/src/business/components/track/plan/view/comonents/report/detail/component/ApiCaseFailureResult.vue +++ b/frontend/src/business/components/track/plan/view/comonents/report/detail/component/ApiCaseFailureResult.vue @@ -157,13 +157,25 @@ export default { } }); } else { - // todo - getApiReport(row.id, (data) => { - if (data && data.content) { - this.showResponse = true; - this.response = JSON.parse(data.content); - } - }); + if(row.reportId){ + let url = "/api/definition/report/get/" + row.reportId; + this.$get(url, response => { + if (response.data) { + let data = response.data; + if (data && data.content) { + this.showResponse = true; + this.response = JSON.parse(data.content); + } + } + }); + }else { + getApiReport(row.id, (data) => { + if (data && data.content) { + this.showResponse = true; + this.response = JSON.parse(data.content); + } + }); + } } } }