测试跟踪首页数据
This commit is contained in:
parent
6ad8cac646
commit
7eee038ea3
|
@ -9,4 +9,6 @@ import java.util.List;
|
|||
public interface ExtProjectMapper {
|
||||
|
||||
List<ProjectDTO> getProjectWithWorkspace(@Param("proRequest") ProjectRequest request);
|
||||
|
||||
List<String> getProjectIdByWorkspaceId(String workspaceId);
|
||||
}
|
||||
|
|
|
@ -16,5 +16,10 @@
|
|||
</if>
|
||||
</where>
|
||||
</select>
|
||||
<select id="getProjectIdByWorkspaceId" resultType="java.lang.String">
|
||||
select id
|
||||
from project
|
||||
where workspace_id = #{workspaceId}
|
||||
</select>
|
||||
|
||||
</mapper>
|
|
@ -1,5 +1,6 @@
|
|||
package io.metersphere.base.mapper.ext;
|
||||
|
||||
import io.metersphere.track.dto.TestPlanDTOWithMetric;
|
||||
import io.metersphere.track.request.testcase.QueryTestPlanRequest;
|
||||
import io.metersphere.track.dto.TestPlanDTO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
@ -9,5 +10,5 @@ import java.util.List;
|
|||
public interface ExtTestPlanMapper {
|
||||
List<TestPlanDTO> list(@Param("request") QueryTestPlanRequest params);
|
||||
|
||||
List<TestPlanDTO> listRelate(@Param("request") QueryTestPlanRequest params);
|
||||
List<TestPlanDTOWithMetric> listRelate(@Param("request") QueryTestPlanRequest params);
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
</if>
|
||||
</select>
|
||||
|
||||
<select id="listRelate" resultType="io.metersphere.track.dto.TestPlanDTO">
|
||||
<select id="listRelate" resultType="io.metersphere.track.dto.TestPlanDTOWithMetric">
|
||||
select test_plan.*, project.name as project_name
|
||||
from test_plan
|
||||
left join project on test_plan.project_id = project.id
|
||||
|
|
|
@ -8,6 +8,7 @@ import io.metersphere.commons.utils.Pager;
|
|||
import io.metersphere.commons.utils.SessionUtils;
|
||||
import io.metersphere.track.dto.TestCaseReportMetricDTO;
|
||||
import io.metersphere.track.dto.TestPlanDTO;
|
||||
import io.metersphere.track.dto.TestPlanDTOWithMetric;
|
||||
import io.metersphere.track.request.testcase.PlanCaseRelevanceRequest;
|
||||
import io.metersphere.track.request.testcase.QueryTestPlanRequest;
|
||||
import io.metersphere.track.service.TestPlanService;
|
||||
|
@ -38,7 +39,7 @@ public class TestPlanController {
|
|||
}
|
||||
|
||||
@PostMapping("/list/all/relate")
|
||||
public List<TestPlanDTO> listRelateAll() {
|
||||
public List<TestPlanDTOWithMetric> listRelateAll() {
|
||||
return testPlanService.listRelateAllPlan();
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
package io.metersphere.track.dto;
|
||||
|
||||
import io.metersphere.base.domain.TestPlan;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class TestPlanDTOWithMetric extends TestPlanDTO {
|
||||
private Double passRate;
|
||||
private Double testRate;
|
||||
private Integer passed;
|
||||
private Integer tested;
|
||||
private Integer total;
|
||||
}
|
|
@ -20,6 +20,8 @@ public class QueryTestPlanCaseRequest extends TestPlanTestCase {
|
|||
|
||||
private List<String> planIds;
|
||||
|
||||
private List<String> projectIds;
|
||||
|
||||
private String workspaceId;
|
||||
|
||||
private String name;
|
||||
|
|
|
@ -72,7 +72,4 @@ public class TestCaseReportService {
|
|||
testPlanMapper.updateByPrimaryKeySelective(testPlan);
|
||||
return report.getId();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -6,6 +6,7 @@ import io.metersphere.base.mapper.TestCaseMapper;
|
|||
import io.metersphere.base.mapper.TestCaseNodeMapper;
|
||||
import io.metersphere.base.mapper.TestPlanMapper;
|
||||
import io.metersphere.base.mapper.TestPlanTestCaseMapper;
|
||||
import io.metersphere.base.mapper.ext.ExtProjectMapper;
|
||||
import io.metersphere.base.mapper.ext.ExtTestPlanMapper;
|
||||
import io.metersphere.base.mapper.ext.ExtTestPlanTestCaseMapper;
|
||||
import io.metersphere.commons.constants.TestPlanStatus;
|
||||
|
@ -13,6 +14,8 @@ import io.metersphere.commons.constants.TestPlanTestCaseStatus;
|
|||
import io.metersphere.commons.exception.MSException;
|
||||
import io.metersphere.commons.user.SessionUser;
|
||||
import io.metersphere.commons.utils.SessionUtils;
|
||||
import io.metersphere.controller.request.ProjectRequest;
|
||||
import io.metersphere.dto.ProjectDTO;
|
||||
import io.metersphere.track.dto.*;
|
||||
import io.metersphere.track.request.testcase.PlanCaseRelevanceRequest;
|
||||
import io.metersphere.track.request.testcase.QueryTestPlanRequest;
|
||||
|
@ -58,6 +61,9 @@ public class TestPlanService {
|
|||
@Resource
|
||||
TestCaseNodeService testCaseNodeService;
|
||||
|
||||
@Resource
|
||||
ExtProjectMapper extProjectMapper;
|
||||
|
||||
public void addTestPlan(TestPlan testPlan) {
|
||||
testPlan.setId(UUID.randomUUID().toString());
|
||||
testPlan.setStatus(TestPlanStatus.Prepare.name());
|
||||
|
@ -149,13 +155,70 @@ public class TestPlanService {
|
|||
return testPlanMapper.selectByExample(testPlanExample);
|
||||
}
|
||||
|
||||
public List<TestPlanDTO> listRelateAllPlan() {
|
||||
public List<TestPlanDTOWithMetric> listRelateAllPlan() {
|
||||
SessionUser user = SessionUtils.getUser();
|
||||
|
||||
QueryTestPlanRequest request = new QueryTestPlanRequest();
|
||||
request.setPrincipal(user.getId());
|
||||
request.setWorkspaceId(SessionUtils.getCurrentWorkspaceId());
|
||||
request.setPlanIds(extTestPlanTestCaseMapper.findRelateTestPlanId(user.getId()));
|
||||
return extTestPlanMapper.listRelate(request);
|
||||
|
||||
List<String> projectIds = extProjectMapper.getProjectIdByWorkspaceId(SessionUtils.getCurrentOrganizationId());
|
||||
|
||||
List<TestPlanDTOWithMetric> testPlans = extTestPlanMapper.listRelate(request);
|
||||
|
||||
Map<String, List<TestPlanCaseDTO>> testCaseMap = new HashMap<>();
|
||||
listTestCaseByProjectIds(projectIds).forEach(testCase -> {
|
||||
List<TestPlanCaseDTO> list = testCaseMap.get(testCase.getPlanId());
|
||||
if (list == null) {
|
||||
list = new ArrayList<>();
|
||||
list.add(testCase);
|
||||
testCaseMap.put(testCase.getPlanId(), list);
|
||||
} else {
|
||||
list.add(testCase);
|
||||
}
|
||||
});
|
||||
|
||||
testPlans.forEach(testPlan -> {
|
||||
List<TestPlanCaseDTO> testCases = testCaseMap.get(testPlan.getId());
|
||||
testPlan.setTested(0);
|
||||
testPlan.setPassed(0);
|
||||
testPlan.setTotal(0);
|
||||
if (testCases != null) {
|
||||
testPlan.setTotal(testCases.size());
|
||||
testCases.forEach(testCase -> {
|
||||
if (!StringUtils.equals(testCase.getStatus(), TestPlanTestCaseStatus.Prepare.name())
|
||||
&& !StringUtils.equals(testCase.getStatus(), TestPlanTestCaseStatus.Underway.name())) {
|
||||
testPlan.setTested(testPlan.getTested() + 1);
|
||||
if (StringUtils.equals(testCase.getStatus(), TestPlanTestCaseStatus.Pass.name())) {
|
||||
testPlan.setPassed(testPlan.getPassed() + 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
testPlan.setPassRate(getPercentWithTwoDecimals(testPlan.getTested() == 0 ? 0 : testPlan.getPassed()*1.0/testPlan.getTested()));
|
||||
testPlan.setTestRate(getPercentWithTwoDecimals(testPlan.getTotal() == 0 ? 0 : testPlan.getTested()*1.0/testPlan.getTotal()));
|
||||
});
|
||||
|
||||
return testPlans;
|
||||
}
|
||||
|
||||
private double getPercentWithTwoDecimals(double value) {
|
||||
return new BigDecimal(value)
|
||||
.setScale(4, BigDecimal.ROUND_HALF_UP)
|
||||
.doubleValue() * 100;
|
||||
}
|
||||
|
||||
public List<TestPlanCaseDTO> listTestCaseByPlanId(String planId) {
|
||||
QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest();
|
||||
request.setPlanId(planId);
|
||||
return extTestPlanTestCaseMapper.list(request);
|
||||
}
|
||||
|
||||
public List<TestPlanCaseDTO> listTestCaseByProjectIds(List<String> projectIds) {
|
||||
QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest();
|
||||
request.setProjectIds(projectIds);
|
||||
return extTestPlanTestCaseMapper.list(request);
|
||||
}
|
||||
|
||||
public TestCaseReportMetricDTO getMetric(String planId) {
|
||||
|
@ -180,9 +243,7 @@ public class TestPlanService {
|
|||
childIdMap.put(item.getId(), childIds);
|
||||
});
|
||||
|
||||
QueryTestPlanCaseRequest request = new QueryTestPlanCaseRequest();
|
||||
request.setPlanId(planId);
|
||||
List<TestPlanCaseDTO> testPlanTestCases = extTestPlanTestCaseMapper.list(request);
|
||||
List<TestPlanCaseDTO> testPlanTestCases = listTestCaseByPlanId(planId);
|
||||
|
||||
Map<String, TestCaseReportModuleResultDTO> moduleResultMap = new HashMap<>();
|
||||
|
||||
|
@ -192,7 +253,6 @@ public class TestPlanService {
|
|||
getModuleResultMap(childIdMap, moduleResultMap, testCase, nodeTrees);
|
||||
}
|
||||
|
||||
|
||||
nodeTrees.forEach(rootNode -> {
|
||||
TestCaseReportModuleResultDTO moduleResult = moduleResultMap.get(rootNode.getId());
|
||||
if (moduleResult != null) {
|
||||
|
@ -201,9 +261,7 @@ public class TestPlanService {
|
|||
});
|
||||
|
||||
for (TestCaseReportModuleResultDTO moduleResult : moduleResultMap.values()) {
|
||||
moduleResult.setPassRate(new BigDecimal(moduleResult.getPassCount()*1.0f/moduleResult.getCaseCount())
|
||||
.setScale(2, BigDecimal.ROUND_HALF_UP)
|
||||
.doubleValue() * 100);
|
||||
moduleResult.setPassRate(getPercentWithTwoDecimals(moduleResult.getPassCount()*1.0f/moduleResult.getCaseCount()));
|
||||
if (moduleResult.getCaseCount() <= 0) {
|
||||
moduleResultMap.remove(moduleResult.getModuleId());
|
||||
}
|
||||
|
|
|
@ -3,15 +3,15 @@
|
|||
<div class="main-content">
|
||||
<el-row>
|
||||
<el-col :span="15">
|
||||
<related-test-plan-list/>
|
||||
<related-test-plan-list ref="relatedTestPlanList"/>
|
||||
</el-col>
|
||||
<el-col :span="9">
|
||||
<el-row>
|
||||
<el-col>
|
||||
<test-case-side-list :title="'最近测试'" :type="'recent'"/>
|
||||
<test-case-side-list :title="'最近测试'" :type="'recent'" ref="testCaseRecentList"/>
|
||||
</el-col>
|
||||
<el-col>
|
||||
<test-case-side-list :title="'待完成'" :type="'pending'"/>
|
||||
<test-case-side-list :title="'待完成'" :type="'pending'" ref="testCasePendingList"/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
|
@ -25,7 +25,21 @@
|
|||
import TestCaseSideList from "./components/TestCaseSideList";
|
||||
export default {
|
||||
name: "TrackHome",
|
||||
components: {TestCaseSideList, RelatedTestPlanList}
|
||||
components: {TestCaseSideList, RelatedTestPlanList},
|
||||
watch: {
|
||||
'$route'(to,from) {
|
||||
if (to.path.indexOf('/track/home') > -1) {
|
||||
this.innitData();
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
innitData() {
|
||||
this.$refs.relatedTestPlanList.initTableData();
|
||||
this.$refs.testCaseRecentList.initTableData();
|
||||
this.$refs.testCasePendingList.initTableData();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
<template>
|
||||
<home-base-component :title="'我的计划'">
|
||||
|
||||
<home-base-component :title="'我的计划'" v-loading>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@row-click="intoPlan">
|
||||
@row-click="intoPlan"
|
||||
v-loading="result.loading">
|
||||
<el-table-column
|
||||
prop="name"
|
||||
fixed
|
||||
|
@ -24,22 +24,28 @@
|
|||
prop="projectName"
|
||||
:label="'通过率'"
|
||||
show-overflow-tooltip>
|
||||
20%
|
||||
<template v-slot:default="scope">
|
||||
{{scope.row.passRate}}%
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="projectName"
|
||||
:label="'已测用例'"
|
||||
show-overflow-tooltip>
|
||||
14/16
|
||||
<template v-slot:default="scope">
|
||||
{{scope.row.tested}}/{{scope.row.total}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="projectName"
|
||||
:label="'测试进度'"
|
||||
min-width="120"
|
||||
min-width="100"
|
||||
show-overflow-tooltip>
|
||||
<el-progress :percentage="50"></el-progress>
|
||||
<template v-slot:default="scope">
|
||||
<el-progress :percentage="scope.row.testRate"></el-progress>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
|
@ -56,7 +62,6 @@
|
|||
show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
|
||||
|
||||
</el-table>
|
||||
|
||||
</home-base-component>
|
||||
|
@ -72,6 +77,7 @@
|
|||
components: {MsTableOperator, PlanStageTableItem, PlanStatusTableItem, HomeBaseComponent},
|
||||
data() {
|
||||
return {
|
||||
result: {},
|
||||
tableData: []
|
||||
}
|
||||
},
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
<el-table
|
||||
row-key="id"
|
||||
@row-click="editTestCase"
|
||||
:data="tableData">
|
||||
:data="tableData"
|
||||
v-loading="result.loading">
|
||||
|
||||
<el-table-column
|
||||
prop="name"
|
||||
|
@ -54,6 +55,7 @@
|
|||
components: {PriorityTableItem, TypeTableItem, StatusTableItem, HomeBaseComponent},
|
||||
data() {
|
||||
return {
|
||||
result: {},
|
||||
tableData: [],
|
||||
}
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue