提交 bd805351 authored 作者: 陈泽健's avatar 陈泽健

feat(script): 增强NTP服务检测逻辑并优化时间同步检查

- 新增对 chronyd/ntpd 服务运行状态的主动检查
- 修复本地时间获取逻辑,统一使用 UTC 时间戳避免时区偏差
- 更新时间差判定条件,确保服务运行状态下才判断同步状态
- 优化日志记录内容,明确显示本地UTC时间戳与差值
- 在PRD文档中标注NTP修复功能已实现
- 调整测试报告展示逻辑,支持错误信息滚动定位
- 增加.gitignore忽略新平台日志图片目录
上级 6a58107a
/预定系统/log/
/日志监测/error_log/
/预定配套件/中控门口屏/reports/
/预定配套件/中控门口屏/log/
\ No newline at end of file
/预定配套件/中控门口屏/log/
/新统一平台/log/imgs/
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>测试报告</title>
<meta charset="UTF-8">
<style>body {
font-family: consolas, Verdana, sans-serif;
font-size: 1.2em;
color: #696e71;
display: grid;
grid-template-columns: 1fr 5rem;
}
.main_section {
width: 90%;
margin: 0 auto;
}
#float_menu{
position:fixed;
top:0;
right:0;
text-align: center;
}
#float_menu .menu-item {
cursor: pointer;
padding: .5em;
margin: .5em 0;
color: #c08580;
background-color: #f8f0ef;
font-size: 1.2em;
}
.result{
display: flex;
}
.result_table{
border-collapse: collapse;
border: 1px solid #f0e0e5;
width: 30em;
text-align: center;
font-size: 1.0em;
}
.result_table td{
border: 1px solid #f0e0e5;
padding: .3em;
}
.result_barchart{
width: 30em;
margin: 0 5em 0 5em;
}
.barchar_item{
margin: 2.5rem 0;
}
.barchart_barbox {
margin: 0.5em 0;
width: 100%;
background-color: #fff;
border: 1px solid #86c2dd;
border-radius: .2em;
}
.barchart_bar {
text-align: right;
height: 1.2rem;
}
.h3_button {
margin: 1.5em;
cursor: pointer;
color: #03a9f4;
}
.info
{
white-space:pre-wrap;
margin: .8em 1.5em;
}
.error-info
{
color: #a64747
}
.suite_dir {
margin: 1em .2em;
padding: .3em;
/* background-color: #dfeff6; */
border: 1px solid #bcd8e4;
}
.suite_file {
margin: 1em .2em;
padding: .3em;
border: 1px solid #bcd8e4;
}
.case {
margin: 1em .2em;
/* padding: .3em; */
border: 1px solid #e7d4d4;
}
.case_class_path{
margin: 0em 1em;
}
.folder_header {
padding: .2em .7em;
background-color: #fffaf9;
cursor: pointer;
}
.setup{
margin: .2em;
/* padding: .3em; */
/* border: 1px solid #e7d4d4; */
}
.teardown{
margin: .2em;
/* padding: .3em;*/
/* border: 1px solid #e7d4d4; */
}
.test_steps{
margin: .2em;
padding: .3em;
/* border: 1px solid #e7d4d4; */
}
.label {
display: inline-block;
padding: .1em .5em;
font-size: .88em;
letter-spacing: 1px;
white-space: nowrap;
color: #0d6ebc;
border-radius: .2em;
min-width: 5em;
margin-right: 2em;
font-family: consolas;
}
/* .suite_setup .label{
color: #219e26 ;
}
.suite_teardown .label{
color: #219e26;
} */
/* .case.pass .casename{
color: #329132 ;
} */
.case.pass .caselabel{
color: white;
background-color: #3b9e3f;
}
/* .case.fail .casename{
color: #a64747;
} */
.case.fail .caselabel{
color: white;
background-color: #a64747;
}
/* .case.abort .casename{
color: #953ab7;
} */
.case.abort .caselabel{
color: white;
background-color: #9c27b0;
}
.case_step {
margin: .8em;
}
.checkpoint_pass {
margin: .8em;
}
.checkpoint_fail {
margin: .8em;
}
.case_step .tag{
color: #2196f3;;
margin: .3em 1em .3em 0;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_pass .tag{
color: #009806;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.checkpoint_fail .tag{
color: #9c2020;
margin:.3em 1em .3em .5em;
padding: .1em .3em;
font-size: .92em;
}
.screenshot {
border: 1px solid #86c2dd;
}
.executetime {
float: right;
}
/* 模态框内容 */
.modal-content {
margin: auto;
display: block;
width: 95%;
max-width: 700px;
max-height: 80vh; /* 设置最大高度为视口高度的80% */
object-fit: contain; /* 保持图片的宽高比 */
zoom: 3;
}
/* 模态框 */
.modal {
display: none; /* 隐藏 */
position: fixed; /* 固定位置 */
z-index: 1; /* 坐在顶部 */
padding-top: 40px; /* 在图片上方添加一些内边距 */
left: 0;
top: 0;
width: 100%; /* 宽度 */
height: 100%; /* 高度 */
overflow: auto; /* 启用滚动 */
background-color: rgb(0,0,0); /* 背景颜色 */
background-color: rgba(0,0,0,0.9); /* 黑色背景半透明 */
}
/* 关闭按钮 */
.close {
position: absolute; /* 定义元素的定位方式为绝对定位 */
top: 10px; /* 距离最近的已定位祖先元素顶部15像素 */
right: 30px; /* 距离最近的已定位祖先元素右侧35像素 */
color: #f1f1f1; /* 文本颜色为浅灰色 */
font-size: 15px; /* 字体大小为40像素 */
font-weight: bold; /* 字体加粗 */
transition: 0.3s; /* 过渡效果,0.3秒内完成 */
}
.close:hover,
.close:focus {
color: #bbb;
text-decoration: none;
cursor: pointer;
}
</style>
<script type="text/javascript">var FOLDER_ALL_CASES = false; // 是否为精简模式的标记
var ERROR_INFOS = []; // 错误信息列表
var current_error_idx = -1;
// 页面加载后执行的函数
window.addEventListener("load", function(){
// 所有 .folder_header 添加点击事件处理
let folderHeaderEles = document.querySelectorAll(".folder_header");
folderHeaderEles.forEach(function(ele) {
ele.addEventListener("click", function(event) {
let fb = event.target.closest('.folder_header').nextElementSibling;
fb.style.display = fb.style.display === 'none' ? 'block' : 'none';
});
});
// 找到所有的错误信息对象
ERROR_INFOS = document.querySelectorAll(".error-info");
// 获取所有图片元素
let images = document.querySelectorAll('.modal-image');
// 获取模态框元素
let modal = document.getElementById("imageModal");
// 获取模态框中的图片元素
let modalImg = document.getElementById("img01");
// 获取关闭按钮元素
let span = document.getElementsByClassName("close")[0];
// 为每个图片添加点击事件监听器
images.forEach(function(img) {
img.addEventListener("click", function() {
modal.style.display = "block"; // 显示模态框
modalImg.src = this.src; // 设置模态框中的图片为点击的图片
});
});
// 当点击关闭按钮时,隐藏模态框
span.onclick = function() {
modal.style.display = "none";
};
// 当点击模态框外区域时,隐藏模态框
window.onclick = function(event) {
if (event.target == modal) {
modal.style.display = "none";
}
};
});
function toggle_folder_all_cases(){
let eles = document.querySelectorAll(".folder_body");
FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES ? "Detail" : "Summary";
for (const ele of eles){
ele.style.display = FOLDER_ALL_CASES ? "none" : "block";
}
}
function previous_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx -= 1;
if (current_error_idx < 0)
current_error_idx = 0;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
function next_error(){
// 查找错误必须是详细模式
if (FOLDER_ALL_CASES)
toggle_folder_all_cases()
current_error_idx += 1;
if (current_error_idx > ERROR_INFOS.length - 1)
current_error_idx = ERROR_INFOS.length - 1;
let error = ERROR_INFOS[current_error_idx];
error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
}
</script>
</head>
<body>
<div class="modal" id="imageModal">
<div>
<img class="modal-content" id="img01">
<span class="close">关闭</span>
</div>
</div>
<div class="main_section">
<h1 style="font-family: auto">测试报告</h1>
<h3>统计结果</h3>
<div class="result">
<table class="result_table">
<tbody>
<tr>
<td>hytest 版本</td>
<td>0.8.12</td>
</tr>
<tr>
<td>开始时间</td>
<td>2025/12/17 18:54:36</td>
</tr>
<tr>
<td>结束时间</td>
<td>2025/12/17 19:03:22</td>
</tr>
<tr>
<td>耗时</td>
<td>525.890 秒</td>
</tr>
<tr>
<td>预备执行用例数量</td>
<td>29</td>
</tr>
<tr>
<td>实际执用例行数量</td>
<td>29</td>
</tr>
<tr>
<td>通过</td>
<td>26</td>
</tr>
<tr>
<td>失败</td>
<td style="color:red">1</td>
</tr>
<tr>
<td>异常</td>
<td style="color:red">2</td>
</tr>
<tr>
<td>阻塞</td>
<td style="">0</td>
</tr>
<tr>
<td>套件初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>套件清除 失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例初始化失败</td>
<td style="">0</td>
</tr>
<tr>
<td>用例清除 失败</td>
<td style="">0</td>
</tr>
</tbody>
</table>
<div class="result_barchart">
<div class="barchar_item">
<span>用例通过 89.7% : 26 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 89.7%; background-color: #04AA6D;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例失败 3.4% : 1 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 3.4%; background-color: #bb4069;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例异常 6.9% : 2 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 6.9%; background-color: #9c27b0;"></div>
</div>
</div>
<div class="barchar_item">
<span>用例阻塞 0% : 0 个</span>
<div class="barchart_barbox">
<div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
</div>
</div>
</div>
</div>
<div style="margin-top:2em">
<h3 style="display:inline">执行日志</h3>
</div>
<div class="exec_log">
<div class="suite_dir" id="suite_dir cases\">
<div>
<span class="label">进入目录</span>
<span>cases\</span>
</div>
</div>
<div class="suite_dir" id="suite_dir cases\后台系统\">
<div>
<span class="label">进入目录</span>
<span>cases\后台系统\</span>
</div>
<div class="suite_setup setup" id="suite_setup setup cases\后台系统\">
<div class="folder_header">
<span class="label">套件初始化</span>
<span>cases\后台系统\</span>
<span class="executetime">2025-12-17 18:54:36</span>
</div>
<div class="folder_body">
<div class="case_step">
<span class="tag">步骤 #1</span>
<span>初始化浏览器</span>
</div>
<div class="info">'----------' 正在初始化浏览器 '----------'</div>
<div class="info">'----------' 浏览器初始化完成 '----------'</div>
</div>
</div>
</div>
<div class="suite_file" id="suite_file cases\后台系统\功能测试.py">
<div>
<span class="label">进入文件</span>
<span>cases\后台系统\功能测试.py</span>
</div>
<div class="case pass" id="case_00000001">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">登录方式-001</span>
<span class="executetime">2025-12-17 18:54:38</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 登录方式-001">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入正确的账号或手机号、邮箱号
</div>
<div class="info">步骤名称: 输入正确的密码
</div>
<div class="info">步骤名称: 输入正确的认证码
</div>
<div class="info">步骤名称: 刷新页面
</div>
<div class="info">刷新页面</div>
</div>
</div>
</div>
<div class="case abort" id="case_00000002">
<div class="folder_header">
<span class="label caselabel">用例 ABORT</span>
<span class="casename">新统一平台后台管理-002</span>
<span class="executetime">2025-12-17 18:54:44</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-002">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击左侧【组织信息】
</div>
<div class="info">步骤名称: 输入“组织信息名称”
</div>
<div class="info">步骤名称: 获取查询结果
</div>
<div class="info">获取到的文本信息为:None</div>
<div class="info error-info">argument of type 'NoneType' is not iterable
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\新统一平台\cases\后台系统\功能测试.py&quot;, line 107, in teststeps
CHECK_POINT(f&quot;获取到的文本信息为:{text}&quot;, expected_result in text)
TypeError: argument of type 'NoneType' is not iterable
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000003">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-003</span>
<span class="executetime">2025-12-17 18:55:49</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-003">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击左侧【用户管理】
</div>
<div class="info">步骤名称: 点击【用户列表】按钮
</div>
<div class="info">步骤名称: 点击【新增】按钮
</div>
<div class="info">步骤名称: 输入账号
</div>
<div class="info">步骤名称: 输入用户名
</div>
<div class="info">步骤名称: 输入新密码
</div>
<div class="info">步骤名称: 输入确认密码
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185607087980.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185609246586.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000004">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-004</span>
<span class="executetime">2025-12-17 18:56:09</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-004">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入账号
</div>
<div class="info">步骤名称: 点击【编辑】按钮
</div>
<div class="info">步骤名称: 输入新用户名
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185618204460.png" width="50%">
</div>
<div class="info">获取到的提示信息为:修改成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:修改成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185620353028.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000005">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-005</span>
<span class="executetime">2025-12-17 18:56:20</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-005">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入账号进行搜索
</div>
<div class="info">步骤名称: 获取查询结果文本
</div>
<div class="info">获取到的文本信息为:admin@zdh1</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:admin@zdh1</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185622778562.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000006">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-006</span>
<span class="executetime">2025-12-17 18:56:24</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-006">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入账号进行搜索
</div>
<div class="info">步骤名称: 点击【停用】按钮
</div>
<div class="info">步骤名称: 再点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000007">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-007</span>
<span class="executetime">2025-12-17 18:56:33</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-007">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入账号进行搜索
</div>
<div class="info">步骤名称: 点击【启用】按钮
</div>
<div class="info">步骤名称: 再点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000008">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-008</span>
<span class="executetime">2025-12-17 18:56:42</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-008">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入账号进行搜索
</div>
<div class="info">步骤名称: 点击【删除】按钮
</div>
<div class="info">步骤名称: 再点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185648677135.png" width="50%">
</div>
<div class="info">获取到的提示信息为:删除成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:删除成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185650816940.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000009">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-009</span>
<span class="executetime">2025-12-17 18:56:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-009">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【部门管理】按钮
</div>
<div class="info">步骤名称: 点击右上角【添加】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185655277384.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185657510522.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000010">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-010</span>
<span class="executetime">2025-12-17 18:56:57</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-010">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击子部门添加按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185659765640.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185701915965.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000011">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-011</span>
<span class="executetime">2025-12-17 18:57:02</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-011">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击子级部门右侧【编辑】按钮
</div>
<div class="info">步骤名称: 输入新部门名称
</div>
<div class="info">步骤名称: 点击【确定】按钮进行
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185708461047.png" width="50%">
</div>
<div class="info">获取到的提示信息为:修改成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:修改成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185710600811.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000012">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-012</span>
<span class="executetime">2025-12-17 18:57:10</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-012">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击子级部门右侧【删除】按钮
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185714938143.png" width="50%">
</div>
<div class="info">获取到的提示信息为:删除成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:删除成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185717075069.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000013">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-014</span>
<span class="executetime">2025-12-17 18:57:17</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-014">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【职位管理】按钮进入模块
</div>
<div class="info">步骤名称: 点击右上角【添加】按钮
</div>
<div class="info">步骤名称: 输入职位名称
</div>
<div class="info">步骤名称: 勾选部门
</div>
<div class="info">步骤名称: 点击【确定】按钮进行新增
</div>
<div class="info">步骤名称: 获取提示文本
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185728108678.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185730271638.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000014">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-019</span>
<span class="executetime">2025-12-17 18:57:30</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-019">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【角色管理】按钮进入模块
</div>
<div class="info">步骤名称: 点击右上角【添加】按钮
</div>
<div class="info">步骤名称: 输入角色名称
</div>
<div class="info">步骤名称: 输入角色类型
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 添加成功
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185741233290.png" width="50%">
</div>
<div class="info">获取到的提示信息为:权限不足。无法请求接口</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:权限不足。无法请求接口</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185743384457.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000015">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-024</span>
<span class="executetime">2025-12-17 18:57:43</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-024">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【人脸管理】按钮进入模块
</div>
<div class="info">步骤名称: 输入用户名称进行搜索
</div>
<div class="info">步骤名称: 查看是否正确显示符合条件的数据
</div>
<div class="info">获取到的文本信息为:admin@xty</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:admin@xty</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185747937584.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000016">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-026</span>
<span class="executetime">2025-12-17 18:57:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-026">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【白名单】按钮进入模块
</div>
<div class="info">步骤名称: 输入手机号码查询用户
</div>
<div class="info">步骤名称: 查看是否正确显示符合条件的用户数据
</div>
<div class="info">获取到的文本信息为:暂无数据</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:暂无数据</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185754595852.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000017">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-029</span>
<span class="executetime">2025-12-17 18:57:56</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-029">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【区域管理】按钮
</div>
<div class="info">步骤名称: 点击【区域列表】按钮进入模块
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000018">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-033</span>
<span class="executetime">2025-12-17 18:58:01</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-033">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【功能管理】按钮进入模块
</div>
<div class="info">步骤名称: 再点击右上角【添加】按钮
</div>
<div class="info">步骤名称: 输入功能名称
</div>
<div class="info">步骤名称: 输入功能类型
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 查看是否正确添加成功
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185812054829.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185814203449.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000019">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-038</span>
<span class="executetime">2025-12-17 18:58:14</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-038">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【类型管理】按钮进入模块
</div>
<div class="info">步骤名称: 点击右上角【添加】按钮
</div>
<div class="info">步骤名称: 输入类型名称
</div>
<div class="info">步骤名称: 输入类型描述
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 查看是否正确添加成功
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185825079235.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185827239981.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000020">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-043</span>
<span class="executetime">2025-12-17 18:58:27</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-043">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【场景管理】按钮进入模块
</div>
<div class="info">步骤名称: 点击右上角【添加】按钮
</div>
<div class="info">步骤名称: 点击任一椅子
</div>
<div class="info">步骤名称: 点击【保存】按钮
</div>
<div class="info">步骤名称: 输入场景名称
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 查看是否正确保存成功
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185840266610.png" width="50%">
</div>
<div class="info">获取到的提示信息为:保存成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:保存成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185842423176.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000021">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-045</span>
<span class="executetime">2025-12-17 18:58:42</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-045">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 输入场景名称进行搜索
</div>
<div class="info">步骤名称: 点击【删除】按钮
</div>
<div class="info">步骤名称: 再点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示信息
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185848915502.png" width="50%">
</div>
<div class="info">获取到的提示信息为:删除成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:删除成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185851075056.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000022">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-049</span>
<span class="executetime">2025-12-17 18:58:51</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-049">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【办公室管理】按钮进入模块
</div>
<div class="info">步骤名称: 点击【添加】按钮
</div>
<div class="info">步骤名称: 输入办公室名称
</div>
<div class="info">步骤名称: 勾选办公室人员
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 查看提示信息
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185901970294.png" width="50%">
</div>
<div class="info">获取到的提示信息为:操作成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:操作成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185904119131.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000023">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-059</span>
<span class="executetime">2025-12-17 18:59:04</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-059">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【模式管理】进入模块
</div>
<div class="info">步骤名称: 点击【添加】按钮
</div>
<div class="info">步骤名称: 输入会议室模式名称
</div>
<div class="info">步骤名称: 输入模式描述
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示信息
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185915003824.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185917140596.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000024">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-064</span>
<span class="executetime">2025-12-17 18:59:17</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-064">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【分屏管理】进入模块
</div>
<div class="info">步骤名称: 点击【添加】按钮
</div>
<div class="info">步骤名称: 输入分屏名称
</div>
<div class="info">步骤名称: 输入分屏描述
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示信息
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185928162985.png" width="50%">
</div>
<div class="info">获取到的提示信息为:添加成功</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:添加成功</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185930301127.png" width="75">
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000025">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-074</span>
<span class="executetime">2025-12-17 18:59:30</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-074">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【设备管理】按钮展开模块
</div>
<div class="info">步骤名称: 点击【会议设备】按钮进入模块
</div>
<div class="info">步骤名称: 输入终端名称进行搜索
</div>
<div class="info">步骤名称: 查看列表是否显示符合条件的数据
</div>
<div class="info">获取到的文本信息为:无纸化</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:无纸化</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217185936970646.png" width="75">
</div>
</div>
</div>
</div>
<div class="case abort" id="case_00000026">
<div class="folder_header">
<span class="label caselabel">用例 ABORT</span>
<span class="casename">新统一平台后台管理-080</span>
<span class="executetime">2025-12-17 18:59:39</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-080">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【感应设备】按钮进入模块
</div>
<div class="info">步骤名称: 输入关键字进行搜索
</div>
<div class="info">TimeoutException: Element ('xpath', &quot;//div[@id='pane-vWIFI']//input[@placeholder='输入关键字']&quot;) not found or not clickable within 20 seconds.</div>
<div class="info">步骤名称: 获取列表数据信息
</div>
<div class="info">获取到的文本信息为:None</div>
<div class="info error-info">argument of type 'NoneType' is not iterable
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\新统一平台\cases\后台系统\功能测试.py&quot;, line 107, in teststeps
CHECK_POINT(f&quot;获取到的文本信息为:{text}&quot;, expected_result in text)
TypeError: argument of type 'NoneType' is not iterable
</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000027">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-086</span>
<span class="executetime">2025-12-17 19:01:43</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-086">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【SMC会场】按钮进入模块
</div>
<div class="info">步骤名称: 输入会场终端名称
</div>
<div class="info">步骤名称: 获取列表数据信息
</div>
<div class="info">获取到的文本信息为:暂无数据</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的文本信息为:暂无数据</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217190148084109.png" width="75">
</div>
</div>
</div>
</div>
<div class="case fail" id="case_00000028">
<div class="folder_header">
<span class="label caselabel">用例 FAIL</span>
<span class="casename">新统一平台后台管理-087</span>
<span class="executetime">2025-12-17 19:01:50</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-087">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【控制管理】展开模块下拉框
</div>
<div class="info">步骤名称: 点击【模式调用】按钮进入模块
</div>
<div class="info">步骤名称: 点击【新增】按钮
</div>
<div class="info">步骤名称: 点击【区域名称】展开下拉框
</div>
<div class="info">步骤名称: 选择【全区配置】
</div>
<div class="info">步骤名称: 输入模式名称
</div>
<div class="info">步骤名称: 点击【联动动作】展开下拉框
</div>
<div class="info">步骤名称: 选择【一键开电源】
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 获取提示信息
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217190233371141.png" width="50%">
</div>
<div class="info">获取到的提示信息为:</div>
<div class="checkpoint_fail">
<span class="tag">检查点 FAIL</span>
<span>获取到的提示信息为:</span>
</div>
<div class="info error-info">
Traceback:
File &quot;E:\GithubData\自动化\ubains-module-test\新统一平台\cases\后台系统\功能测试.py&quot;, line 101, in teststeps
CHECK_POINT(f&quot;获取到的提示信息为:{notify_text}&quot;, expected_result in notify_text)</div>
</div>
</div>
</div>
<div class="case pass" id="case_00000029">
<div class="folder_header">
<span class="label caselabel">用例 PASS</span>
<span class="casename">新统一平台后台管理-090</span>
<span class="executetime">2025-12-17 19:02:35</span>
</div>
<div class="folder_body">
<span class="case_class_path">cases\后台系统\功能测试.py::NewUnifiedPlatform</span>
<div class="test_steps" id="test_steps 新统一平台后台管理-090">
<span class="label">测试步骤</span>
<div class="info">步骤名称: 点击【定时计划】按钮进入模块
</div>
<div class="info">步骤名称: 点击【新增】按钮
</div>
<div class="info">步骤名称: 输入计划名称
</div>
<div class="info">步骤名称: 点击【联动动作】按钮展开下拉框
</div>
<div class="info">步骤名称: 选择一键开电源
</div>
<div class="info">步骤名称: 点击开始日期展开日历框
</div>
<div class="info">步骤名称: 选择任一时间
</div>
<div class="info">步骤名称: 点击执行时间展开日历框
</div>
<div class="info">步骤名称: 选择执行时间
</div>
<div class="info">步骤名称: 点击结束时间展开日历框
</div>
<div class="info">步骤名称: 选择结束日期
</div>
<div class="info">步骤名称: 点击【确定】按钮
</div>
<div class="info">步骤名称: 查看是否正确保存成功
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217190301216596.png" width="50%">
</div>
<div class="info">获取到的提示信息为:操作成功!</div>
<div class="checkpoint_pass">
<span class="tag">检查点 PASS</span>
<span>获取到的提示信息为:操作成功!</span>
</div>
<div>
<img class="modal-image screenshot" src="imgs/20251217190303390166.png" width="75">
</div>
</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\后台系统\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\后台系统\</span>
<span class="executetime">2025-12-17 19:03:03</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
<div class="suite_teardown teardown" id="suite_teardown teardown cases\">
<div class="folder_header">
<span class="label">套件清除</span>
<span>cases\</span>
<span class="executetime">2025-12-17 19:03:05</span>
</div>
<div class="folder_body">
<div class="info">清除浏览器</div>
</div>
</div>
</div>
</div>
</div>
<div id="float_menu">
<div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">页首</div>
<div class="menu-item" onclick="window.open(&quot;http://www.byhy.net/tut/auto/hytest/01&quot;, &quot;_blank&quot;); ">帮助</div>
<div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
<div class="error_jumper" display="block">
<div class="menu-item" onclick="previous_error()" title="上一个错误"></div>
<div class="menu-item" onclick="next_error()" title="下一个错误"></div>
</div>
</div>
</body>
</html>
\ No newline at end of file
......@@ -231,7 +231,7 @@
##### 13、定时任务查询(待实现):
##### 14、上传修复脚本(待实现):
##### 14、上传修复脚本(已实现NTP修复):
函数名称:Upload_the_repair_script
功能描述:函数只做上传脚本及脚本调用,上传当前目录下的issue_handler.sh脚本,将脚本上传到目标服务器,并且通过传入的修复函数,调用issue_handler对应的函数来修复。
......
......@@ -2254,6 +2254,18 @@ function Check-NTPService {
Write-Log -Level "INFO" -Message "[NTP] systemctl 输出: $([string]::Join(' ', $Result.Output))"
if ($Result.ExitCode -eq 0 -and $Result.Output -match "ntp|chronyd") {
Write-Log -Level "SUCCESS" -Message "[NTP] 已检测到 NTP/Chrony 服务"
# 新增:检查 chronyd/ntpd 是否处于 active(running)
$activeCmd = "if systemctl is-active chronyd >/dev/null 2>&1; then echo CHRONYD_ACTIVE; fi; if systemctl is-active ntpd >/dev/null 2>&1; then echo NTPD_ACTIVE; fi"
$activeRes = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Command $activeCmd
$chronydActive = ($activeRes.Output -match 'CHRONYD_ACTIVE')
$ntpdActive = ($activeRes.Output -match 'NTPD_ACTIVE')
if (-not $chronydActive -and -not $ntpdActive) {
Write-Log -Level "ERROR" -Message "[NTP] 检测到 chronyd/ntpd 未运行"
$summary.Status = '异常'; $summary.Detail = 'chronyd/ntpd 未运行'
$needRepair = $true
}
$StatusCommand = "timedatectl status"
$StatusResult = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Command $StatusCommand
Write-Log -Level "INFO" -Message "[NTP] timedatectl 输出: $([string]::Join(' ', $StatusResult.Output))"
......@@ -2263,10 +2275,11 @@ function Check-NTPService {
Write-Log -Level "INFO" -Message "[NTP] 服务器时间戳: $([string]::Join(' ', $ServerTimeResult.Output))"
if ($ServerTimeResult.ExitCode -eq 0) {
$ServerTimeUTC = [int]($ServerTimeResult.Output | Select-Object -First 1).Trim()
$LocalTime = [int](Get-Date -UFormat %s)
# 本地改为 UTC 秒,避免时区偏差
$LocalTime = [int][DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
$TimeDifference = [math]::Abs($ServerTimeUTC - $LocalTime)
Write-Log -Level "INFO" -Message "[NTP] 本地时间戳: $LocalTime, 差值: $TimeDifference 秒"
if ($TimeDifference -le 5) {
Write-Log -Level "INFO" -Message "[NTP] 本地UTC时间戳: $LocalTime, 差值: $TimeDifference 秒"
if ($TimeDifference -le 5 -and ($chronydActive -or $ntpdActive)) {
Write-Log -Level "SUCCESS" -Message "[NTP] 服务器时间与本地时间一致"
$summary.Status = '正常'
$summary.Detail = "时间差 ${TimeDifference}s"
......@@ -2306,7 +2319,8 @@ function Check-NTPService {
$postTime = Invoke-SSHCommand -HostName $ServerIP -User $Username -Pass $Password -Command "date +%s"
if ($postStatus.ExitCode -eq 0 -and $postTime.ExitCode -eq 0) {
$srvTs = [int]($postTime.Output | Select-Object -First 1).Trim()
$locTs = [int](Get-Date -UFormat %s)
# 本地用 UTC 秒
$locTs = [int][DateTimeOffset]::UtcNow.ToUnixTimeSeconds()
$diff = [math]::Abs($srvTs - $locTs)
Write-Log -Level "INFO" -Message "[NTP] 复检时间差: ${diff}s"
if ($diff -le 5) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论