自动化测试执行日志和操作日志功能

This commit is contained in:
liangdaliang
2025-04-24 16:33:06 +08:00
parent 814a7a39d2
commit 78cbb5aaaf
5 changed files with 99 additions and 105 deletions

View File

@@ -120,8 +120,9 @@ public class TestTaskController extends BaseController {
@PostMapping("/run") @PostMapping("/run")
public AjaxResult run(@RequestBody IDQO qo) { public AjaxResult run(@RequestBody IDQO qo) {
// 异步执行任务 // 异步执行任务
String username = SecurityUtils.getUsername();
CompletableFuture.runAsync(() -> { CompletableFuture.runAsync(() -> {
testTaskService.executeTestTaskById(qo.getId(), 2, null, jmeterHomePath, SecurityUtils.getUsername()); testTaskService.executeTestTaskById(qo.getId(), 2, null, jmeterHomePath, username);
}); });
return toAjax(true); return toAjax(true);
} }

View File

@@ -42,7 +42,7 @@ public class TestTaskLog extends BaseEntity
private String operUser; private String operUser;
/** 操作时间 */ /** 操作时间 */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd")
private Date operTime; private Date operTime;
} }

View File

@@ -30,13 +30,13 @@ public class TestTaskResult extends BaseEntity
private Long taskId; private Long taskId;
/** 触发时间 */ /** 触发时间 */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "触发时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "触发时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date triggerTime; private Date triggerTime;
/** 执行时间 */ /** 执行时间 */
@JsonFormat(pattern = "yyyy-MM-dd") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Excel(name = "执行时间", width = 30, dateFormat = "yyyy-MM-dd") @Excel(name = "执行时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
private Date startTime; private Date startTime;
/** 触发方式1-定时任务2-手动 */ /** 触发方式1-定时任务2-手动 */

View File

@@ -1,60 +1,44 @@
<template> <template>
<div> <div>
<div class="refresh"> <!-- <div class="refresh">-->
<div class="refresh-icon"> <!-- <div class="refresh-icon">-->
<i class="el-icon-refresh"></i> <!-- <i class="el-icon-refresh"></i>-->
<span>刷新</span> <!-- <span>刷新</span>-->
</div>
</div>
<!-- <div class="chart-container">-->
<!-- <div class="chart-instance">-->
<!-- <div>定时任务执行记录</div>-->
<!-- <lineChart />-->
<!-- </div>--> <!-- </div>-->
<!-- </div>--> <!-- </div>-->
<!-- <div class="chart-container">-->
<!-- <div class="chart-instance">-->
<!-- <div>定时任务执行记录</div>-->
<!-- <lineChart />-->
<!-- </div>-->
<!-- </div>-->
<div class="table-content"> <div class="table-content">
<el-table :data="tableData" border style="width: 100%"> <el-table :data="tableData" border style="width: 100%">
<el-table-column prop="triggerTime" label="触发时间"> </el-table-column> <el-table-column prop="triggerTime" label="触发时间"> </el-table-column>
<el-table-column prop="startTime" label="开始时间"> </el-table-column> <el-table-column prop="startTime" label="开始时间"> </el-table-column>
<el-table-column prop="triggerMethod" label="触发方式"> <el-table-column prop="triggerType" label="触发方式" :formatter="row => ['','定时任务', '手动'][row.triggerType]">
</el-table-column> </el-table-column>
<el-table-column prop="environment" label="执行环境"> </el-table-column> <el-table-column prop="resultDesc" label="情况描述"> </el-table-column>
<el-table-column label="状态"> <el-table-column prop="status" label="状态" :formatter="row => ['','成功', '失败'][row.status]">
<template slot-scope="scope">
<div class="status-cell">
<span class="status-icon success"></span>
<span class="status-text">{{ scope.row.status }}</span>
</div>
</template>
</el-table-column> </el-table-column>
<el-table-column label="发送状态"> <el-table-column prop="sendStatus" label="发送状态" :formatter="row => ['未发送','已发送'][row.sendStatus]">
<template slot-scope="scope">
<div class="status-cell">
<span class="status-icon pending"></span>
<span class="status-text">{{ scope.row.sendStatus }}</span>
</div>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="executionTime" label="执行耗时"> <el-table-column prop="costTime" label="执行耗时(毫秒)">
</el-table-column>
<el-table-column fixed="right" label="操作">
<template slot-scope="scope">
<el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
</template>
</el-table-column> </el-table-column>
<!-- <el-table-column fixed="right" label="操作">-->
<!-- <template slot-scope="scope">-->
<!-- <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>-->
<!-- </template>-->
<!-- </el-table-column>-->
</el-table> </el-table>
<div class="pagination"> <div>
<el-pagination <pagination
background v-show="total > 0"
@size-change="handleSizeChange" :total="total"
@current-change="handleCurrentChange" :page.sync="queryParams.pageNum"
:current-page="currentPage" :limit.sync="queryParams.pageSize"
:page-sizes="[100, 200, 300, 400]" @pagination="getData"
:page-size="100" />
layout="total, sizes, prev, pager, next, jumper"
:total="400"
>
</el-pagination>
</div> </div>
</div> </div>
</div> </div>
@@ -62,25 +46,36 @@
<script> <script>
import lineChart from "./lineChart.vue"; import lineChart from "./lineChart.vue";
import {taskResultListByTaskId} from "@/api/test/task";
export default { export default {
components: { components: {
lineChart, lineChart,
}, },
mounted() {
// 在这里进行数据预处理
this.getData();
},
data() { data() {
return { return {
value: "", value: "",
tableData: [], tableData: [],
currentPage: 1, total: 0,
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
},
}; };
}, },
methods: { methods: {
handleClick(row) { getData() {
this.$router.push({ this.tableData=[]
name: "Report", this.queryParams.id = this.$route.query.id;
}); taskResultListByTaskId(this.queryParams).then(res => {
this.tableData = res.rows;
this.total = res.total;
})
}, },
handleSizeChange() {},
handleCurrentChange() {},
}, },
}; };
</script> </script>

