测试报告失败列表
This commit is contained in:
parent
ae8c7ee631
commit
cc4e72906e
|
@ -36,6 +36,9 @@
|
||||||
#{nodeId}
|
#{nodeId}
|
||||||
</foreach>
|
</foreach>
|
||||||
</if>
|
</if>
|
||||||
|
<if test="request.status != null">
|
||||||
|
and test_plan_test_case.status = #{request.status}
|
||||||
|
</if>
|
||||||
<if test="request.executor != null">
|
<if test="request.executor != null">
|
||||||
and test_plan_test_case.executor = #{request.executor}
|
and test_plan_test_case.executor = #{request.executor}
|
||||||
</if>
|
</if>
|
||||||
|
|
|
@ -11,6 +11,7 @@ public class TestCaseReportMetricDTO {
|
||||||
|
|
||||||
private List<TestCaseReportStatusResultDTO> executeResult;
|
private List<TestCaseReportStatusResultDTO> executeResult;
|
||||||
private List<TestCaseReportModuleResultDTO> moduleExecuteResult;
|
private List<TestCaseReportModuleResultDTO> moduleExecuteResult;
|
||||||
|
private List<TestPlanCaseDTO> failureTestCases;
|
||||||
private List<String> executors;
|
private List<String> executors;
|
||||||
private String principal;
|
private String principal;
|
||||||
private Long startTime;
|
private Long startTime;
|
||||||
|
|
|
@ -25,4 +25,6 @@ public class QueryTestPlanCaseRequest extends TestPlanTestCase {
|
||||||
private String workspaceId;
|
private String workspaceId;
|
||||||
|
|
||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
|
private String status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,10 +3,7 @@ package io.metersphere.track.service;
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import io.metersphere.base.domain.*;
|
import io.metersphere.base.domain.*;
|
||||||
import io.metersphere.base.mapper.TestCaseMapper;
|
import io.metersphere.base.mapper.*;
|
||||||
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.ExtProjectMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtTestPlanMapper;
|
import io.metersphere.base.mapper.ext.ExtTestPlanMapper;
|
||||||
import io.metersphere.base.mapper.ext.ExtTestPlanTestCaseMapper;
|
import io.metersphere.base.mapper.ext.ExtTestPlanTestCaseMapper;
|
||||||
|
@ -67,6 +64,9 @@ public class TestPlanService {
|
||||||
@Resource
|
@Resource
|
||||||
ExtProjectMapper extProjectMapper;
|
ExtProjectMapper extProjectMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
TestCaseReportMapper testCaseReportMapper;
|
||||||
|
|
||||||
public void addTestPlan(TestPlan testPlan) {
|
public void addTestPlan(TestPlan testPlan) {
|
||||||
if (getTestPlanByName(testPlan.getName()).size() > 0) {
|
if (getTestPlanByName(testPlan.getName()).size() > 0) {
|
||||||
MSException.throwException(Translator.get("plan_name_already_exists"));
|
MSException.throwException(Translator.get("plan_name_already_exists"));
|
||||||
|
@ -256,6 +256,8 @@ public class TestPlanService {
|
||||||
QueryTestPlanRequest queryTestPlanRequest = new QueryTestPlanRequest();
|
QueryTestPlanRequest queryTestPlanRequest = new QueryTestPlanRequest();
|
||||||
queryTestPlanRequest.setId(planId);
|
queryTestPlanRequest.setId(planId);
|
||||||
TestPlanDTO testPlan = extTestPlanMapper.list(queryTestPlanRequest).get(0);
|
TestPlanDTO testPlan = extTestPlanMapper.list(queryTestPlanRequest).get(0);
|
||||||
|
TestCaseReport testCaseReport = testCaseReportMapper.selectByPrimaryKey(testPlan.getReportId());
|
||||||
|
// testCaseReport.get
|
||||||
|
|
||||||
Set<String> executors = new HashSet<>();
|
Set<String> executors = new HashSet<>();
|
||||||
Map<String, TestCaseReportStatusResultDTO> reportStatusResultMap = new HashMap<>();
|
Map<String, TestCaseReportStatusResultDTO> reportStatusResultMap = new HashMap<>();
|
||||||
|
@ -274,6 +276,7 @@ public class TestPlanService {
|
||||||
});
|
});
|
||||||
|
|
||||||
List<TestPlanCaseDTO> testPlanTestCases = listTestCaseByPlanId(planId);
|
List<TestPlanCaseDTO> testPlanTestCases = listTestCaseByPlanId(planId);
|
||||||
|
List<TestPlanCaseDTO> failureTestCases = new ArrayList<>();
|
||||||
|
|
||||||
Map<String, TestCaseReportModuleResultDTO> moduleResultMap = new HashMap<>();
|
Map<String, TestCaseReportModuleResultDTO> moduleResultMap = new HashMap<>();
|
||||||
|
|
||||||
|
@ -281,6 +284,7 @@ public class TestPlanService {
|
||||||
executors.add(testCase.getExecutor());
|
executors.add(testCase.getExecutor());
|
||||||
getStatusResultMap(reportStatusResultMap, testCase);
|
getStatusResultMap(reportStatusResultMap, testCase);
|
||||||
getModuleResultMap(childIdMap, moduleResultMap, testCase, nodeTrees);
|
getModuleResultMap(childIdMap, moduleResultMap, testCase, nodeTrees);
|
||||||
|
getFailureTestCases(failureTestCases, testCase);
|
||||||
}
|
}
|
||||||
|
|
||||||
nodeTrees.forEach(rootNode -> {
|
nodeTrees.forEach(rootNode -> {
|
||||||
|
@ -303,10 +307,17 @@ public class TestPlanService {
|
||||||
testCaseReportMetricDTO.setExecutors(new ArrayList<>(executors));
|
testCaseReportMetricDTO.setExecutors(new ArrayList<>(executors));
|
||||||
testCaseReportMetricDTO.setExecuteResult(new ArrayList<>(reportStatusResultMap.values()));
|
testCaseReportMetricDTO.setExecuteResult(new ArrayList<>(reportStatusResultMap.values()));
|
||||||
testCaseReportMetricDTO.setModuleExecuteResult(new ArrayList<>(moduleResultMap.values()));
|
testCaseReportMetricDTO.setModuleExecuteResult(new ArrayList<>(moduleResultMap.values()));
|
||||||
|
testCaseReportMetricDTO.setFailureTestCases(failureTestCases);
|
||||||
|
|
||||||
return testCaseReportMetricDTO;
|
return testCaseReportMetricDTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void getFailureTestCases(List<TestPlanCaseDTO> failureTestCases, TestPlanCaseDTO testCase) {
|
||||||
|
if (StringUtils.equals(testCase.getStatus(), TestPlanTestCaseStatus.Failure.name())) {
|
||||||
|
failureTestCases.add(testCase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void getStatusResultMap(Map<String, TestCaseReportStatusResultDTO> reportStatusResultMap, TestPlanCaseDTO testCase) {
|
private void getStatusResultMap(Map<String, TestCaseReportStatusResultDTO> reportStatusResultMap, TestPlanCaseDTO testCase) {
|
||||||
TestCaseReportStatusResultDTO statusResult = reportStatusResultMap.get(testCase.getStatus());
|
TestCaseReportStatusResultDTO statusResult = reportStatusResultMap.get(testCase.getStatus());
|
||||||
if (statusResult == null) {
|
if (statusResult == null) {
|
||||||
|
|
|
@ -0,0 +1,119 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
<common-component :title="'失败用例'">
|
||||||
|
<template>
|
||||||
|
<el-table
|
||||||
|
row-key="id"
|
||||||
|
:data="failureTestCases">
|
||||||
|
<el-table-column
|
||||||
|
prop="name"
|
||||||
|
:label="$t('commons.name')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="priority"
|
||||||
|
column-key="priority"
|
||||||
|
:label="$t('test_track.case.priority')">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<priority-table-item :value="scope.row.priority" ref="priority"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="type"
|
||||||
|
column-key="type"
|
||||||
|
:label="$t('test_track.case.type')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<type-table-item :value="scope.row.type"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="method"
|
||||||
|
column-key="method"
|
||||||
|
:label="$t('test_track.case.method')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<method-table-item :value="scope.row.method"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="nodePath"
|
||||||
|
:label="$t('test_track.case.module')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="executorName"
|
||||||
|
:label="$t('test_track.plan_view.executor')">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
prop="status"
|
||||||
|
column-key="status"
|
||||||
|
:label="$t('test_track.plan_view.execute_result')">
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<status-table-item :value="scope.row.status"/>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column
|
||||||
|
sortable
|
||||||
|
prop="updateTime"
|
||||||
|
:label="$t('commons.update_time')"
|
||||||
|
show-overflow-tooltip>
|
||||||
|
<template v-slot:default="scope">
|
||||||
|
<span>{{ scope.row.updateTime | timestampFormatDate }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
</common-component>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CommonComponent from "./CommonComponent";
|
||||||
|
import PriorityTableItem from "../../../../../common/tableItems/planview/PriorityTableItem";
|
||||||
|
import TypeTableItem from "../../../../../common/tableItems/planview/TypeTableItem";
|
||||||
|
import MethodTableItem from "../../../../../common/tableItems/planview/MethodTableItem";
|
||||||
|
import StatusTableItem from "../../../../../common/tableItems/planview/StatusTableItem";
|
||||||
|
export default {
|
||||||
|
name: "FailureResultComponent",
|
||||||
|
components: {StatusTableItem, MethodTableItem, TypeTableItem, PriorityTableItem, CommonComponent},
|
||||||
|
props: {
|
||||||
|
failureTestCases: {
|
||||||
|
type: Array,
|
||||||
|
default() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
moduleName: this.$t('test_track.module.module') + '1',
|
||||||
|
caseCount: '14',
|
||||||
|
passRate: 10.8,
|
||||||
|
issuesCount: 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleName: this.$t('test_track.module.module') + '2',
|
||||||
|
caseCount: '24',
|
||||||
|
passRate: 40,
|
||||||
|
issuesCount: 6
|
||||||
|
},
|
||||||
|
{
|
||||||
|
moduleName: this.$t('test_track.module.module') + '3',
|
||||||
|
caseCount: '50',
|
||||||
|
passRate: 76.9,
|
||||||
|
issuesCount: 8
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
|
@ -7,6 +7,7 @@
|
||||||
<test-result-component v-if="preview.id == 2"/>
|
<test-result-component v-if="preview.id == 2"/>
|
||||||
<test-result-chart-component v-if="preview.id == 3"/>
|
<test-result-chart-component v-if="preview.id == 3"/>
|
||||||
<rich-text-component :preview="preview" v-if="preview.type != 'system'"/>
|
<rich-text-component :preview="preview" v-if="preview.type != 'system'"/>
|
||||||
|
<failure-result-component/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!--报告-->
|
<!--报告-->
|
||||||
|
@ -15,6 +16,7 @@
|
||||||
<test-result-component :test-results="metric.moduleExecuteResult" v-if="preview.id == 2"/>
|
<test-result-component :test-results="metric.moduleExecuteResult" v-if="preview.id == 2"/>
|
||||||
<test-result-chart-component :execute-result="metric.executeResult" v-if="preview.id == 3"/>
|
<test-result-chart-component :execute-result="metric.executeResult" v-if="preview.id == 3"/>
|
||||||
<rich-text-component :is-report-view="isReportView" :preview="preview" v-if="preview.type != 'system'"/>
|
<rich-text-component :is-report-view="isReportView" :preview="preview" v-if="preview.type != 'system'"/>
|
||||||
|
<failure-result-component :failure-test-cases="metric.failureTestCases"/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
@ -25,9 +27,12 @@
|
||||||
import TestResultComponent from "./TestResultComponent";
|
import TestResultComponent from "./TestResultComponent";
|
||||||
import TestResultChartComponent from "./TestResultChartComponent";
|
import TestResultChartComponent from "./TestResultChartComponent";
|
||||||
import RichTextComponent from "./RichTextComponent";
|
import RichTextComponent from "./RichTextComponent";
|
||||||
|
import FailureResultComponent from "./FailureResultComponent";
|
||||||
export default {
|
export default {
|
||||||
name: "TemplateComponent",
|
name: "TemplateComponent",
|
||||||
components: {RichTextComponent, TestResultChartComponent, TestResultComponent, BaseInfoComponent},
|
components: {
|
||||||
|
FailureResultComponent,
|
||||||
|
RichTextComponent, TestResultChartComponent, TestResultComponent, BaseInfoComponent},
|
||||||
props: {
|
props: {
|
||||||
preview: {
|
preview: {
|
||||||
type: Object
|
type: Object
|
||||||
|
|
Loading…
Reference in New Issue