fix(测试跟踪): 优化测试计划报告的计算方式
--bug=1019086 --user=宋天阳 #18478 测试计划关联用例多时(500多个场景用例),查看报告耗时较长(30-60s),建议优化 https://www.tapd.cn/55049933/s/1283179
This commit is contained in:
parent
b426ee51a2
commit
8c94e79ba3
|
@ -611,6 +611,7 @@ public class TestPlanLoadCaseService {
|
|||
Map config = request.getConfig();
|
||||
Map<String, String> loadCaseReportMap = request.getReportIdMap();
|
||||
if (MapUtils.isEmpty(loadCaseReportMap)) {
|
||||
loadPlanReport.setLoadAllCases(new ArrayList<>());
|
||||
return loadPlanReport;
|
||||
}
|
||||
if (ServiceUtils.checkConfigEnable(config, "load")) {
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.metersphere.plan.service;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.metersphere.base.domain.*;
|
||||
import io.metersphere.base.mapper.*;
|
||||
import io.metersphere.base.mapper.ext.ExtTestPlanMapper;
|
||||
|
@ -557,31 +558,35 @@ public class TestPlanReportService {
|
|||
content.setPassRate(null);
|
||||
extTestPlanReportMapper.setApiBaseCountAndPassRateIsNullById(content.getId());
|
||||
}
|
||||
if (content != null) {
|
||||
//更新content表对结束日期
|
||||
if (!StringUtils.equalsAnyIgnoreCase(testPlanReport.getStatus(), APITestStatus.Rerunning.name())) {
|
||||
content.setStartTime(testPlanReport.getStartTime());
|
||||
content.setEndTime(endTime);
|
||||
}
|
||||
testPlanReportContentMapper.updateByExampleSelective(content, contentExample);
|
||||
}
|
||||
//计算测试计划状态
|
||||
if (StringUtils.equalsIgnoreCase(status, TestPlanReportStatus.COMPLETED.name())) {
|
||||
testPlanReport.setStatus(TestPlanReportStatus.SUCCESS.name());
|
||||
HttpHeaderUtils.runAsUser("admin");
|
||||
try {
|
||||
testPlanService.checkStatus(testPlanReport.getTestPlanId());
|
||||
} finally {
|
||||
HttpHeaderUtils.clearUser();
|
||||
}
|
||||
} else {
|
||||
testPlanReport.setStatus(status);
|
||||
}
|
||||
|
||||
//更新测试计划并发送通知
|
||||
testPlanReport.setIsApiCaseExecuting(false);
|
||||
testPlanReport.setIsScenarioExecuting(false);
|
||||
testPlanReport.setIsPerformanceExecuting(false);
|
||||
testPlanReport.setIsUiScenarioExecuting(false);
|
||||
//计算测试计划状态
|
||||
|
||||
try {
|
||||
if (StringUtils.equalsIgnoreCase(status, TestPlanReportStatus.COMPLETED.name())) {
|
||||
testPlanReport.setStatus(TestPlanReportStatus.SUCCESS.name());
|
||||
HttpHeaderUtils.runAsUser("admin");
|
||||
testPlanService.checkStatus(testPlanReport.getTestPlanId());
|
||||
} else {
|
||||
testPlanReport.setStatus(status);
|
||||
}
|
||||
|
||||
if (content != null) {
|
||||
//更新content表对结束日期
|
||||
if (!StringUtils.equalsAnyIgnoreCase(testPlanReport.getStatus(), APITestStatus.Rerunning.name())) {
|
||||
content.setStartTime(testPlanReport.getStartTime());
|
||||
content.setEndTime(endTime);
|
||||
}
|
||||
this.initTestPlanReportBaseCount(testPlanReport, content);
|
||||
testPlanReportContentMapper.updateByExampleSelective(content, contentExample);
|
||||
}
|
||||
} finally {
|
||||
HttpHeaderUtils.clearUser();
|
||||
}
|
||||
|
||||
TestPlanExecutionQueueExample testPlanExecutionQueueExample = new TestPlanExecutionQueueExample();
|
||||
testPlanExecutionQueueExample.createCriteria().andReportIdEqualTo(testPlanReportId);
|
||||
|
@ -616,6 +621,13 @@ public class TestPlanReportService {
|
|||
return testPlanReport;
|
||||
}
|
||||
|
||||
private void initTestPlanReportBaseCount(TestPlanReport testPlanReport, TestPlanReportContentWithBLOBs reportContent) {
|
||||
if (testPlanReport != null && reportContent != null) {
|
||||
TestPlanReportBuildResultDTO reportBuildResultDTO = testPlanService.buildPlanReport(testPlanReport, reportContent);
|
||||
reportContent.setApiBaseCount(JSONObject.toJSONString(reportBuildResultDTO.getTestPlanSimpleReportDTO()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param planReportId 测试计划报告ID
|
||||
* @param resourceRunMode 资源的运行模式,triggerMode非Scedule可以为null
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package io.metersphere.plan.service;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.google.gson.Gson;
|
||||
import io.metersphere.base.domain.*;
|
||||
import io.metersphere.base.mapper.*;
|
||||
|
@ -1263,10 +1264,10 @@ public class TestPlanService {
|
|||
}
|
||||
TestPlanExecuteReportDTO testPlanExecuteReportDTO = testPlanReportService.genTestPlanExecuteReportDTOByTestPlanReportContent(testPlanReportContentWithBLOBs);
|
||||
TestPlanSimpleReportDTO report = null;
|
||||
boolean apiBaseInfoChanged = false;
|
||||
if (StringUtils.isEmpty(testPlanReportContentWithBLOBs.getApiBaseCount())) {
|
||||
report = getReport(testPlanReport.getTestPlanId(), testPlanExecuteReportDTO);
|
||||
testPlanReportContentWithBLOBs.setApiBaseCount(JSON.toJSONString(report));
|
||||
returnDTO.setApiBaseInfoChanged(true);
|
||||
apiBaseInfoChanged = true;
|
||||
} else {
|
||||
try {
|
||||
report = JSON.parseObject(testPlanReportContentWithBLOBs.getApiBaseCount(), TestPlanSimpleReportDTO.class);
|
||||
|
@ -1275,15 +1276,28 @@ public class TestPlanService {
|
|||
}
|
||||
if (report == null) {
|
||||
report = getReport(testPlanReport.getTestPlanId(), testPlanExecuteReportDTO);
|
||||
testPlanReportContentWithBLOBs.setApiBaseCount(JSON.toJSONString(report));
|
||||
returnDTO.setApiBaseInfoChanged(true);
|
||||
apiBaseInfoChanged = true;
|
||||
}
|
||||
}
|
||||
buildFunctionalReport(report, config, testPlanReport.getTestPlanId());
|
||||
buildApiReport(report, config, testPlanExecuteReportDTO);
|
||||
buildLoadReport(report, config, testPlanExecuteReportDTO.getTestPlanLoadCaseIdAndReportIdMap(), false);
|
||||
if (report.getFunctionAllCases() == null || report.getIssueList() == null) {
|
||||
buildFunctionalReport(report, config, testPlanReport.getTestPlanId());
|
||||
apiBaseInfoChanged = true;
|
||||
}
|
||||
if (report.getApiAllCases() == null && report.getScenarioAllCases() == null) {
|
||||
buildApiReport(report, config, testPlanExecuteReportDTO);
|
||||
apiBaseInfoChanged = true;
|
||||
}
|
||||
if (report.getLoadAllCases() == null) {
|
||||
buildLoadReport(report, config, testPlanExecuteReportDTO.getTestPlanLoadCaseIdAndReportIdMap(), false);
|
||||
apiBaseInfoChanged = true;
|
||||
}
|
||||
buildUiReport(report, config, testPlanReport.getTestPlanId(), testPlanExecuteReportDTO, false);
|
||||
returnDTO.setTestPlanSimpleReportDTO(report);
|
||||
|
||||
if (apiBaseInfoChanged) {
|
||||
testPlanReportContentWithBLOBs.setApiBaseCount(JSONObject.toJSONString(report));
|
||||
returnDTO.setApiBaseInfoChanged(true);
|
||||
}
|
||||
return returnDTO;
|
||||
} else {
|
||||
returnDTO.setTestPlanSimpleReportDTO(new TestPlanSimpleReportDTO());
|
||||
|
|
Loading…
Reference in New Issue