View File

@@ -1,73 +1,71 @@
<template> <template>
<div> <div>
<!-- 时间选择组件 --> <!-- 时间选择组件 -->
<div class="filter-container"> <!-- <div class="filter-container">-->
<el-date-picker <!-- <el-date-picker-->
v-model="dateRange" <!-- v-model="dateRange"-->
type="daterange" <!-- type="daterange"-->
range-separator="" <!-- range-separator=""-->
start-placeholder="开始日期" <!-- start-placeholder="开始日期"-->
end-placeholder="结束日期" <!-- end-placeholder="结束日期"-->
value-format="yyyy-MM-dd" <!-- value-format="yyyy-MM-dd"-->
:default-value="['2025-02-16', '2025-02-19']" <!-- :default-value="['', '']"-->
> <!-- >-->
</el-date-picker> <!-- </el-date-picker>-->
</div> <!-- </div>-->
<!-- 表格 --> <!-- 表格 -->
<el-table :data="tableData" border style="width: 100%"> <el-table :data="tableData" border style="width: 100%">
<el-table-column type="index" label="序号"> </el-table-column> <el-table-column type="index" label="序号"> </el-table-column>
<el-table-column prop="operationTime" label="操作时间"> </el-table-column> <el-table-column prop="operTime" label="操作时间"> </el-table-column>
<el-table-column prop="operator" label="操作人"> </el-table-column> <el-table-column prop="operUser" label="操作人"> </el-table-column>
<el-table-column> <el-table-column prop="operType" label="操作类型"> </el-table-column>
<template #header> <el-table-column prop="operDetail" label="操作描述"> </el-table-column>
<span>ID</span>
<i class="el-icon-warning-outline" style="margin-left: 10px"></i>
</template>
<template slot-scope="scope">
<span>{{ scope.row.id }}</span>
<el-tooltip content="ID提示信息" placement="top">
<i
class="el-icon-info"
style="margin-left: 6px; color: #909399"
></i>
</el-tooltip>
</template>
</el-table-column>
<el-table-column>
<template #header>
<span>名称</span>
<i class="el-icon-warning-outline" style="margin-left: 10px"></i>
</template>
<template slot-scope="scope">
<span>{{ scope.row.name }}</span>
<el-tooltip content="名称提示信息" placement="top">
<i
class="el-icon-info"
style="margin-left: 6px; color: #909399"
></i>
</el-tooltip>
</template>
</el-table-column>
<el-table-column prop="operationType" label="操作类型"> </el-table-column>
</el-table> </el-table>
<div>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getData"
/>
</div>
</div> </div>
</template> </template>
<script> <script>
import {taskLogListByTaskId} from "@/api/test/task";
export default { export default {
name: "operationRecords", name: "operationRecords",
mounted() {
// 在这里进行数据预处理
// console.log(this.taskId);
this.getData();
},
data() { data() {
return { return {
// 时间选择组件的默认值 // 时间选择组件的默认值
dateRange: ["2025-02-16", "2025-02-19"], dateRange: ["", ""],
// 表格数据(暂时为空) // 表格数据(暂时为空)
value: "",
tableData: [], tableData: [],
total: 0,
queryParams: {
pageNum: 1,
pageSize: 10,
id: null,
},
}; };
}, },
methods: { methods: {
handleClick(row) { getData() {
console.log(row); this.tableData=[]
this.queryParams.id = this.$route.query.id;
taskLogListByTaskId(this.queryParams).then(res => {
this.tableData = res.rows;
this.total = res.total;
})
}, },
}, },
}; };