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

311 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 <ip> 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. **批量操作**: 批量刷新批量启用/禁用检测