add:UI测试-测试报告列表api,测试报告详情api,自动化列表api
This commit is contained in:
@@ -1 +1,45 @@
|
|||||||
import request from '@/utils/request'
|
import request from '@/utils/request'
|
||||||
|
|
||||||
|
// 自动化 - 列表查询
|
||||||
|
export function getAutomationList(query) {
|
||||||
|
return request({
|
||||||
|
url: '/test/automation/list',
|
||||||
|
method: 'get',
|
||||||
|
params: query
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动化 - 新增
|
||||||
|
export function addAutomation(data) {
|
||||||
|
return request({
|
||||||
|
url: '/test/automation/add',
|
||||||
|
method: 'post',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动化 - 删除
|
||||||
|
export function deleteAutomation(data) {
|
||||||
|
return request({
|
||||||
|
url: '/test/automation/delete/' + data,
|
||||||
|
method: 'put',
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动化- 编辑
|
||||||
|
export function updateAutomation(data) {
|
||||||
|
return request({
|
||||||
|
url: '/test/automation/update',
|
||||||
|
method: 'put',
|
||||||
|
data: data
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 自动化 - 详情
|
||||||
|
|
||||||
|
export function getAutomationDetail(data) {
|
||||||
|
return request({
|
||||||
|
url: '/test/automation/getInfo' + data,
|
||||||
|
method: 'get',
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -11,23 +11,35 @@
|
|||||||
</el-dropdown>
|
</el-dropdown>
|
||||||
<div class="searchInput">
|
<div class="searchInput">
|
||||||
<i class="el-icon-search"></i>
|
<i class="el-icon-search"></i>
|
||||||
<el-input class="input" v-model="search" placeholder="根据名称搜索"></el-input>
|
<el-input class="input" v-model="searchForm.keyword" placeholder="根据名称搜索" @blur="searchList"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<el-table :data="automationList">
|
<el-table :data="automationList">
|
||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column prop="id" label="ID" width="50" align="center" />
|
<el-table-column prop="id" label="ID" width="50" align="center" />
|
||||||
<el-table-column prop="performanceName" label="场景名称" width="150" align="center" sortable />
|
<el-table-column prop="name" label="场景名称" min-width="150" align="center" sortable />
|
||||||
<el-table-column prop="createBy" label="用例等级" width="150" align="center" sortable />
|
<el-table-column prop="caseLevel" label="用例等级" min-width="150" align="center" sortable>
|
||||||
<el-table-column prop="createTime" label="状态" width="150" align="center" sortable />
|
<template slot-scope="scope">
|
||||||
<el-table-column prop="updateTime" label="标签" width="150" align="center" />
|
<el-tag v-if="scope.row.caseLevel" :type="priorityColor[scope.row.caseLevel]">{{ scope.row.caseLevel
|
||||||
<el-table-column prop="status" label="创建人" width="150" align="center" sortable />
|
}}</el-tag>
|
||||||
<el-table-column prop="status" label="责任人" width="150" align="center" sortable />
|
</template>
|
||||||
<el-table-column prop="status" label="最后更新时间" width="150" align="center" sortable />
|
</el-table-column>
|
||||||
<el-table-column prop="status" label="步骤数" width="80" align="center" />
|
<el-table-column prop="status" label="状态" min-width="150" align="center" sortable>
|
||||||
<el-table-column prop="status" label="执行结果" width="150" align="center" sortable />
|
<template slot-scope="scope">
|
||||||
<el-table-column prop="status" label="通过率" width="150" align="center" sortable />
|
<div v-if="scope.row.status === '1'">未开始</div>
|
||||||
|
<div v-if="scope.row.status === '2'">进行中</div>
|
||||||
|
<div v-if="scope.row.status === '3'">已完成</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="label" label="标签" min-width="150" align="center" />
|
||||||
|
<el-table-column prop="createBy" label="创建人" min-width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="dutyBy" label="责任人" min-width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="updateTime" label="最后更新时间" min-width="180" align="center" sortable />
|
||||||
|
<el-table-column prop="stepsNumber" label="步骤数" min-width="80" align="center" />
|
||||||
|
<el-table-column prop="executionResult" label="执行结果" min-width="150" align="center" sortable />
|
||||||
|
<el-table-column prop="passRate" label="通过率" min-width="150" align="center" sortable />
|
||||||
<el-table-column prop="action" label="操作" align="center" fixed="right" width="200px">
|
<el-table-column prop="action" label="操作" align="center" fixed="right" width="200px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" icon="el-icon-edit-outline" @click="hadleClickEdit(scope.row)">编辑</el-button>
|
<el-button type="text" icon="el-icon-edit-outline" @click="hadleClickEdit(scope.row)">编辑</el-button>
|
||||||
@@ -46,17 +58,26 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import FolderPage from "@/components/FolderPage/index.vue"
|
import FolderPage from "@/components/FolderPage/index.vue"
|
||||||
|
import { getAutomationList, deleteAutomation } from "../../../api/uiTest/automationTest";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "AutomationTest",
|
name: "AutomationTest",
|
||||||
components: { FolderPage },
|
components: { FolderPage },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
priorityColor: {
|
||||||
|
P0: 'danger', // 红色
|
||||||
|
P1: 'warning', // 黄色
|
||||||
|
P2: 'info', // 蓝色
|
||||||
|
P3: 'success', // 绿色
|
||||||
|
p4: 'success'
|
||||||
|
},
|
||||||
automationList: [{}],
|
automationList: [{}],
|
||||||
search: '',
|
|
||||||
searchForm: {
|
searchForm: {
|
||||||
pageNumber: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
keyword: null,
|
||||||
|
groupId: null,
|
||||||
},
|
},
|
||||||
total: 0,
|
total: 0,
|
||||||
}
|
}
|
||||||
@@ -67,10 +88,25 @@ export default {
|
|||||||
folderHandleSelected(id) {
|
folderHandleSelected(id) {
|
||||||
if (id) {
|
if (id) {
|
||||||
// 获取列表
|
// 获取列表
|
||||||
|
this.searchForm.groupId = id;
|
||||||
|
this.getAutomationListData();
|
||||||
} else {
|
} else {
|
||||||
this.elementList = [];
|
this.automationList = [];
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// 获取列表
|
||||||
|
getAutomationListData() {
|
||||||
|
getAutomationList(this.searchForm).then(res => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.automationList = res.rows
|
||||||
|
this.total = res.total
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 搜索
|
||||||
|
searchList() {
|
||||||
|
this.getAutomationListData();
|
||||||
|
},
|
||||||
// 创建元素
|
// 创建元素
|
||||||
handleCommand(command) {
|
handleCommand(command) {
|
||||||
this.$tab.openPage("创建场景", "/ui-test/automation/add");
|
this.$tab.openPage("创建场景", "/ui-test/automation/add");
|
||||||
@@ -82,13 +118,27 @@ export default {
|
|||||||
// 删除
|
// 删除
|
||||||
hadleClickDelete(val) {
|
hadleClickDelete(val) {
|
||||||
this.$modal.confirm('确认删除元素' + '?').then(() => {
|
this.$modal.confirm('确认删除元素' + '?').then(() => {
|
||||||
this.$modal.msgSuccess("删除成功");
|
deleteAutomation(val.id).then(res => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
this.getAutomationListData();
|
||||||
|
} else {
|
||||||
|
this.$modal.msgError("删除失败");
|
||||||
|
}
|
||||||
|
})
|
||||||
}).catch(() => { })
|
}).catch(() => { })
|
||||||
},
|
},
|
||||||
// 查看
|
// 查看
|
||||||
handleClickDetail() { },
|
handleClickDetail() { },
|
||||||
handleSizeChange() { },
|
// 分页
|
||||||
handleCurrentChange() { },
|
handleSizeChange(val) {
|
||||||
|
this.searchForm.pageSize = val
|
||||||
|
this.getAutomationListData();
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.searchForm.pageNum = val
|
||||||
|
this.getAutomationListData();
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -127,5 +177,14 @@ export default {
|
|||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
gap: 20px;
|
gap: 20px;
|
||||||
align-items: flex-end;
|
align-items: flex-end;
|
||||||
|
|
||||||
|
.caseLevel-wrap {
|
||||||
|
padding: 0px 5px;
|
||||||
|
background-color: #F56C6D;
|
||||||
|
color: white;
|
||||||
|
font-weight: 500;
|
||||||
|
border-radius: 4px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ export default {
|
|||||||
return {
|
return {
|
||||||
elementList: [],
|
elementList: [],
|
||||||
searchForm: {
|
searchForm: {
|
||||||
pageNumber: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
name: null,
|
name: null,
|
||||||
groupId: null,
|
groupId: null,
|
||||||
@@ -128,6 +128,7 @@ export default {
|
|||||||
getElementList(this.searchForm).then(res => {
|
getElementList(this.searchForm).then(res => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
this.elementList = res.rows
|
this.elementList = res.rows
|
||||||
|
this.total = res.total
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
@@ -188,8 +189,15 @@ export default {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
handleCurrentChange() { },
|
// 分页
|
||||||
handleSizeChange() { },
|
handleSizeChange(val) {
|
||||||
|
this.searchForm.pageSize = val
|
||||||
|
this.getElementData();
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.searchForm.pageNum = val
|
||||||
|
this.getElementData();
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,20 +3,36 @@
|
|||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="searchInput">
|
<div class="searchInput">
|
||||||
<i class="el-icon-search"></i>
|
<i class="el-icon-search"></i>
|
||||||
<el-input class="input" v-model="search" placeholder="根据名称搜索"></el-input>
|
<el-input class="input" v-model="searchForm.name" placeholder="根据名称搜索" @blur="searchList"></el-input>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="list">
|
<div class="list">
|
||||||
<el-table :data="reportList">
|
<el-table :data="reportList">
|
||||||
<el-table-column type="selection" width="55" />
|
<el-table-column type="selection" width="55" />
|
||||||
<el-table-column prop="id" label="ID" width="50" align="center" />
|
<el-table-column prop="id" label="ID" width="50" align="center" />
|
||||||
<el-table-column prop="performanceName" label="名称" min-width="150" align="center" sortable />
|
<el-table-column prop="name" label="名称" min-width="150" align="center" sortable />
|
||||||
<el-table-column prop="createBy" label="报告类型" min-width="150" align="center" />
|
<el-table-column prop="reportType" label="报告类型" min-width="150" align="center" />
|
||||||
<el-table-column prop="createTime" label="创建人" min-width="150" align="center" sortable />
|
<el-table-column prop="createBy" label="创建人" min-width="150" align="center" sortable />
|
||||||
<el-table-column prop="updateTime" label="创建时间" align="center" min-width="150" sortable />
|
<el-table-column prop="createTime" label="创建时间" align="center" min-width="180" sortable />
|
||||||
<el-table-column prop="status" label="结束时间" align="center" min-width="150" sortable />
|
<el-table-column prop="updateTime" label="结束时间" align="center" min-width="180" sortable />
|
||||||
<el-table-column prop="status" label="触发方式" min-width="150" align="center" />
|
<el-table-column prop="triggerMode" label="触发方式" min-width="150" align="center">
|
||||||
<el-table-column prop="status" label="状态" min-width="150" align="center" />
|
<template slot-scope="scope">
|
||||||
|
<div v-if="scope.row.triggerMode === '1'">手动</div>
|
||||||
|
<div v-if="scope.row.triggerMode === '2'">批量执行</div>
|
||||||
|
<div v-if="scope.row.triggerMode === '3'">定时任务</div>
|
||||||
|
<div v-if="scope.row.triggerMode === '4'">API调用</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="status" label="状态" min-width="150" align="center">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<div v-if="scope.row.status === 1">Running</div>
|
||||||
|
<div v-if="scope.row.status === 2">Error</div>
|
||||||
|
<div v-if="scope.row.status === 3">Success</div>
|
||||||
|
<div v-if="scope.row.status === 4">Stopped</div>
|
||||||
|
<div v-if="scope.row.status === 5">Pending</div>
|
||||||
|
<div v-if="scope.row.status === 6">Timeout</div>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="action" label="操作" align="center" fixed="right" width="150px">
|
<el-table-column prop="action" label="操作" align="center" fixed="right" width="150px">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="text" icon="el-icon-view" @click="handleClickDetail(scope.row)"
|
<el-button type="text" icon="el-icon-view" @click="handleClickDetail(scope.row)"
|
||||||
@@ -31,44 +47,72 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import { getTestReportList, deleteTestReport } from '../../../api/uiTest/testReport';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "TestReport",
|
name: "TestReport",
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
search: '',
|
reportList: [],
|
||||||
reportList: [{}],
|
|
||||||
searchForm: {
|
searchForm: {
|
||||||
pageNumber: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
name: null,
|
||||||
},
|
},
|
||||||
total: 0,
|
total: 0,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.getReportListData()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// 获取报告列表
|
||||||
|
getReportListData() {
|
||||||
|
getTestReportList(this.searchForm).then(res => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.reportList = res.rows
|
||||||
|
this.total = res.total
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
|
// 搜索
|
||||||
|
searchList() {
|
||||||
|
this.getReportListData()
|
||||||
|
},
|
||||||
// 删除
|
// 删除
|
||||||
hadleClickDelete(val) {
|
hadleClickDelete(val) {
|
||||||
this.$modal.confirm('确认删除元素' + '?').then(() => {
|
this.$modal.confirm('确认删除元素' + '?').then(() => {
|
||||||
this.$modal.msgSuccess("删除成功");
|
deleteTestReport(val.id).then(res => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.$modal.msgSuccess("删除成功");
|
||||||
|
this.getReportListData()
|
||||||
|
} else {
|
||||||
|
this.$modal.msgSuccess("删除失败");
|
||||||
|
}
|
||||||
|
})
|
||||||
}).catch(() => { })
|
}).catch(() => { })
|
||||||
},
|
},
|
||||||
// 查看
|
// 查看
|
||||||
handleClickDetail(val) {
|
handleClickDetail(val) {
|
||||||
this.$tab.openPage("测试报告详情", "/ui-test/report/detail", { id: val.id });
|
this.$tab.openPage("测试报告详情", "/ui-test/report/detail", { id: val.id });
|
||||||
},
|
},
|
||||||
handleSizeChange() { },
|
// 分页
|
||||||
handleCurrentChange() { },
|
handleSizeChange(val) {
|
||||||
|
this.searchForm.pageSize = val
|
||||||
|
this.getReportListData()
|
||||||
|
},
|
||||||
|
handleCurrentChange(val) {
|
||||||
|
this.searchForm.pageNum = val
|
||||||
|
this.getReportListData()
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
.report {
|
.report {
|
||||||
padding: 20px;
|
padding: 20px;
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="report-detail">
|
<div class="report-detail">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="header-title">登录 开始时间 结束时间</div>
|
<div class="header-title">开始时间:{{ detailData.createTime }} 结束时间:{{ detailData.updateTime }}</div>
|
||||||
<div class="header-content">
|
<div class="header-content">
|
||||||
<div class="content-title">42.28s</div>
|
<div class="content-title">{{ detailData.take }}</div>
|
||||||
<div class="left-wrap">
|
<div class="left-wrap">
|
||||||
<!-- 环形图 -->
|
<!-- 环形图 -->
|
||||||
<div>
|
<div>
|
||||||
@@ -11,60 +11,75 @@
|
|||||||
<div class="left-count">
|
<div class="left-count">
|
||||||
<div class="left-count-show">
|
<div class="left-count-show">
|
||||||
<div class="green-wrap"></div>
|
<div class="green-wrap"></div>
|
||||||
<div style="font-weight: 600;">4 成功</div>
|
<div style="font-weight: 600;">{{ detailData.stepsSucceedNumber }} 成功</div>
|
||||||
</div>
|
</div>
|
||||||
<el-divider></el-divider>
|
<el-divider></el-divider>
|
||||||
<div class="left-count-show">
|
<div class="left-count-show">
|
||||||
<div class="red-wrap"></div>
|
<div class="red-wrap"></div>
|
||||||
<div style="font-weight: 600;">0 失败</div>
|
<div style="font-weight: 600;">{{ detailData.stepsErrorNumber }} 失败</div>
|
||||||
|
</div>
|
||||||
|
<el-divider></el-divider>
|
||||||
|
<div class="left-count-show">
|
||||||
|
<div class="gray-wrap"></div>
|
||||||
|
<div style="font-weight: 600;">{{ detailData.stepsNotNumber }} 未执行</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="wrap-show">
|
<div class="wrap-show">
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="title">1</div>
|
<div class="title">{{ detailData.scenesNumber }}</div>
|
||||||
<div>场景</div>
|
<div>场景</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="green-wrap"></div>
|
<div class="green-wrap"></div>
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="title">1</div>
|
<div class="title">{{ detailData.scenesErrorNumber }}</div>
|
||||||
<div>失败</div>
|
<div>失败</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="red-wrap"></div>
|
<div class="red-wrap"></div>
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="title">1</div>
|
<div class="title">{{ detailData.scenesSucceedNumber }}</div>
|
||||||
<div>成功</div>
|
<div>成功</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="gray-wrap"></div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">{{ detailData.scenesNotNumber }}</div>
|
||||||
|
<div>未执行</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-divider></el-divider>
|
<el-divider></el-divider>
|
||||||
<div class="wrap-show">
|
<div class="wrap-show">
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="title">1</div>
|
<div class="title">{{ detailData.stepsNumber }}</div>
|
||||||
<div>步骤</div>
|
<div>步骤</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="green-wrap"></div>
|
<div class="green-wrap"></div>
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="title">1</div>
|
<div class="title">{{ detailData.stepsErrorNumber }}</div>
|
||||||
<div>失败</div>
|
<div>失败</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="red-wrap"></div>
|
<div class="red-wrap"></div>
|
||||||
<div class="middle-wrap">
|
<div class="middle-wrap">
|
||||||
<div class="title">1</div>
|
<div class="title">{{ detailData.stepsSucceedNumber }}</div>
|
||||||
<div>成功</div>
|
<div>成功</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="gray-wrap"></div>
|
||||||
|
<div class="middle-wrap">
|
||||||
|
<div class="title">{{ detailData.stepsNotNumber }}</div>
|
||||||
|
<div>未执行</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div></div>
|
<div></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="right-wrap">
|
<div class="right-wrap">
|
||||||
<div class="error-wrap">
|
<div class="error-wrap">
|
||||||
<i class="el-icon-warning-outline" style="color: red; font-size: 30px;"></i>
|
<i class="el-icon-warning-outline" style="color: red; font-size: 30px;"></i>
|
||||||
<div class="show-title">0%</div>
|
<div class="show-title">{{ detailData.faiiRate ? detailData.faiiRate : '0' }}%</div>
|
||||||
<div class="show-sub">失败</div>
|
<div class="show-sub">失败</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="error-wrap">
|
<div class="error-wrap">
|
||||||
<i class="el-icon-document-checked" style="font-size: 30px;"></i>
|
<i class="el-icon-document-checked" style="font-size: 30px;"></i>
|
||||||
<div class="show-title">0-0</div>
|
<div class="show-title">{{ detailData.successAssertion ? detailData.successAssertion : '0/0' }}</div>
|
||||||
<div class="show-sub">成功断言</div>
|
<div class="show-sub">成功断言</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -75,28 +90,40 @@
|
|||||||
<el-tabs v-model="activeName" @tab-click="handleClick">
|
<el-tabs v-model="activeName" @tab-click="handleClick">
|
||||||
<el-tab-pane label="全部" name="first">
|
<el-tab-pane label="全部" name="first">
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item v-for="(item, index) in allList">
|
<el-collapse-item>
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="list-title">{{ index + 1 }}</div>
|
<div style="margin-left: 10px;">{{ detailData.name }}</div>
|
||||||
{{ item.title }}
|
|
||||||
</template>
|
</template>
|
||||||
<div class="list-sub-wrap">
|
<div class="list-sub-wrap">
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item v-for="(row, index) in item.contentList">
|
<el-collapse-item v-for="(item, index) in uiSceneStepsAllReportVOList">
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="sub-title">{{ index + 1 }}</div>
|
<div class="sub-collapse">
|
||||||
<div class="sub-content">
|
<div class="left-collapse">
|
||||||
<div>----打开网页</div>
|
<div class="sub-title">{{ index + 1 }}</div>
|
||||||
<div>1231ms</div>
|
<div>{{ item.name }}</div>
|
||||||
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
</div>
|
||||||
<div>成功</div>
|
<div class="right-collapse">
|
||||||
|
<div>{{ item.take }}</div>
|
||||||
|
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
||||||
|
<div class="collapse-status">
|
||||||
|
<div v-if="item.executionFlag === '1'">成功</div>
|
||||||
|
<div v-if="item.executionFlag === '0'">未执行</div>
|
||||||
|
<div v-if="item.executionFlag === '2'">执行失败</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div style="display: flex; justify-content: flex-end;">开始时间:---- ---- --- 结束时间 ---- ---- --</div>
|
|
||||||
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
||||||
<el-tab-pane label="日志" name="first">日志</el-tab-pane>
|
<el-tab-pane label="日志" name="first">
|
||||||
<el-tab-pane label="断言" name="second">断言</el-tab-pane>
|
<div class="tab-content">{{ item.logInfo }}</div>
|
||||||
<el-tab-pane label="提取" name="third">提取</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="断言" name="second">
|
||||||
|
<div class="tab-content">{{ item.assertionJson }}</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="提取" name="third">
|
||||||
|
<div class="tab-content">{{ item.extractionDataJson }}</div>
|
||||||
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
@@ -106,28 +133,40 @@
|
|||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="失败" name="second">
|
<el-tab-pane label="失败" name="second">
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item v-for="(item, index) in failureList">
|
<el-collapse-item>
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="list-title">{{ index + 1 }}</div>
|
<div style="margin-left: 10px;">{{ detailData.name }}</div>
|
||||||
{{ item.title }}
|
|
||||||
</template>
|
</template>
|
||||||
<div class="list-sub-wrap">
|
<div class="list-sub-wrap">
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item v-for="(row, index) in item.contentList">
|
<el-collapse-item v-for="(item, index) in uiSceneStepsErrorReportVOList">
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="sub-title">{{ index + 1 }}</div>
|
<div class="sub-collapse">
|
||||||
<div class="sub-content">
|
<div class="left-collapse">
|
||||||
<div>----打开网页</div>
|
<div class="sub-title">{{ index + 1 }}</div>
|
||||||
<div>1231ms</div>
|
<div>{{ item.name }}</div>
|
||||||
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
</div>
|
||||||
<div>成功</div>
|
<div class="right-collapse">
|
||||||
|
<div>{{ item.take }}</div>
|
||||||
|
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
||||||
|
<div class="collapse-status">
|
||||||
|
<div v-if="item.executionFlag === '1'">成功</div>
|
||||||
|
<div v-if="item.executionFlag === '0'">未执行</div>
|
||||||
|
<div v-if="item.executionFlag === '2'">执行失败</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div style="display: flex; justify-content: flex-end;">开始时间:---- ---- --- 结束时间 ---- ---- --</div>
|
|
||||||
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
||||||
<el-tab-pane label="日志" name="first">日志</el-tab-pane>
|
<el-tab-pane label="日志" name="first">
|
||||||
<el-tab-pane label="断言" name="second">断言</el-tab-pane>
|
<div class="tab-content">{{ item.logInfo }}</div>
|
||||||
<el-tab-pane label="提取" name="third">提取</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="断言" name="second">
|
||||||
|
<div class="tab-content">{{ item.assertionJson }}</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="提取" name="third">
|
||||||
|
<div class="tab-content">{{ item.extractionDataJson }}</div>
|
||||||
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
@@ -137,28 +176,40 @@
|
|||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
<el-tab-pane label="未执行" name="third">
|
<el-tab-pane label="未执行" name="third">
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item v-for="(item, index) in unexecutedList">
|
<el-collapse-item>
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="list-title">{{ index + 1 }}</div>
|
<div style="margin-left: 10px;">{{ detailData.name }}</div>
|
||||||
{{ item.title }}
|
|
||||||
</template>
|
</template>
|
||||||
<div class="list-sub-wrap">
|
<div class="list-sub-wrap">
|
||||||
<el-collapse accordion>
|
<el-collapse accordion>
|
||||||
<el-collapse-item v-for="(row, index) in item.contentList">
|
<el-collapse-item v-for="(item, index) in uiSceneStepsNotReportVOList">
|
||||||
<template slot="title">
|
<template slot="title">
|
||||||
<div class="sub-title">{{ index + 1 }}</div>
|
<div class="sub-collapse">
|
||||||
<div class="sub-content">
|
<div class="left-collapse">
|
||||||
<div>----打开网页</div>
|
<div class="sub-title">{{ index + 1 }}</div>
|
||||||
<div>1231ms</div>
|
<div>{{ item.name }}</div>
|
||||||
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
</div>
|
||||||
<div>成功</div>
|
<div class="right-collapse">
|
||||||
|
<div>{{ item.take }}</div>
|
||||||
|
<el-button size="mini" type="text" @click.native.stop="clickHandleScreenshot">截图</el-button>
|
||||||
|
<div class="collapse-status">
|
||||||
|
<div v-if="item.executionFlag === '1'">成功</div>
|
||||||
|
<div v-if="item.executionFlag === '0'">未执行</div>
|
||||||
|
<div v-if="item.executionFlag === '2'">执行失败</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<div style="display: flex; justify-content: flex-end;">开始时间:---- ---- --- 结束时间 ---- ---- --</div>
|
|
||||||
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
<el-tabs v-model="active" @tab-click="handleClick" style="margin-left: 20px;">
|
||||||
<el-tab-pane label="日志" name="first">日志</el-tab-pane>
|
<el-tab-pane label="日志" name="first">
|
||||||
<el-tab-pane label="断言" name="second">断言</el-tab-pane>
|
<div class="tab-content">{{ item.logInfo }}</div>
|
||||||
<el-tab-pane label="提取" name="third">提取</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="断言" name="second">
|
||||||
|
<div class="tab-content">{{ item.assertionJson }}</div>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="提取" name="third">
|
||||||
|
<div class="tab-content">{{ item.extractionDataJson }}</div>
|
||||||
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-collapse-item>
|
</el-collapse-item>
|
||||||
</el-collapse>
|
</el-collapse>
|
||||||
@@ -173,22 +224,37 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
import * as echarts from 'echarts';
|
import * as echarts from 'echarts';
|
||||||
|
import { getTestReportDetail } from '../../../api/uiTest/testReport';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "TestReportDetail",
|
name: "TestReportDetail",
|
||||||
components: { echarts },
|
components: { echarts },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
activeName: 'first',
|
activeName: 'first',
|
||||||
allList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 全部
|
uiSceneStepsAllReportVOList: [], // 全部
|
||||||
failureList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 失败
|
uiSceneStepsErrorReportVOList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 失败
|
||||||
unexecutedList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 未执行
|
uiSceneStepsNotReportVOList: [{ title: 'aaa', contentList: [{}, {}] }, { title: 'bbb', contentList: [{}, {}] }], // 未执行
|
||||||
active: 'first'
|
active: 'first',
|
||||||
|
detailData: {}, // 详情内容
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
|
this.getDetailDAta()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
handleClick() { },
|
handleClick() { },
|
||||||
|
// 获取详情
|
||||||
|
getDetailDAta() {
|
||||||
|
getTestReportDetail(this.$route.query.id).then(res => {
|
||||||
|
if (res.code === 200) {
|
||||||
|
this.detailData = res.data
|
||||||
|
this.uiSceneStepsAllReportVOList = res.data.uiSceneStepsAllReportVOList
|
||||||
|
this.uiSceneStepsErrorReportVOList = res.data.uiSceneStepsErrorReportVOList
|
||||||
|
this.uiSceneStepsNotReportVOList = res.data.uiSceneStepsNotReportVOList
|
||||||
|
}
|
||||||
|
})
|
||||||
|
},
|
||||||
// 截图
|
// 截图
|
||||||
clickHandleScreenshot() {
|
clickHandleScreenshot() {
|
||||||
console.log('截图')
|
console.log('截图')
|
||||||
@@ -224,6 +290,13 @@ export default {
|
|||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.gray-wrap {
|
||||||
|
width: 10px;
|
||||||
|
height: 10px;
|
||||||
|
background-color: gray;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.header-content {
|
.header-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
@@ -316,7 +389,33 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.list-sub-wrap {
|
.list-sub-wrap {
|
||||||
margin-left: 20px;
|
margin-left: 40px;
|
||||||
|
|
||||||
|
.sub-collapse {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
padding-right: 20px;
|
||||||
|
|
||||||
|
.left-collapse {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right-collapse {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: flex-end;
|
||||||
|
gap: 10px;
|
||||||
|
|
||||||
|
.collapse-status {
|
||||||
|
width: 60px;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.sub-title {
|
.sub-title {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
@@ -336,6 +435,17 @@ export default {
|
|||||||
gap: 30px;
|
gap: 30px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tab-content {
|
||||||
|
padding: 0px 10px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::v-deep .el-divider--horizontal {
|
||||||
|
display: block;
|
||||||
|
height: 1px;
|
||||||
|
width: 100%;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ module.exports = {
|
|||||||
proxy: {
|
proxy: {
|
||||||
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
// detail: https://cli.vuejs.org/config/#devserver-proxy
|
||||||
[process.env.VUE_APP_BASE_API]: {
|
[process.env.VUE_APP_BASE_API]: {
|
||||||
target: `http://ah.qyyh.net:1371/prod-api/`,
|
target: `http://47.99.93.74:8012/prod-api/`,
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
pathRewrite: {
|
pathRewrite: {
|
||||||
['^' + process.env.VUE_APP_BASE_API]: ''
|
['^' + process.env.VUE_APP_BASE_API]: ''
|
||||||
|
|||||||
Reference in New Issue
Block a user