admin/test_realtime_status.md
lvfengfree 2e28ad1472 feat: 拆分设备状态为AMT状态和Agent状态
- 数据库:添加 amt_status 和 agent_status 字段
- 后端:Device 实体类和 DeviceDTO 添加新状态字段
- 后端:DeviceService 添加状态检测和更新方法
- 后端:添加 AmtStatusCheckTask 定时任务(每30秒检测一次)
- 前端:设备列表页面拆分状态列显示
- 前端:统计卡片显示 AMT 和 Agent 在线/离线数量
- 网络扫描:自动设置 AMT 状态为在线
- 文档:添加 DEVICE_STATUS_SPLIT.md 和 AMT_REALTIME_STATUS.md
2026-03-01 19:18:32 +08:00

7.3 KiB
Raw Blame History

AMT 实时状态检测功能测试

测试准备

1. 执行数据库更新(如果还没执行)

update_device_status.bat

2. 重新编译并启动后端

rebuild_and_start_realtime.bat

等待后端启动完成,会看到类似日志:

开始 AMT 状态检测任务
开始检测 X 个设备的 AMT 状态
AMT 状态检测任务完成

测试场景

场景 1: 查看自动刷新功能

步骤:

  1. 打开浏览器,访问设备列表页面
  2. 观察右上角是否显示"自动刷新中"标签
  3. 打开浏览器开发者工具F12
  4. 切换到 Network 标签
  5. 观察是否每 10 秒发送一次设备列表请求

预期结果:

  • 显示"自动刷新中"绿色标签
  • Network 面板每 10 秒出现一次 /device/list 请求
  • 设备状态自动更新

场景 2: 测试设备上线检测

步骤:

  1. 确保有一台 AMT 设备处于关机状态
  2. 在设备列表中找到该设备,确认 AMT 状态为"离线"
  3. 启动该 AMT 设备
  4. 等待最多 40 秒30秒后端检测 + 10秒前端刷新
  5. 观察设备的 AMT 状态是否变为"在线"

预期结果:

  • 设备启动后AMT 状态自动从"离线"变为"在线"
  • 后端日志显示状态变化记录
  • 无需手动刷新页面

场景 3: 测试设备下线检测

步骤:

  1. 确保有一台 AMT 设备处于开机状态
  2. 在设备列表中找到该设备,确认 AMT 状态为"在线"
  3. 关闭该 AMT 设备
  4. 等待最多 40 秒30秒后端检测 + 10秒前端刷新
  5. 观察设备的 AMT 状态是否变为"离线"

预期结果:

  • 设备关机后AMT 状态自动从"在线"变为"离线"
  • 后端日志显示状态变化记录
  • 无需手动刷新页面

场景 4: 测试手动刷新按钮

步骤:

  1. 在设备列表页面,点击"刷新状态"按钮
  2. 观察按钮是否显示加载状态
  3. 观察设备列表是否立即更新

预期结果:

  • 按钮显示加载动画
  • 设备列表立即刷新
  • 获取最新的设备状态

场景 5: 测试页面切换

步骤:

  1. 在设备列表页面停留一段时间
  2. 切换到其他页面(如首页)
  3. 等待 10 秒以上
  4. 切换回设备列表页面

预期结果:

  • 切换到其他页面后,定时器应该被清除
  • 切换回设备列表页面后,重新启动定时器
  • 不会出现多个定时器同时运行的情况

场景 6: 测试大量设备

步骤:

  1. 添加多个设备(建议 10+ 个)
  2. 观察后端日志中的检测时间
  3. 观察前端刷新是否流畅

预期结果:

  • 后端能在 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 状态检测任务"

排查:

  1. 检查 SoybeanAdminApplication.java 是否有 @EnableScheduling 注解
  2. 检查 AmtStatusCheckTask.java 是否有 @Component 注解
  3. 检查 Spring Boot 是否正常启动

解决:

# 重新编译
cd backend
mvn clean package -DskipTests

问题 2: 前端不刷新

症状: 页面不自动更新,"自动刷新中"标签不显示

排查:

  1. 打开浏览器控制台,检查是否有 JavaScript 错误
  2. 检查 Network 面板是否有定期请求
  3. 检查 autoRefreshEnabled 变量的值

解决:

# 清除浏览器缓存
Ctrl + Shift + Delete

# 或强制刷新
Ctrl + F5

问题 3: 状态不准确

症状: 设备明明在线,但显示离线

排查:

  1. 手动测试设备网络连接:telnet <ip> 16992
  2. 检查防火墙是否阻止连接
  3. 检查 AMT 服务是否正常运行

解决:

  • 确保 AMT 端口 16992/16993 开放
  • 确保网络连通性
  • 重启 AMT 设备

问题 4: 性能问题

症状: 页面卡顿,后端响应慢

排查:

  1. 检查设备数量是否过多
  2. 检查网络延迟
  3. 检查数据库查询性能

解决:

// 增加检测周期
@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. ________________________________

总体评价: [ ] 优秀 [ ] 良好 [ ] 一般 [ ] 需改进

下一步优化

如果测试通过,可以考虑以下优化:

  1. WebSocket 推送: 替代轮询,实现真正的实时推送
  2. 智能检测: 根据设备状态调整检测频率
  3. 状态历史: 记录设备状态变化历史
  4. 告警通知: 设备离线时发送通知
  5. 批量操作: 批量刷新、批量启用/禁用检测