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 18674e62ad..2fce16be16 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiDefinitionExecResultService.java @@ -18,6 +18,7 @@ import io.metersphere.dto.RequestResult; import io.metersphere.dto.ResultDTO; import io.metersphere.notice.sender.NoticeModel; import io.metersphere.notice.service.NoticeSendService; +import io.metersphere.track.dto.PlanReportCaseDTO; import io.metersphere.track.dto.TestPlanDTO; import io.metersphere.track.request.testcase.QueryTestPlanRequest; import io.metersphere.track.request.testcase.TrackCount; @@ -374,4 +375,10 @@ public class ApiDefinitionExecResultService { public ApiDefinitionExecResult getInfo(String id) { return apiDefinitionExecResultMapper.selectByPrimaryKey(id); } + + public List selectForPlanReport(List apiReportIds) { + if (CollectionUtils.isEmpty(apiReportIds)) + return new ArrayList<>(); + return extApiDefinitionExecResultMapper.selectForPlanReport(apiReportIds); + } } 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 eafaac89c0..c5b1b16900 100644 --- a/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java +++ b/backend/src/main/java/io/metersphere/api/service/ApiScenarioReportService.java @@ -32,6 +32,7 @@ import io.metersphere.log.vo.api.ModuleReference; import io.metersphere.notice.sender.NoticeModel; import io.metersphere.notice.service.NoticeSendService; import io.metersphere.service.UserService; +import io.metersphere.track.dto.PlanReportCaseDTO; import io.metersphere.utils.LoggerUtil; import org.apache.commons.beanutils.BeanMap; import org.apache.commons.collections4.CollectionUtils; @@ -692,4 +693,9 @@ public class ApiScenarioReportService { } return status; } + + public List selectForPlanReport(List reportIds) { + return extApiScenarioReportMapper.selectForPlanReport(reportIds); + } + } 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 eb19dbb3bb..14aabfb7e1 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 @@ -2,6 +2,7 @@ package io.metersphere.base.mapper.ext; import io.metersphere.api.dto.datacount.ExecutedCaseInfoResult; import io.metersphere.base.domain.ApiDefinitionExecResult; +import io.metersphere.track.dto.PlanReportCaseDTO; import org.apache.ibatis.annotations.Param; import java.util.Collection; @@ -30,4 +31,5 @@ public interface ExtApiDefinitionExecResultMapper { List selectApiResultByProjectId(String projectId); -} \ No newline at end of file + List selectForPlanReport(@Param("ids") List apiReportIds); +} 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 4656d8e493..c0aaccdaaa 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 @@ -116,5 +116,12 @@ and (t3.project_id = #{projectId} OR t4.project_id = #{projectId} OR t6.project_id = #{projectId}) and t.`STATUS` in ('running', 'waiting') + - \ 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 f0f0624d0a..0550580099 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 @@ -5,6 +5,7 @@ import io.metersphere.api.dto.automation.APIScenarioReportResult; import io.metersphere.api.dto.datacount.ApiDataCountResult; import io.metersphere.base.domain.ApiScenarioReport; import io.metersphere.dto.ApiReportCountDTO; +import io.metersphere.track.dto.PlanReportCaseDTO; import org.apache.ibatis.annotations.Param; import java.util.Collection; @@ -34,4 +35,6 @@ public interface ExtApiScenarioReportMapper { List selectStatusByIds(@Param("ids") Collection values); List selectReportByProjectId(String projectId); -} \ No newline at end of file + + List selectForPlanReport(@Param("ids") List reportIds); +} 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 ac538bbfcd..4c4bc807c3 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 @@ -308,4 +308,11 @@ #{value} - \ No newline at end of file + + diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.java b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.java index 9d343ea954..09944878db 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.java +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.java @@ -5,6 +5,7 @@ import io.metersphere.base.domain.LoadTestReportWithBLOBs; import io.metersphere.dto.DashboardTestDTO; import io.metersphere.dto.ReportDTO; import io.metersphere.performance.controller.request.ReportRequest; +import io.metersphere.track.dto.PlanReportCaseDTO; import org.apache.ibatis.annotations.Param; import java.util.List; @@ -22,4 +23,6 @@ public interface ExtLoadTestReportMapper { void updateJmxContentIfAbsent(LoadTestReportWithBLOBs record); List selectReportByProjectId(String projectId); + + List selectForPlanReport(@Param("ids") List reportIds); } diff --git a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml index 17f71c714c..17a5d03290 100644 --- a/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml +++ b/backend/src/main/java/io/metersphere/base/mapper/ext/ExtLoadTestReportMapper.xml @@ -170,6 +170,13 @@ and t.status = 'running' + update load_test_report @@ -178,4 +185,4 @@ and jmx_content is null - \ No newline at end of file + diff --git a/backend/src/main/java/io/metersphere/commons/utils/TestPlanUtils.java b/backend/src/main/java/io/metersphere/commons/utils/TestPlanUtils.java index 2bb1db3996..6ecc903ae6 100644 --- a/backend/src/main/java/io/metersphere/commons/utils/TestPlanUtils.java +++ b/backend/src/main/java/io/metersphere/commons/utils/TestPlanUtils.java @@ -11,8 +11,7 @@ import java.util.Map; public class TestPlanUtils { - - public static void getStatusResultMap(Map reportStatusResultMap, String result) { + public static void buildStatusResultMap(Map reportStatusResultMap, String result) { if (StringUtils.isBlank(result)) { result = TestPlanTestCaseStatus.Prepare.name(); } @@ -35,6 +34,11 @@ public class TestPlanUtils { } } + /** + * 将map转成前端需要的数组数据 + * @param resultMap + * @param statusResult + */ public static void addToReportCommonStatusResultList(Map resultMap, List statusResult) { addToReportStatusResultList(resultMap, statusResult, TestPlanTestCaseStatus.Pass.name()); @@ -48,7 +52,10 @@ public class TestPlanUtils { addToReportStatusResultList(resultMap, statusResult, TestPlanTestCaseStatus.Prepare.name()); } - public static void calculatePlanReport(List planReportCaseDTOS, + /** + * 将当前用例状态对应的统计数据存储在map中 + */ + public static void buildStatusResultMap(List planReportCaseDTOS, Map statusResultMap, TestPlanSimpleReportDTO report, String successStatus) { planReportCaseDTOS.forEach(item -> { @@ -56,12 +63,14 @@ public class TestPlanUtils { String status = item.getStatus(); if (StringUtils.isNotBlank(status) && !StringUtils.equalsAny(status, TestPlanTestCaseStatus.Underway.name(), TestPlanTestCaseStatus.Prepare.name())) { + // 计算执行过的数量 report.setExecuteCount(report.getExecuteCount() + 1); if (StringUtils.equals(successStatus, status)) { + // 计算执行成功的数量 report.setPassCount(report.getPassCount() + 1); } } - TestPlanUtils.getStatusResultMap(statusResultMap, status); + buildStatusResultMap(statusResultMap, status); }); } } diff --git a/backend/src/main/java/io/metersphere/track/service/IssuesService.java b/backend/src/main/java/io/metersphere/track/service/IssuesService.java index c91dedea7d..b7a2fc3a26 100644 --- a/backend/src/main/java/io/metersphere/track/service/IssuesService.java +++ b/backend/src/main/java/io/metersphere/track/service/IssuesService.java @@ -560,7 +560,7 @@ public class IssuesService { Map statusResultMap = new HashMap<>(); planReportIssueDTOS.forEach(item -> { - String status = null; + String status; // 本地缺陷 if (StringUtils.equalsIgnoreCase(item.getPlatform(), IssuesManagePlatform.Local.name()) || StringUtils.isBlank(item.getPlatform())) { @@ -571,7 +571,7 @@ public class IssuesService { if (StringUtils.isBlank(status)) { status = IssuesStatus.NEW.toString(); } - TestPlanUtils.getStatusResultMap(statusResultMap, status); + TestPlanUtils.buildStatusResultMap(statusResultMap, status); }); Set status = statusResultMap.keySet(); status.forEach(item -> { 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 88ba6588d9..3bf3e3e25e 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanApiCaseService.java @@ -355,12 +355,20 @@ public class TestPlanApiCaseService { public void calculatePlanReport(String planId, TestPlanSimpleReportDTO report) { List planReportCaseDTOS = extTestPlanApiCaseMapper.selectForPlanReport(planId); + calculatePlanReport(report, planReportCaseDTOS); + } + public void calculatePlanReport(List apiReportIds, TestPlanSimpleReportDTO report) { + List planReportCaseDTOS = apiDefinitionExecResultService.selectForPlanReport(apiReportIds); + calculatePlanReport(report, planReportCaseDTOS); + } + + private void calculatePlanReport(TestPlanSimpleReportDTO report, List planReportCaseDTOS) { TestPlanApiResultReportDTO apiResult = report.getApiResult(); List statusResult = new ArrayList<>(); Map statusResultMap = new HashMap<>(); - TestPlanUtils.calculatePlanReport(planReportCaseDTOS, statusResultMap, report, "success"); + TestPlanUtils.buildStatusResultMap(planReportCaseDTOS, statusResultMap, report, "success"); TestPlanUtils.addToReportCommonStatusResultList(statusResultMap, statusResult); diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanLoadCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanLoadCaseService.java index 3bf79d74a7..ddce937440 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanLoadCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanLoadCaseService.java @@ -9,7 +9,10 @@ import io.metersphere.base.mapper.LoadTestMapper; import io.metersphere.base.mapper.LoadTestReportMapper; import io.metersphere.base.mapper.TestPlanLoadCaseMapper; import io.metersphere.base.mapper.TestPlanMapper; +import io.metersphere.base.mapper.ext.ExtLoadTestReportMapper; import io.metersphere.base.mapper.ext.ExtTestPlanLoadCaseMapper; +import io.metersphere.commons.constants.PerformanceTestStatus; +import io.metersphere.commons.constants.TestPlanLoadCaseStatus; import io.metersphere.commons.constants.TestPlanStatus; import io.metersphere.commons.exception.MSException; import io.metersphere.commons.utils.*; @@ -59,6 +62,8 @@ public class TestPlanLoadCaseService { @Resource private LoadTestReportMapper loadTestReportMapper; @Resource + private ExtLoadTestReportMapper extLoadTestReportMapper; + @Resource private LoadTestMapper loadTestMapper; @Resource @Lazy @@ -184,7 +189,7 @@ public class TestPlanLoadCaseService { TestPlanLoadCaseExample example = new TestPlanLoadCaseExample(); example.createCriteria().andLoadReportIdEqualTo(report.getId()); List cases = testPlanLoadCaseMapper.selectByExample(example); - if (CollectionUtils.isEmpty(cases) || !cases.get(0).getStatus().equals("success")) { + if (CollectionUtils.isEmpty(cases) || !cases.get(0).getStatus().equals(TestPlanLoadCaseStatus.success.name())) { break; } } @@ -352,7 +357,7 @@ public class TestPlanLoadCaseService { example.createCriteria() .andTestPlanIdEqualTo(planId) .andLoadCaseIdIn(performanceIds) - .andStatusEqualTo("error"); + .andStatusEqualTo(TestPlanLoadCaseStatus.error.name()); return testPlanLoadCaseMapper.countByExample(example) > 0 ? true : false; } @@ -367,12 +372,31 @@ public class TestPlanLoadCaseService { public void calculatePlanReport(String planId, TestPlanSimpleReportDTO report) { List planReportCaseDTOS = extTestPlanLoadCaseMapper.selectForPlanReport(planId); + calculatePlanReport(report, planReportCaseDTOS); + } + + public void calculatePlanReport(List reportIds, TestPlanSimpleReportDTO report) { + List planReportCaseDTOS = extLoadTestReportMapper.selectForPlanReport(reportIds); + // 性能测试的报告状态跟用例的执行状态不一样 + planReportCaseDTOS.forEach(item -> { + if (item.getStatus().equals(PerformanceTestStatus.Completed.name())) { + item.setStatus(TestPlanLoadCaseStatus.success.name()); + } else if (item.getStatus().equals(PerformanceTestStatus.Error.name())) { + item.setStatus(TestPlanLoadCaseStatus.error.name()); + } else { + item.setStatus(TestPlanLoadCaseStatus.run.name()); + } + }); + calculatePlanReport(report, planReportCaseDTOS); + } + + private void calculatePlanReport(TestPlanSimpleReportDTO report, List planReportCaseDTOS) { TestPlanLoadResultReportDTO loadResult = new TestPlanLoadResultReportDTO(); report.setLoadResult(loadResult); List statusResult = new ArrayList<>(); Map statusResultMap = new HashMap<>(); - TestPlanUtils.calculatePlanReport(planReportCaseDTOS, statusResultMap, report, "success"); + TestPlanUtils.buildStatusResultMap(planReportCaseDTOS, statusResultMap, report, TestPlanLoadCaseStatus.success.name()); TestPlanUtils.addToReportCommonStatusResultList(statusResultMap, statusResult); loadResult.setCaseData(statusResult); @@ -389,7 +413,7 @@ public class TestPlanLoadCaseService { } public List getFailureCases(String planId) { - List failureCases = extTestPlanLoadCaseMapper.getCases(planId, "error"); + List failureCases = extTestPlanLoadCaseMapper.getCases(planId, TestPlanLoadCaseStatus.error.name()); return buildCases(failureCases); } 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 569b08c740..b37e7329a6 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanScenarioCaseService.java @@ -430,11 +430,20 @@ public class TestPlanScenarioCaseService { public void calculatePlanReport(String planId, TestPlanSimpleReportDTO report) { List planReportCaseDTOS = extTestPlanScenarioCaseMapper.selectForPlanReport(planId); + calculatePlanReport(report, planReportCaseDTOS); + } + + public void calculatePlanReport(List reportIds, TestPlanSimpleReportDTO report) { + List planReportCaseDTOS = apiScenarioReportService.selectForPlanReport(reportIds); + calculatePlanReport(report, planReportCaseDTOS); + } + + private void calculatePlanReport(TestPlanSimpleReportDTO report, List planReportCaseDTOS) { TestPlanApiResultReportDTO apiResult = report.getApiResult(); List statusResult = new ArrayList<>(); Map statusResultMap = new HashMap<>(); - TestPlanUtils.calculatePlanReport(planReportCaseDTOS, statusResultMap, report, "Success"); + TestPlanUtils.buildStatusResultMap(planReportCaseDTOS, statusResultMap, report, "Success"); TestPlanUtils.addToReportCommonStatusResultList(statusResultMap, statusResult); TestPlanScenarioStepCountDTO stepCount = new TestPlanScenarioStepCountDTO(); for (PlanReportCaseDTO item : planReportCaseDTOS) { diff --git a/backend/src/main/java/io/metersphere/track/service/TestPlanTestCaseService.java b/backend/src/main/java/io/metersphere/track/service/TestPlanTestCaseService.java index c27744c890..7229a10ee8 100644 --- a/backend/src/main/java/io/metersphere/track/service/TestPlanTestCaseService.java +++ b/backend/src/main/java/io/metersphere/track/service/TestPlanTestCaseService.java @@ -384,7 +384,7 @@ public class TestPlanTestCaseService { List statusResult = new ArrayList<>(); Map statusResultMap = new HashMap<>(); - TestPlanUtils.calculatePlanReport(planReportCaseDTOS, statusResultMap, report, TestPlanTestCaseStatus.Pass.name()); + TestPlanUtils.buildStatusResultMap(planReportCaseDTOS, statusResultMap, report, TestPlanTestCaseStatus.Pass.name()); TestPlanUtils.addToReportCommonStatusResultList(statusResultMap, statusResult); TestPlanUtils.addToReportStatusResultList(statusResultMap, statusResult, TestPlanTestCaseStatus.Blocking.name());