refactor(测试计划): 重构测试计划执行报告状态处理

This commit is contained in:
fit2-zhao 2022-01-11 16:38:52 +08:00 committed by fit2-zhao
parent 6b0337cc74
commit 5edf97a356
4 changed files with 48 additions and 22 deletions

View File

@ -14,8 +14,10 @@ import io.metersphere.base.mapper.ext.ExtApiExecutionQueueMapper;
import io.metersphere.commons.constants.ApiRunMode;
import io.metersphere.commons.constants.TestPlanReportStatus;
import io.metersphere.commons.utils.BeanUtils;
import io.metersphere.commons.utils.CommonBeanFactory;
import io.metersphere.constants.RunModeConstants;
import io.metersphere.dto.ResultDTO;
import io.metersphere.track.service.TestPlanReportService;
import io.metersphere.utils.LoggerUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
@ -159,6 +161,10 @@ public class ApiExecutionQueueService {
if (StringUtils.equals(dto.getReportType(), RunModeConstants.SET_REPORT.toString())) {
apiScenarioReportService.margeReport(dto.getReportId());
}
// 更新测试计划报告
if (StringUtils.isNotEmpty(dto.getTestPlanReportId())) {
CommonBeanFactory.getBean(TestPlanReportService.class).finishedTestPlanReport(dto.getTestPlanReportId());
}
queueMapper.deleteByPrimaryKey(executionQueue.getId());
LoggerUtil.info("队列:" + dto.getQueueId() + " 执行结束");
}
@ -210,6 +216,16 @@ public class ApiExecutionQueueService {
}
});
}
// 处理测试计划报告
List<ApiExecutionQueue> queues = extApiExecutionQueueMapper.findTestPlanReportQueue();
if (CollectionUtils.isNotEmpty(queues)) {
queues.forEach(item -> {
// 更新测试计划报告
if (StringUtils.isNotEmpty(item.getReportId())) {
CommonBeanFactory.getBean(TestPlanReportService.class).finishedTestPlanReport(item.getReportId());
}
});
}
// 清除异常队列/一般是服务突然停止产生
extApiExecutionQueueMapper.delete();
}

View File

@ -1,5 +1,11 @@
package io.metersphere.base.mapper.ext;
import io.metersphere.base.domain.ApiExecutionQueue;
import java.util.List;
public interface ExtApiExecutionQueueMapper {
void delete();
List<ApiExecutionQueue> findTestPlanReportQueue();
}

View File

@ -4,4 +4,7 @@
<delete id="delete">
DELETE from api_execution_queue where id not IN (SELECT t1.queue_id from api_execution_queue_detail t1);
</delete>
<select id="findTestPlanReportQueue" resultType="io.metersphere.base.domain.ApiExecutionQueue">
select * from api_execution_queue where report_id !=null and run_mode='API_PLAN' and id not IN (SELECT t1.queue_id from api_execution_queue_detail t1) ;
</select>
</mapper>

View File

@ -319,29 +319,30 @@ public class TestPlanReportService {
public TestPlanReport finishedTestPlanReport(String testPlanReportId) {
TestPlanReport testPlanReport = this.getTestPlanReport(testPlanReportId);
//初始化测试计划包含组件信息
int[] componentIndexArr = new int[]{1, 3, 4};
testPlanReport.setComponents(JSONArray.toJSONString(componentIndexArr));
//计算测试计划状态
String testPlanStatus = this.getTestPlanReportStatus(testPlanReport, null);
testPlanReport.setStatus(testPlanStatus);
//如果测试案例没有未结束的功能用例则更新最后结束日期
TestPlanTestCaseMapper testPlanTestCaseMapper = CommonBeanFactory.getBean(TestPlanTestCaseMapper.class);
TestPlanTestCaseExample testPlanTestCaseExample = new TestPlanTestCaseExample();
testPlanTestCaseExample.createCriteria().andPlanIdEqualTo(testPlanReport.getTestPlanId()).andStatusNotEqualTo("Prepare");
long endTime = System.currentTimeMillis();
long testCaseCount = testPlanTestCaseMapper.countByExample(testPlanTestCaseExample);
boolean updateTestPlanTime = testCaseCount > 0;
if (updateTestPlanTime) {
testPlanReport.setEndTime(endTime);
testPlanReport.setUpdateTime(endTime);
}
if (testPlanReport != null) {
//初始化测试计划包含组件信息
int[] componentIndexArr = new int[]{1, 3, 4};
testPlanReport.setComponents(JSONArray.toJSONString(componentIndexArr));
//计算测试计划状态
testPlanReport.setStatus(TestPlanReportStatus.COMPLETED.name());
//如果测试案例没有未结束的功能用例则更新最后结束日期
TestPlanTestCaseMapper testPlanTestCaseMapper = CommonBeanFactory.getBean(TestPlanTestCaseMapper.class);
TestPlanTestCaseExample testPlanTestCaseExample = new TestPlanTestCaseExample();
testPlanTestCaseExample.createCriteria().andPlanIdEqualTo(testPlanReport.getTestPlanId()).andStatusNotEqualTo("Prepare");
long endTime = System.currentTimeMillis();
long testCaseCount = testPlanTestCaseMapper.countByExample(testPlanTestCaseExample);
boolean updateTestPlanTime = testCaseCount > 0;
if (updateTestPlanTime) {
testPlanReport.setEndTime(endTime);
testPlanReport.setUpdateTime(endTime);
}
//更新测试计划并发送通知
testPlanReport.setIsApiCaseExecuting(false);
testPlanReport.setIsScenarioExecuting(false);
testPlanReport.setIsPerformanceExecuting(false);
testPlanReport = this.update(testPlanReport);
//更新测试计划并发送通知
testPlanReport.setIsApiCaseExecuting(false);
testPlanReport.setIsScenarioExecuting(false);
testPlanReport.setIsPerformanceExecuting(false);
testPlanReport = this.update(testPlanReport);
}
return testPlanReport;
}