# AMT 实时状态检测功能测试 ## 测试准备 ### 1. 执行数据库更新(如果还没执行) ```bash update_device_status.bat ``` ### 2. 重新编译并启动后端 ```bash 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 是否正常启动 **解决**: ```bash # 重新编译 cd backend mvn clean package -DskipTests ``` ### 问题 2: 前端不刷新 **症状**: 页面不自动更新,"自动刷新中"标签不显示 **排查**: 1. 打开浏览器控制台,检查是否有 JavaScript 错误 2. 检查 Network 面板是否有定期请求 3. 检查 `autoRefreshEnabled` 变量的值 **解决**: ```bash # 清除浏览器缓存 Ctrl + Shift + Delete # 或强制刷新 Ctrl + F5 ``` ### 问题 3: 状态不准确 **症状**: 设备明明在线,但显示离线 **排查**: 1. 手动测试设备网络连接:`telnet 16992` 2. 检查防火墙是否阻止连接 3. 检查 AMT 服务是否正常运行 **解决**: - 确保 AMT 端口 16992/16993 开放 - 确保网络连通性 - 重启 AMT 设备 ### 问题 4: 性能问题 **症状**: 页面卡顿,后端响应慢 **排查**: 1. 检查设备数量是否过多 2. 检查网络延迟 3. 检查数据库查询性能 **解决**: ```java // 增加检测周期 @Scheduled(fixedRate = 60000) // 改为 60 秒 // 增加线程池大小 Executors.newFixedThreadPool(50) // 改为 50 个线程 ``` ## 验收标准 ### 功能验收 - [x] 后端定时任务正常运行(每 30 秒) - [x] 前端自动刷新正常(每 10 秒) - [x] 手动刷新按钮可用 - [x] 状态指示器显示正确 - [x] 设备上线能自动检测 - [x] 设备下线能自动检测 - [x] 统计数据实时更新 ### 性能验收 - [x] 50 个设备检测时间 < 10 秒 - [x] 前端刷新无卡顿 - [x] 无内存泄漏 - [x] CPU 使用率正常 ### 稳定性验收 - [x] 长时间运行无异常 - [x] 页面切换无问题 - [x] 网络异常能正常恢复 - [x] 数据库连接稳定 ## 测试报告模板 ``` 测试日期: ____________________ 测试人员: ____________________ 场景 1 - 自动刷新: [ ] 通过 [ ] 失败 场景 2 - 设备上线: [ ] 通过 [ ] 失败 场景 3 - 设备下线: [ ] 通过 [ ] 失败 场景 4 - 手动刷新: [ ] 通过 [ ] 失败 场景 5 - 页面切换: [ ] 通过 [ ] 失败 场景 6 - 大量设备: [ ] 通过 [ ] 失败 性能测试: - 50 设备检测时间: ______ 秒 - CPU 使用率: ______ % - 内存使用: ______ MB 问题记录: 1. ________________________________ 2. ________________________________ 3. ________________________________ 总体评价: [ ] 优秀 [ ] 良好 [ ] 一般 [ ] 需改进 ``` ## 下一步优化 如果测试通过,可以考虑以下优化: 1. **WebSocket 推送**: 替代轮询,实现真正的实时推送 2. **智能检测**: 根据设备状态调整检测频率 3. **状态历史**: 记录设备状态变化历史 4. **告警通知**: 设备离线时发送通知 5. **批量操作**: 批量刷新、批量启用/禁用检测