fix(测试跟踪): 测试计划删除报告时级联删除生成的自动化用例报告
--bug=1025762 --user=宋天阳 【测试跟踪】测试计划-查看历史报告的接口和场景用例内容为空 https://www.tapd.cn/55049933/s/1367408
This commit is contained in:
parent
c65163ee09
commit
f20411ed9c
|
@ -16,4 +16,23 @@ public interface ExtTestPlanReportContentMapper {
|
|||
boolean hasRunningReportByPlanIds(@Param("planIds") List<String> planIds);
|
||||
|
||||
boolean isApiBasicCountIsNull(String testPlanReportId);
|
||||
|
||||
List<String> selectScenarioReportByTestPlanReportIds(@Param("testPlanReportIds") List<String> testPlanReportIdList);
|
||||
|
||||
List<String> selectUiReportByTestPlanReportIds(@Param("testPlanReportIds") List<String> testPlanReportIdList);
|
||||
|
||||
int deleteApiReportByTestPlanReportList(@Param("testPlanReportIds") List<String> testPlanReportIdList);
|
||||
|
||||
void deleteScenarioReportByIds(@Param("testPlanReportIds") List<String> scenarioReportIds);
|
||||
|
||||
void deleteScenarioReportResultByIds(@Param("testPlanReportIds") List<String> scenarioReportIds);
|
||||
|
||||
void deleteScenarioReportStructureByIds(@Param("testPlanReportIds") List<String> scenarioReportIds);
|
||||
|
||||
void deleteUiReportByIds(@Param("testPlanReportIds") List<String> scenarioReportIds);
|
||||
|
||||
void deleteUiReportResultByIds(@Param("testPlanReportIds") List<String> scenarioReportIds);
|
||||
|
||||
void deleteUiReportStructureByIds(@Param("testPlanReportIds") List<String> scenarioReportIds);
|
||||
|
||||
}
|
||||
|
|
|
@ -24,12 +24,15 @@
|
|||
where test_plan_report_id = #{reportId}
|
||||
</select>
|
||||
<select id="hasRunningReport" resultType="java.lang.Boolean">
|
||||
select count(1) > 0 from test_plan_report
|
||||
where test_plan_id = #{planId} and status = 'RUNNING'
|
||||
order by create_time desc limit 1;
|
||||
select count(1) > 0
|
||||
from test_plan_report
|
||||
where test_plan_id = #{planId}
|
||||
and status = 'RUNNING'
|
||||
order by create_time desc
|
||||
limit 1;
|
||||
</select>
|
||||
<select id="hasRunningReportByPlanIds" resultType="java.lang.Boolean">
|
||||
select count(1) > 0 from test_plan_report
|
||||
select count(1) > 0 from test_plan_report
|
||||
where test_plan_id in
|
||||
<foreach collection="planIds" item="planId" separator="," open="(" close=")">
|
||||
#{planId}
|
||||
|
@ -40,7 +43,68 @@
|
|||
|
||||
<select id="isApiBasicCountIsNull" resultType="java.lang.Boolean">
|
||||
SELECT (api_base_count IS NULL OR api_base_count = '') AS apiCountIsNull
|
||||
FROM test_plan_report_content WHERE test_plan_report_id = #{0} limit 1
|
||||
FROM test_plan_report_content
|
||||
WHERE test_plan_report_id = #{0}
|
||||
limit 1
|
||||
</select>
|
||||
|
||||
<select id="selectScenarioReportByTestPlanReportIds" resultType="java.lang.String">
|
||||
SELECT id FROM api_scenario_report WHERE relevance_test_plan_report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
<select id="selectUiReportByTestPlanReportIds" resultType="java.lang.String">
|
||||
SELECT id FROM ui_scenario_report WHERE relevance_test_plan_report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
<delete id="deleteApiReportByTestPlanReportList" parameterType="java.lang.String">
|
||||
DELETE FROM api_definition_exec_result WHERE
|
||||
(
|
||||
relevance_test_plan_report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
)
|
||||
</delete>
|
||||
<delete id="deleteScenarioReportByIds" parameterType="java.lang.String">
|
||||
DELETE FROM api_scenario_report WHERE id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<delete id="deleteScenarioReportResultByIds" parameterType="java.lang.String">
|
||||
DELETE FROM api_scenario_report_result WHERE report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<delete id="deleteScenarioReportStructureByIds" parameterType="java.lang.String">
|
||||
DELETE FROM api_scenario_report_structure WHERE report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<delete id="deleteUiReportByIds" parameterType="java.lang.String">
|
||||
DELETE FROM ui_scenario_report WHERE id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<delete id="deleteUiReportResultByIds" parameterType="java.lang.String">
|
||||
DELETE FROM ui_scenario_report_result WHERE report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
<delete id="deleteUiReportStructureByIds" parameterType="java.lang.String">
|
||||
DELETE FROM ui_scenario_report_structure WHERE report_id IN
|
||||
<foreach collection="testPlanReportIds" item="id" separator="," open="(" close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
</mapper>
|
||||
|
|
|
@ -33,6 +33,7 @@ import io.metersphere.service.BaseProjectService;
|
|||
import io.metersphere.service.BaseUserService;
|
||||
import io.metersphere.service.IssuesService;
|
||||
import io.metersphere.service.ServiceUtils;
|
||||
import io.metersphere.utils.BatchProcessingUtil;
|
||||
import io.metersphere.utils.DiscoveryUtil;
|
||||
import io.metersphere.utils.LoggerUtil;
|
||||
import io.metersphere.xpack.track.dto.IssuesDao;
|
||||
|
@ -877,7 +878,39 @@ public class TestPlanReportService {
|
|||
TestPlanReportContentExample contentExample = new TestPlanReportContentExample();
|
||||
contentExample.createCriteria().andTestPlanReportIdIn(testPlanReportIdList);
|
||||
testPlanReportContentMapper.deleteByExample(contentExample);
|
||||
// todo 删除场景、接口的报告
|
||||
BatchProcessingUtil.batchDeleteApiReport(testPlanReportIdList, this::deleteApiCaseReportByTestPlanExecute, this::deleteScenarioReportByTestPlanExecute, this::deleteUiReportByTestPlanExecute);
|
||||
}
|
||||
}
|
||||
|
||||
//删除执行测试计划产生的接口用例报告
|
||||
private void deleteApiCaseReportByTestPlanExecute(List<String> testPlanReportIdList) {
|
||||
if (CollectionUtils.isNotEmpty(testPlanReportIdList)) {
|
||||
extTestPlanReportContentMapper.deleteApiReportByTestPlanReportList(testPlanReportIdList);
|
||||
}
|
||||
}
|
||||
|
||||
//删除执行测试计划产生的场景报告
|
||||
private void deleteScenarioReportByTestPlanExecute(List<String> testPlanReportIdList) {
|
||||
if (CollectionUtils.isNotEmpty(testPlanReportIdList)) {
|
||||
List<String> scenarioReportIds = extTestPlanReportContentMapper.selectScenarioReportByTestPlanReportIds(testPlanReportIdList);
|
||||
if (CollectionUtils.isNotEmpty(scenarioReportIds)) {
|
||||
extTestPlanReportContentMapper.deleteScenarioReportByIds(scenarioReportIds);
|
||||
extTestPlanReportContentMapper.deleteScenarioReportResultByIds(scenarioReportIds);
|
||||
extTestPlanReportContentMapper.deleteScenarioReportStructureByIds(scenarioReportIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//删除执行测试计划产生的UI报告
|
||||
private void deleteUiReportByTestPlanExecute(List<String> testPlanReportIdList) {
|
||||
if (CollectionUtils.isNotEmpty(testPlanReportIdList)) {
|
||||
List<String> scenarioReportIds = extTestPlanReportContentMapper.selectUiReportByTestPlanReportIds(testPlanReportIdList);
|
||||
if (CollectionUtils.isNotEmpty(scenarioReportIds)) {
|
||||
extTestPlanReportContentMapper.deleteUiReportByIds(scenarioReportIds);
|
||||
extTestPlanReportContentMapper.deleteUiReportResultByIds(scenarioReportIds);
|
||||
extTestPlanReportContentMapper.deleteUiReportStructureByIds(scenarioReportIds);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.apache.commons.collections.CollectionUtils;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
|
@ -15,6 +16,35 @@ public class BatchProcessingUtil {
|
|||
|
||||
private static final int BATCH_PROCESS_QUANTITY = 100;
|
||||
|
||||
public static void batchDeleteApiReport(List<String> testPlanReportIdList, Consumer<List<String>> deleteApiCaseReportFunc, Consumer<List<String>> deleteScenarioReportFunc, Consumer<List<String>> deleteUiReportFunc) {
|
||||
if (CollectionUtils.isNotEmpty(testPlanReportIdList)) {
|
||||
|
||||
int unDeleteReportIdCount = testPlanReportIdList.size();
|
||||
|
||||
while (BATCH_PROCESS_QUANTITY < testPlanReportIdList.size()) {
|
||||
List<String> deleteReportIds = testPlanReportIdList.subList(0, BATCH_PROCESS_QUANTITY);
|
||||
deleteApiCaseReportFunc.accept(deleteReportIds);
|
||||
deleteScenarioReportFunc.accept(deleteReportIds);
|
||||
deleteUiReportFunc.accept(deleteReportIds);
|
||||
|
||||
testPlanReportIdList.removeAll(deleteReportIds);
|
||||
|
||||
//未删除的报告数量如果未减少,跳出。防止死循环
|
||||
if (testPlanReportIdList.size() >= unDeleteReportIdCount) {
|
||||
break;
|
||||
} else {
|
||||
unDeleteReportIdCount = testPlanReportIdList.size();
|
||||
}
|
||||
}
|
||||
//处理剩余数据
|
||||
if (CollectionUtils.isNotEmpty(testPlanReportIdList)) {
|
||||
deleteApiCaseReportFunc.accept(testPlanReportIdList);
|
||||
deleteScenarioReportFunc.accept(testPlanReportIdList);
|
||||
deleteUiReportFunc.accept(testPlanReportIdList);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static List<TestCaseTest> selectTestCaseTestByPrimaryKey(List<String> primaryKeyList, Function<TestCaseTestExample, List<TestCaseTest>> func) {
|
||||
List<TestCaseTest> returnList = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(primaryKeyList)) {
|
||||
|
|
Loading…
Reference in New Issue