- 数据库:添加 amt_status 和 agent_status 字段 - 后端:Device 实体类和 DeviceDTO 添加新状态字段 - 后端:DeviceService 添加状态检测和更新方法 - 后端:添加 AmtStatusCheckTask 定时任务(每30秒检测一次) - 前端:设备列表页面拆分状态列显示 - 前端:统计卡片显示 AMT 和 Agent 在线/离线数量 - 网络扫描:自动设置 AMT 状态为在线 - 文档:添加 DEVICE_STATUS_SPLIT.md 和 AMT_REALTIME_STATUS.md
311 lines
7.3 KiB
Markdown
311 lines
7.3 KiB
Markdown
# 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. **批量操作**: 批量刷新、批量启用/禁用检测
|