效果:
https://v.qq.com/x/page/b3021ygobgd.html (录制的视频)
下面是几张截图
实现代码:
因为后端接口的代码太多,这里只粘前端代码
jsp代码:
<%--
Created by IntelliJ IDEA.
User: mft
Date: 2019-10-08
Time: 15:00
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试平台</title>
<meta http-equiv="content" content="text/html;charset=utf-8">
<%-- css依赖--%>
<link rel="stylesheet" href="css/jquery/jquery-ui-1.12.1.css">
<%-- css本地--%>
<link rel="stylesheet" type="text/css" href="css/test.css">
<%-- script依赖--%>
<script src="js/jquery/jquery-3.4.1.js"></script>
<script src="js/jquery/jquery-ui-1.12.1.js"></script>
<%-- script本地--%>
<script type="text/javascript" src="js/test.js"></script>
</head>
<body>
<div class="title" id="div1">测试平台</div>
<div style="width: 100%" id="div2">
<span class="titleText" style="float: left;">线上接口</span>
<button style="float: left;" onclick="buildJenkins('115','InterfaceTest_live')">开始测试</button>
<button style="float: left;" onclick="stopJenkins('115','InterfaceTest_live')">中止测试</button>
<a href="http://test.babyfs.cn/re/lastReportList/InterfaceTest_live.html" target="_blank">
<button style="float: left;">查看报告</button>
</a>
<a href="http://10.10.10.115:8082/job/InterfaceTest_live/" target="_blank">
<button style="float: left;">修改配置</button>
</a>
<i id="InterfaceTest_live_resule" style="float: left;">测试结束</i>
<i id="InterfaceTest_resule" style="float: right;">测试结束</i>
<a href="http://10.10.10.115:8082/job/InterfaceTest/" target="_blank">
<button style="float: right;">修改配置</button>
</a>
<a href="http://test.babyfs.cn/re/lastReportList/InterfaceTest.html" target="_blank">
<button style="float: right;">查看报告</button>
</a>
<button style="float: right;" onclick="stopJenkins('115','InterfaceTest')">中止测试</button>
<button style="float: right;" onclick="buildJenkins('115','InterfaceTest')">开始测试</button>
<span class="titleText" style="float: right;">lpt接口</span>
</div>
<div style="width: 100%" id="div3">
<span>
<pre id="InterfaceTest_live_log" class="InterfaceTest_live_style"></pre>
<pre id="InterfaceTest_log" class="InterfaceTest_style"></pre>
</span>
</div>
<div style="width: 100%" id="div4">
<span class="titleText" style="float: left;">服务器性能</span>
<a href="http://test.babyfs.cn/webtools/index.jsp" target="_blank">
<button style="float: left;">开始测试</button>
</a>
<button style="float: left;" onclick="stopJenkins('115','performanceTest')">中止测试</button>
<a href="http://test.babyfs.cn/re/performanceTest/result/index.html" target="_blank">
<button style="float: left;">查看报告</button>
</a>
<a href="http://10.10.10.115:8082/job/performanceTest/" target="_blank">
<button style="float: left;">修改配置</button>
</a>
<i id="performanceTest_resule" style="float: left;">测试结束</i>
<i id="monkey_resule" style="float: right;width: 11%">测试结束</i>
<a href="http://10.10.10.115:8082/job/monkey/" target="_blank">
<button style="float: right;">修改配置</button>
</a>
<a href="http://10.10.10.115:8080/re/lastReportList/monkey.png" target="_blank">
<button style="float: right;">查看截图</button>
</a>
<a href="http://10.10.10.115:8080/re/lastReportList/monkey.html" target="_blank">
<button style="float: right;">查看报告</button>
</a>
<button style="float: right;" onclick="stopJenkins('115','monkey');buildJenkins('115','monkey_stop')">中止测试
</button>
<button style="float: right;" onclick="buildJenkins('115','monkey')">开始测试</button>
<span class="titleText" style="float: right;">app性能</span>
</div>
<div style="width: 100%" id="div5">
<span>
<pre id="performanceTest_log" class="performanceTest_style"></pre>
<pre id="monkey_log" class="monkey_style"></pre>
</span>
</div>
<div style="width: 100%" id="div6">
<span class="titleText" style="float: left;">app功能</span>
<a href="http://test.babyfs.cn/webtools/app_regressionTest.jsp" target="_blank">
<button style="float: left;">开始测试</button>
</a>
<button style="float: left;
" onclick="stopJenkins('37','app_regressionTest')">中止测试
</button>
<a href="http://10.10.10.115:8080/re/lastReportList/app_regressionTest.html" target="_blank">
<button style="float: left;">查看报告</button>
</a>
<a href="http://10.10.10.115:8082/job/app_regressionTest/" target="_blank">
<button style="float: left;">修改配置</button>
</a>
<i id="app_regressionTest_resule" style="float: left;">测试结束</i>
<i id="op_resule" style="float: right;width: 11%">测试结束</i>
<a href="http://10.10.10.115:8082/job/op/" target="_blank">
<button style="float: right;">修改配置</button>
</a>
<a href="http://10.10.10.115:8080/re/lastReportList/monkey.png" target="_blank">
<button style="float: right;">查看截图</button>
</a>
<a href="http://10.10.10.115:8080/re/lastReportList/monkey.html" target="_blank">
<button style="float: right;">查看报告</button>
</a>
<button style="float: right;" onclick="stopJenkins('115','op')">中止测试
</button>
<button style="float: right;" onclick="buildJenkins('115','op')">开始测试</button>
<span class="titleText" style="float: right;">op后台</span>
</div>
<div style="width: 100%" id="div7">
<span>
<pre id="app_regressionTest_log" class="app_regressionTest_style"></pre>
<pre id="op_log" class="op_style"></pre>
</span>
</div>
</body>
</html>
js代码:
let get1;
let get2;
let get3;
let get4;
let get5;
let slideDownTime = 1000;
window.onload = function () {
$("div").hide().slideDown(slideDownTime);//隐藏、展开所有div元素
getLog('logCat', '115', 'InterfaceTest_live', 'InterfaceTest_live_log', '');
getLog('logCat', '115', 'InterfaceTest', 'InterfaceTest_log', '');
getLog('logCat', '115', 'performanceTest', 'performanceTest_log', '');
getLog('logCat', '115', 'monkey', 'monkey_log', '');
getLog('logCat', '115', 'app_regressionTest', 'app_regressionTest_log', '');
get1 = setInterval("code('BuildResult','115','performanceTest','performanceTest_resule')", 3500);
get2 = setInterval("code('BuildResult','115','InterfaceTest_live','InterfaceTest_live_resule')", 3500);
get3 = setInterval("code('BuildResult','115','InterfaceTest','InterfaceTest_resule')", 3500);
get4 = setInterval("code('BuildResult','115','monkey','monkey_resule')", 3500);
get5 = setInterval("code('BuildResult','115','app_regressionTest','app_regressionTest_resule')", 3500);
setInterval("mobility('#InterfaceTest_live_resule')", 3000);
setInterval("mobility('#InterfaceTest_resule')", 3000);
setInterval("mobility('#performanceTest_resule')", 3000);
setInterval("mobility('#monkey_resule')", 3000);
setInterval("mobility('#app_regressionTest_resule')", 3000);
};
//动效
function mobility(id) {
let reString = $(id).text();
if (reString === '正在测试') {
// 运行特效
$(id).toggle('pulsate', {times: 2}, 3000);
} else {
$(id).show('blind', {direction: 'up'}, 1000);
}
}
//开始构建
function buildJenkins(jenkinsUrl, jobName) {
$.ajax({
type: "post",//请求方式
url: "./StartTest",//发送请求地址
data: {
type: "build",
jenkinsUrl: jenkinsUrl,
jobName: jobName
},
success: function (data) {
playAudio('开始测试' + jobName);
console.log(data);
},
error: function () {
playAudio('开始测试异常' + jobName);
console.log("开始构建异常,递归调用");
buildJenkins(jenkinsUrl, jobName);
}
});
}
//中止构建
function stopJenkins(jenkinsUrl, jobName) {
$.ajax({
type: "post",//请求方式
url: "./StartTest",//发送请求地址
data: {
type: "stopBuild",
jenkinsUrl: jenkinsUrl,
jobName: jobName
},
success: function (data) {
playAudio('中止测试' + jobName);
console.log(data)
},
error: function () {
playAudio('中止测试异常' + jobName);
console.log("中止构建异常,递归调用");
stopJenkins(jenkinsUrl, jobName);
}
});
}
//请求log,并填充到元素
function getLog(type, jenkinsUrl, jobName, id, grepString) {
$.ajax({
type: "post",//请求方式
url: "./StartTest",//发送请求地址
data: {
type: type,
jenkinsUrl: jenkinsUrl,
jobName: jobName,
grepString: grepString
},
success: function (data) {
$("#" + id).html(data);
},
error: function () {
console.log("请求log异常,递归调用:" + id);
getLog(type, jenkinsUrl, jobName, id, grepString);
}
});
//设置滚动条到最底部
let objDiv = document.getElementById(id);
objDiv.scrollTop = objDiv.scrollHeight;
}
//查看构建状态
function code(type, jenkinsUrl, jobName, id) {
$.ajax({
type: "post",//请求方式
url: "./StartTest",//发送请求地址
data: {
type: type,
jenkinsUrl: jenkinsUrl,
jobName: jobName
},
success: function (data) {
$("#" + id).html(data);
if (data === '正在测试') {
switch (jobName) {
case "app_regressionTest":
getLog('logCat', jenkinsUrl, jobName, 'app_regressionTest_log', '');
// 10秒后只执行一次
setTimeout("getLog('logCat','115','app_regressionTest','app_regressionTest_log','')", 10000);
break;
case "monkey":
getLog('logCat', jenkinsUrl, jobName, 'monkey_log', '');
// 10秒后只执行一次
setTimeout("getLog('logCat','115','monkey','monkey_log','')", 10000);
break;
case "InterfaceTest":
getLog('logCat', jenkinsUrl, jobName, 'InterfaceTest_log', '');
// 10秒后只执行一次
setTimeout("getLog('logCat','115','InterfaceTest','InterfaceTest_log','')", 10000);
break;
case "InterfaceTest_live":
getLog('logCat', jenkinsUrl, jobName, 'InterfaceTest_live_log', '');
// 10秒后只执行一次
setTimeout("getLog('logCat','115','InterfaceTest_live','InterfaceTest_live_log','')", 10000);
break;
case "performanceTest":
getLog('logCat', jenkinsUrl, jobName, 'performanceTest_log', '');
// 10秒后只执行一次
setTimeout("getLog('logCat','115','performanceTest','performanceTest_log','')", 10000);
break;
}
}
},
error: function () {
console.log("查看测试状态异常")
}
});
}
//文字转音频
function playAudio(String) {
let msg = new SpeechSynthesisUtterance();
msg.text = String;
msg.lang = 'zh-CN';
console.log(msg);
speechSynthesis.speak(msg);
}
css代码:
body {
background-color: #515151;
/*background-image: url("../css/image/body.jpg");*/
/*background-repeat:no-repeat;*/
/*background-size:100% 100%;*/
/*background-attachment: fixed;*/
}
button {
cursor: pointer;
width: 6%;
}
i {
font-size: 15px;
color: #B8860B;
width: 17%;
}
.interfaceTest_live_style {
background-color: black;
background-attachment: local;
color: limegreen;
float: left;
font-size: 12px;
width: 49%;
height: 300px;
overflow: scroll;
}
.interfaceTest_style {
background-color: black;
background-attachment: local;
color: limegreen;
float: right;
font-size: 12px;
width: 49%;
height: 300px;
overflow: scroll;
}
.performanceTest_style {
background-color: black;
background-attachment: local;
color: limegreen;
float: left;
font-size: 12px;
width: 49%;
height: 300px;
overflow: scroll;
}
.monkey_style {
background-color: black;
background-attachment: local;
color: limegreen;
float: right;
font-size: 12px;
width: 49%;
height: 300px;
overflow: scroll;
}
.app_regressionTest_style {
background-color: black;
background-attachment: local;
color: limegreen;
float: left;
font-size: 12px;
width: 49%;
height: 300px;
overflow: scroll;
}
.op_style {
background-color: black;
background-attachment: local;
color: limegreen;
float: right;
font-size: 12px;
width: 49%;
height: 300px;
overflow: scroll;
}
.titleText {
/*background-color: black;*/
color: #FFE14A;
height: 20px;
width: 8%;
}
.title {
color: #FFE14A;
margin-left: auto;
margin-right: auto;
height: 50px;
width: 100px;
font-size: 20px;
}