- 数据库:添加 amt_status 和 agent_status 字段 - 后端:Device 实体类和 DeviceDTO 添加新状态字段 - 后端:DeviceService 添加状态检测和更新方法 - 后端:添加 AmtStatusCheckTask 定时任务(每30秒检测一次) - 前端:设备列表页面拆分状态列显示 - 前端:统计卡片显示 AMT 和 Agent 在线/离线数量 - 网络扫描:自动设置 AMT 状态为在线 - 文档:添加 DEVICE_STATUS_SPLIT.md 和 AMT_REALTIME_STATUS.md
7.3 KiB
7.3 KiB
AMT 实时状态检测功能测试
测试准备
1. 执行数据库更新(如果还没执行)
update_device_status.bat
2. 重新编译并启动后端
rebuild_and_start_realtime.bat
等待后端启动完成,会看到类似日志:
开始 AMT 状态检测任务
开始检测 X 个设备的 AMT 状态
AMT 状态检测任务完成
测试场景
场景 1: 查看自动刷新功能
步骤:
- 打开浏览器,访问设备列表页面
- 观察右上角是否显示"自动刷新中"标签
- 打开浏览器开发者工具(F12)
- 切换到 Network 标签
- 观察是否每 10 秒发送一次设备列表请求
预期结果:
- 显示"自动刷新中"绿色标签
- Network 面板每 10 秒出现一次
/device/list请求 - 设备状态自动更新
场景 2: 测试设备上线检测
步骤:
- 确保有一台 AMT 设备处于关机状态
- 在设备列表中找到该设备,确认 AMT 状态为"离线"
- 启动该 AMT 设备
- 等待最多 40 秒(30秒后端检测 + 10秒前端刷新)
- 观察设备的 AMT 状态是否变为"在线"
预期结果:
- 设备启动后,AMT 状态自动从"离线"变为"在线"
- 后端日志显示状态变化记录
- 无需手动刷新页面
场景 3: 测试设备下线检测
步骤:
- 确保有一台 AMT 设备处于开机状态
- 在设备列表中找到该设备,确认 AMT 状态为"在线"
- 关闭该 AMT 设备
- 等待最多 40 秒(30秒后端检测 + 10秒前端刷新)
- 观察设备的 AMT 状态是否变为"离线"
预期结果:
- 设备关机后,AMT 状态自动从"在线"变为"离线"
- 后端日志显示状态变化记录
- 无需手动刷新页面
场景 4: 测试手动刷新按钮
步骤:
- 在设备列表页面,点击"刷新状态"按钮
- 观察按钮是否显示加载状态
- 观察设备列表是否立即更新
预期结果:
- 按钮显示加载动画
- 设备列表立即刷新
- 获取最新的设备状态
场景 5: 测试页面切换
步骤:
- 在设备列表页面停留一段时间
- 切换到其他页面(如首页)
- 等待 10 秒以上
- 切换回设备列表页面
预期结果:
- 切换到其他页面后,定时器应该被清除
- 切换回设备列表页面后,重新启动定时器
- 不会出现多个定时器同时运行的情况
场景 6: 测试大量设备
步骤:
- 添加多个设备(建议 10+ 个)
- 观察后端日志中的检测时间
- 观察前端刷新是否流畅
预期结果:
- 后端能在 30 秒内完成所有设备检测
- 前端刷新流畅,无卡顿
- 统计数据正确更新
后端日志检查
正常日志示例
2024-03-01 10:00:10.123 INFO - 开始 AMT 状态检测任务
2024-03-01 10:00:10.124 INFO - 开始检测 5 个设备的 AMT 状态
2024-03-01 10:00:12.456 INFO - 设备 Server-01 (192.168.8.100) AMT 状态变化: offline -> online
2024-03-01 10:00:13.789 INFO - AMT 状态检测任务完成
异常日志示例
2024-03-01 10:00:10.123 ERROR - 检测设备 Server-01 AMT 状态失败: Connection timeout
2024-03-01 10:00:10.124 ERROR - AMT 状态检测任务失败: NullPointerException
前端检查
1. 检查自动刷新标签
在设备列表页面右上角应该看到:
[✓ 自动刷新中]
2. 检查网络请求
打开开发者工具 -> Network 标签,应该看到:
GET /device/list?current=1&size=10 (每10秒一次)
Status: 200
Response: { code: "0000", data: {...}, message: "success" }
3. 检查状态列
设备列表表格应该有两列:
- AMT状态:显示"在线"(绿色)或"离线"(灰色)
- Agent状态:显示"在线"(蓝色)或"离线"(灰色)
4. 检查统计卡片
页面顶部应该显示:
- 总设备数
- AMT在线
- AMT离线
- Agent在线
- Agent离线
性能测试
1. 后端性能
测试方法:
- 添加 50 个设备
- 观察后端检测任务的执行时间
- 检查 CPU 和内存使用情况
预期结果:
- 50 个设备检测时间 < 10 秒
- CPU 使用率 < 50%
- 内存增长 < 100MB
2. 前端性能
测试方法:
- 在设备列表页面停留 5 分钟
- 观察浏览器内存使用情况
- 检查是否有内存泄漏
预期结果:
- 内存使用稳定,无持续增长
- 页面响应流畅
- 无控制台错误
故障排查
问题 1: 后端不检测
症状: 后端日志没有"开始 AMT 状态检测任务"
排查:
- 检查
SoybeanAdminApplication.java是否有@EnableScheduling注解 - 检查
AmtStatusCheckTask.java是否有@Component注解 - 检查 Spring Boot 是否正常启动
解决:
# 重新编译
cd backend
mvn clean package -DskipTests
问题 2: 前端不刷新
症状: 页面不自动更新,"自动刷新中"标签不显示
排查:
- 打开浏览器控制台,检查是否有 JavaScript 错误
- 检查 Network 面板是否有定期请求
- 检查
autoRefreshEnabled变量的值
解决:
# 清除浏览器缓存
Ctrl + Shift + Delete
# 或强制刷新
Ctrl + F5
问题 3: 状态不准确
症状: 设备明明在线,但显示离线
排查:
- 手动测试设备网络连接:
telnet <ip> 16992 - 检查防火墙是否阻止连接
- 检查 AMT 服务是否正常运行
解决:
- 确保 AMT 端口 16992/16993 开放
- 确保网络连通性
- 重启 AMT 设备
问题 4: 性能问题
症状: 页面卡顿,后端响应慢
排查:
- 检查设备数量是否过多
- 检查网络延迟
- 检查数据库查询性能
解决:
// 增加检测周期
@Scheduled(fixedRate = 60000) // 改为 60 秒
// 增加线程池大小
Executors.newFixedThreadPool(50) // 改为 50 个线程
验收标准
功能验收
- 后端定时任务正常运行(每 30 秒)
- 前端自动刷新正常(每 10 秒)
- 手动刷新按钮可用
- 状态指示器显示正确
- 设备上线能自动检测
- 设备下线能自动检测
- 统计数据实时更新
性能验收
- 50 个设备检测时间 < 10 秒
- 前端刷新无卡顿
- 无内存泄漏
- CPU 使用率正常
稳定性验收
- 长时间运行无异常
- 页面切换无问题
- 网络异常能正常恢复
- 数据库连接稳定
测试报告模板
测试日期: ____________________
测试人员: ____________________
场景 1 - 自动刷新: [ ] 通过 [ ] 失败
场景 2 - 设备上线: [ ] 通过 [ ] 失败
场景 3 - 设备下线: [ ] 通过 [ ] 失败
场景 4 - 手动刷新: [ ] 通过 [ ] 失败
场景 5 - 页面切换: [ ] 通过 [ ] 失败
场景 6 - 大量设备: [ ] 通过 [ ] 失败
性能测试:
- 50 设备检测时间: ______ 秒
- CPU 使用率: ______ %
- 内存使用: ______ MB
问题记录:
1. ________________________________
2. ________________________________
3. ________________________________
总体评价: [ ] 优秀 [ ] 良好 [ ] 一般 [ ] 需改进
下一步优化
如果测试通过,可以考虑以下优化:
- WebSocket 推送: 替代轮询,实现真正的实时推送
- 智能检测: 根据设备状态调整检测频率
- 状态历史: 记录设备状态变化历史
- 告警通知: 设备离线时发送通知
- 批量操作: 批量刷新、批量启用/禁用检测