refactor(测试计划): 测试计划报告测试点展示优化
This commit is contained in:
parent
caf3b8c716
commit
56f78b42c8
|
@ -1,8 +1,11 @@
|
||||||
package io.metersphere.plan.dto.response;
|
package io.metersphere.plan.dto.response;
|
||||||
|
|
||||||
|
import io.metersphere.plan.dto.ReportDetailCasePageDTO;
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class TestPlanReportDetailCollectionResponse {
|
public class TestPlanReportDetailCollectionResponse {
|
||||||
|
|
||||||
|
@ -16,4 +19,7 @@ public class TestPlanReportDetailCollectionResponse {
|
||||||
private String planName;
|
private String planName;
|
||||||
@Schema(description = "位置")
|
@Schema(description = "位置")
|
||||||
private Long pos;
|
private Long pos;
|
||||||
|
|
||||||
|
@Schema(description = "用例数据")
|
||||||
|
List<ReportDetailCasePageDTO> reportDetailCaseList;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ public interface ExtTestPlanReportApiCaseMapper {
|
||||||
* @param request 请求参数
|
* @param request 请求参数
|
||||||
* @return 关联的用例集合
|
* @return 关联的用例集合
|
||||||
*/
|
*/
|
||||||
List<ReportDetailCasePageDTO> list(@Param("request") TestPlanReportDetailPageRequest request);
|
List<ReportDetailCasePageDTO> list(@Param("request") TestPlanReportDetailPageRequest request, @Param("sort") String sort);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询报告关联的测试集(接口)
|
* 分页查询报告关联的测试集(接口)
|
||||||
|
|
|
@ -54,6 +54,14 @@
|
||||||
and tprac.test_plan_collection_id = #{request.collectionId}
|
and tprac.test_plan_collection_id = #{request.collectionId}
|
||||||
</if>
|
</if>
|
||||||
<include refid="filter"/>
|
<include refid="filter"/>
|
||||||
|
<choose>
|
||||||
|
<when test="sort != null and sort != ''">
|
||||||
|
order by ${sort}
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
order by tprac.pos desc
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="listCollection" resultType="io.metersphere.plan.dto.response.TestPlanReportDetailCollectionResponse">
|
<select id="listCollection" resultType="io.metersphere.plan.dto.response.TestPlanReportDetailCollectionResponse">
|
||||||
|
|
|
@ -41,7 +41,7 @@ public interface ExtTestPlanReportApiScenarioMapper {
|
||||||
* @param request 请求参数
|
* @param request 请求参数
|
||||||
* @return 关联的用例集合
|
* @return 关联的用例集合
|
||||||
*/
|
*/
|
||||||
List<ReportDetailCasePageDTO> list(@Param("request") TestPlanReportDetailPageRequest request);
|
List<ReportDetailCasePageDTO> list(@Param("request") TestPlanReportDetailPageRequest request, @Param("sort") String sort);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询报告关联的测试集(场景)
|
* 分页查询报告关联的测试集(场景)
|
||||||
|
|
|
@ -53,6 +53,14 @@
|
||||||
and tpras.test_plan_collection_id = #{request.collectionId}
|
and tpras.test_plan_collection_id = #{request.collectionId}
|
||||||
</if>
|
</if>
|
||||||
<include refid="filter"/>
|
<include refid="filter"/>
|
||||||
|
<choose>
|
||||||
|
<when test="sort != null and sort != ''">
|
||||||
|
order by ${sort}
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
order by tpras.pos desc
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="listCollection" resultType="io.metersphere.plan.dto.response.TestPlanReportDetailCollectionResponse">
|
<select id="listCollection" resultType="io.metersphere.plan.dto.response.TestPlanReportDetailCollectionResponse">
|
||||||
|
|
|
@ -53,7 +53,7 @@ public interface ExtTestPlanReportFunctionalCaseMapper {
|
||||||
* @param request 请求参数
|
* @param request 请求参数
|
||||||
* @return 关联的用例集合
|
* @return 关联的用例集合
|
||||||
*/
|
*/
|
||||||
List<ReportDetailCasePageDTO> list(@Param("request") TestPlanReportDetailPageRequest request);
|
List<ReportDetailCasePageDTO> list(@Param("request") TestPlanReportDetailPageRequest request, @Param("sort") String sort);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询报告关联的测试集(功能)
|
* 分页查询报告关联的测试集(功能)
|
||||||
|
|
|
@ -74,6 +74,14 @@
|
||||||
and tprfc.test_plan_collection_id = #{request.collectionId}
|
and tprfc.test_plan_collection_id = #{request.collectionId}
|
||||||
</if>
|
</if>
|
||||||
<include refid="filter"/>
|
<include refid="filter"/>
|
||||||
|
<choose>
|
||||||
|
<when test="sort != null and sort != ''">
|
||||||
|
order by ${sort}
|
||||||
|
</when>
|
||||||
|
<otherwise>
|
||||||
|
order by tprfc.pos desc
|
||||||
|
</otherwise>
|
||||||
|
</choose>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="listCollection" resultType="io.metersphere.plan.dto.response.TestPlanReportDetailCollectionResponse">
|
<select id="listCollection" resultType="io.metersphere.plan.dto.response.TestPlanReportDetailCollectionResponse">
|
||||||
|
|
|
@ -480,9 +480,10 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量初始化报告关联功能用例数据
|
* 批量初始化报告关联功能用例数据
|
||||||
* @param sqlSession sql操作对象
|
*
|
||||||
* @param genParam 报告生成参数
|
* @param sqlSession sql操作对象
|
||||||
* @param report 报告
|
* @param genParam 报告生成参数
|
||||||
|
* @param report 报告
|
||||||
* @param bugCountMap 缺陷-用例 统计Map
|
* @param bugCountMap 缺陷-用例 统计Map
|
||||||
* @return 执行条数
|
* @return 执行条数
|
||||||
*/
|
*/
|
||||||
|
@ -539,10 +540,11 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量初始化报告关联接口用例数据
|
* 批量初始化报告关联接口用例数据
|
||||||
* @param sqlSession sql操作对象
|
*
|
||||||
* @param genParam 报告生成参数
|
* @param sqlSession sql操作对象
|
||||||
* @param report 报告
|
* @param genParam 报告生成参数
|
||||||
* @param project 项目
|
* @param report 报告
|
||||||
|
* @param project 项目
|
||||||
* @param bugCountMap 缺陷-用例 统计Map
|
* @param bugCountMap 缺陷-用例 统计Map
|
||||||
* @return 执行条数
|
* @return 执行条数
|
||||||
*/
|
*/
|
||||||
|
@ -590,10 +592,11 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量初始化报告关联场景用例数据
|
* 批量初始化报告关联场景用例数据
|
||||||
* @param sqlSession sql操作对象
|
*
|
||||||
* @param genParam 报告生成参数
|
* @param sqlSession sql操作对象
|
||||||
* @param report 报告
|
* @param genParam 报告生成参数
|
||||||
* @param project 项目
|
* @param report 报告
|
||||||
|
* @param project 项目
|
||||||
* @param bugCountMap 缺陷-用例 统计Map
|
* @param bugCountMap 缺陷-用例 统计Map
|
||||||
* @return 执行条数
|
* @return 执行条数
|
||||||
*/
|
*/
|
||||||
|
@ -641,9 +644,10 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量初始化报告关联缺陷数据
|
* 批量初始化报告关联缺陷数据
|
||||||
|
*
|
||||||
* @param sqlSession sql操作对象
|
* @param sqlSession sql操作对象
|
||||||
* @param genParam 报告生成参数
|
* @param genParam 报告生成参数
|
||||||
* @param report 报告
|
* @param report 报告
|
||||||
* @return 执行条数
|
* @return 执行条数
|
||||||
*/
|
*/
|
||||||
private long initReportBug(SqlSession sqlSession, TestPlanReportGenPreParam genParam, TestPlanReport report) {
|
private long initReportBug(SqlSession sqlSession, TestPlanReportGenPreParam genParam, TestPlanReport report) {
|
||||||
|
@ -819,6 +823,7 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取计划任务执行结果 (执行历史)
|
* 获取计划任务执行结果 (执行历史)
|
||||||
|
*
|
||||||
* @param taskId 任务ID
|
* @param taskId 任务ID
|
||||||
* @return 计划|组 执行结果
|
* @return 计划|组 执行结果
|
||||||
*/
|
*/
|
||||||
|
@ -851,6 +856,7 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取计划任务执行结果 (任务中心)
|
* 获取计划任务执行结果 (任务中心)
|
||||||
|
*
|
||||||
* @param taskId 任务ID
|
* @param taskId 任务ID
|
||||||
* @return 计划|组 执行结果
|
* @return 计划|组 执行结果
|
||||||
*/
|
*/
|
||||||
|
@ -924,9 +930,12 @@ public class TestPlanReportService {
|
||||||
public List<ReportDetailCasePageDTO> listReportDetailCases(TestPlanReportDetailPageRequest request, String caseType) {
|
public List<ReportDetailCasePageDTO> listReportDetailCases(TestPlanReportDetailPageRequest request, String caseType) {
|
||||||
List<ReportDetailCasePageDTO> detailCases;
|
List<ReportDetailCasePageDTO> detailCases;
|
||||||
switch (caseType) {
|
switch (caseType) {
|
||||||
case AssociateCaseType.FUNCTIONAL -> detailCases = extTestPlanReportFunctionalCaseMapper.list(request);
|
case AssociateCaseType.FUNCTIONAL ->
|
||||||
case AssociateCaseType.API_CASE -> detailCases = extTestPlanReportApiCaseMapper.list(request);
|
detailCases = extTestPlanReportFunctionalCaseMapper.list(request, request.getSortString());
|
||||||
case AssociateCaseType.API_SCENARIO -> detailCases = extTestPlanReportApiScenarioMapper.list(request);
|
case AssociateCaseType.API_CASE ->
|
||||||
|
detailCases = extTestPlanReportApiCaseMapper.list(request, request.getSortString());
|
||||||
|
case AssociateCaseType.API_SCENARIO ->
|
||||||
|
detailCases = extTestPlanReportApiScenarioMapper.list(request, request.getSortString());
|
||||||
default -> detailCases = new ArrayList<>();
|
default -> detailCases = new ArrayList<>();
|
||||||
}
|
}
|
||||||
List<String> distinctUserIds = detailCases.stream().map(ReportDetailCasePageDTO::getExecuteUser).distinct().collect(Collectors.toList());
|
List<String> distinctUserIds = detailCases.stream().map(ReportDetailCasePageDTO::getExecuteUser).distinct().collect(Collectors.toList());
|
||||||
|
@ -1311,15 +1320,47 @@ public class TestPlanReportService {
|
||||||
public List<TestPlanReportDetailCollectionResponse> listReportCollection(TestPlanReportDetailPageRequest request, String caseType) {
|
public List<TestPlanReportDetailCollectionResponse> listReportCollection(TestPlanReportDetailPageRequest request, String caseType) {
|
||||||
List<TestPlanReportDetailCollectionResponse> collections;
|
List<TestPlanReportDetailCollectionResponse> collections;
|
||||||
switch (caseType) {
|
switch (caseType) {
|
||||||
case CollectionQueryType.FUNCTIONAL -> collections = extTestPlanReportFunctionalCaseMapper.listCollection(request);
|
case CollectionQueryType.FUNCTIONAL ->
|
||||||
|
collections = extTestPlanReportFunctionalCaseMapper.listCollection(request);
|
||||||
case CollectionQueryType.API -> collections = extTestPlanReportApiCaseMapper.listCollection(request);
|
case CollectionQueryType.API -> collections = extTestPlanReportApiCaseMapper.listCollection(request);
|
||||||
case CollectionQueryType.SCENARIO -> collections = extTestPlanReportApiScenarioMapper.listCollection(request);
|
case CollectionQueryType.SCENARIO ->
|
||||||
|
collections = extTestPlanReportApiScenarioMapper.listCollection(request);
|
||||||
default -> collections = new ArrayList<>();
|
default -> collections = new ArrayList<>();
|
||||||
}
|
}
|
||||||
collections.sort(Comparator.comparing(TestPlanReportDetailCollectionResponse::getPos));
|
collections.sort(Comparator.comparing(TestPlanReportDetailCollectionResponse::getPos));
|
||||||
|
handCollectionItemData(collections, caseType, request);
|
||||||
return collections;
|
return collections;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 处理测试集子项数据
|
||||||
|
*
|
||||||
|
* @param collections
|
||||||
|
*/
|
||||||
|
private void handCollectionItemData(List<TestPlanReportDetailCollectionResponse> collections, String caseType, TestPlanReportDetailPageRequest request) {
|
||||||
|
if (CollectionUtils.isNotEmpty(collections)) {
|
||||||
|
TestPlanReportDetailPageRequest reportDetail = new TestPlanReportDetailPageRequest();
|
||||||
|
BeanUtils.copyBean(reportDetail, request);
|
||||||
|
collections.forEach(item -> {
|
||||||
|
reportDetail.setCollectionId(item.getId());
|
||||||
|
reportDetail.setDetailReportIds(getActualReportIds(request.getReportId()));
|
||||||
|
List<ReportDetailCasePageDTO> caseList = new ArrayList<>();
|
||||||
|
switch (caseType) {
|
||||||
|
case CollectionQueryType.FUNCTIONAL ->
|
||||||
|
caseList = listReportDetailCases(reportDetail, AssociateCaseType.FUNCTIONAL);
|
||||||
|
case CollectionQueryType.API ->
|
||||||
|
caseList = listReportDetailCases(reportDetail, AssociateCaseType.API_CASE);
|
||||||
|
case CollectionQueryType.SCENARIO ->
|
||||||
|
caseList = listReportDetailCases(reportDetail, AssociateCaseType.API_SCENARIO);
|
||||||
|
default -> caseList = new ArrayList<>();
|
||||||
|
}
|
||||||
|
item.setReportDetailCaseList(caseList);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 预览富文本文件
|
* 预览富文本文件
|
||||||
*
|
*
|
||||||
|
@ -1420,6 +1461,7 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算计划任务的用例执行情况(实时, 并不取计划报告的最终汇总)
|
* 计算计划任务的用例执行情况(实时, 并不取计划报告的最终汇总)
|
||||||
|
*
|
||||||
* @return 用例执行情况
|
* @return 用例执行情况
|
||||||
*/
|
*/
|
||||||
private TestPlanTaskReportResponse calcTaskExecActual(String reportId, TestPlanTaskReportResponse testPlanTaskReportResponse) {
|
private TestPlanTaskReportResponse calcTaskExecActual(String reportId, TestPlanTaskReportResponse testPlanTaskReportResponse) {
|
||||||
|
@ -1443,6 +1485,7 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算计划任务的用例执行情况(取计划报告的最终汇总)
|
* 计算计划任务的用例执行情况(取计划报告的最终汇总)
|
||||||
|
*
|
||||||
* @return 用例执行情况
|
* @return 用例执行情况
|
||||||
*/
|
*/
|
||||||
private TestPlanReportDetailResponse calcTaskExecFinish(String reportId, String detailName, TestPlanReportDetailResponse detail) {
|
private TestPlanReportDetailResponse calcTaskExecFinish(String reportId, String detailName, TestPlanReportDetailResponse detail) {
|
||||||
|
@ -1459,13 +1502,14 @@ public class TestPlanReportService {
|
||||||
detail.setExecuteCount(CountUtils.summarizeProperties(List.of(detail.getApiCaseCount(), detail.getApiScenarioCount())));
|
detail.setExecuteCount(CountUtils.summarizeProperties(List.of(detail.getApiCaseCount(), detail.getApiScenarioCount())));
|
||||||
detail.setCaseTotal(detail.getExecuteCount().sum());
|
detail.setCaseTotal(detail.getExecuteCount().sum());
|
||||||
CaseCount executeCount = detail.getExecuteCount();
|
CaseCount executeCount = detail.getExecuteCount();
|
||||||
detail.setExecuteRate(RateCalculateUtils.divWithPrecision((executeCount.sum() - executeCount.getPending()), executeCount.sum(), 2));
|
detail.setExecuteRate(RateCalculateUtils.divWithPrecision((executeCount.sum() - executeCount.getPending()), executeCount.sum(), 2));
|
||||||
detail.setPassRate(RateCalculateUtils.divWithPrecision(executeCount.getSuccess(), executeCount.sum(), 2));
|
detail.setPassRate(RateCalculateUtils.divWithPrecision(executeCount.getSuccess(), executeCount.sum(), 2));
|
||||||
return detail;
|
return detail;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取实际的报告ID集合 (计划组报告则会返回多个)
|
* 获取实际的报告ID集合 (计划组报告则会返回多个)
|
||||||
|
*
|
||||||
* @param reportId 报告ID
|
* @param reportId 报告ID
|
||||||
* @return 报告ID集合
|
* @return 报告ID集合
|
||||||
*/
|
*/
|
||||||
|
@ -1484,6 +1528,7 @@ public class TestPlanReportService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取报告汇总详情
|
* 获取报告汇总详情
|
||||||
|
*
|
||||||
* @param reportId 报告ID
|
* @param reportId 报告ID
|
||||||
* @return 汇总详情
|
* @return 汇总详情
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue