Files
wvp-platform/docs/intrusion_test_quick_guide.md

350 lines
7.1 KiB
Markdown
Raw Normal View History

# 周界入侵自动解除功能测试快速指南
## 快速验证步骤
### 1. Edge端代码验证
```bash
# 1. 检查IntrusionAlgorithm状态机
grep -A 5 "STATE_IDLE\|STATE_CONFIRMING_INTRUSION\|STATE_ALARMED\|STATE_CONFIRMING_CLEAR" algorithms.py
# 2. 检查set_last_alarm_id方法
grep -A 3 "def set_last_alarm_id" algorithms.py
# 3. 检查main.py回填逻辑
grep -A 3 "intrusion.*set_last_alarm_id" main.py
# 4. 检查alarm_resolve事件生成
grep -A 10 "alarm_resolve.*intrusion" algorithms.py
```
### 2. Backend端验证
查看文件: `AiAlgorithmServiceImpl.java` 行46-49
确认描述包含: "入侵消失后,连续confirm_seconds秒无人自动结束告警"
### 3. Frontend端验证
查看文件: `AlgorithmParamEditor.vue`
- 行50: `confirm_seconds: '确认时间(秒)'`
- 行64: `confirm_seconds: '持续检测到人达到该时间后触发告警,持续无人达到该时间后自动结束告警'`
---
## 手动测试流程
### 环境准备
```bash
# 1. 进入Edge目录
cd C:\Users\16337\PycharmProjects\ai_edge
# 2. (可选) 准备测试配置
python test_edge_run.py
# 3. 启动Edge服务
python main.py
```
### 测试场景1: 基本入侵-消失流程
**操作步骤**:
1. 人员进入ROI区域
2. 停留5秒以上
3. 观察告警生成
4. 离开ROI区域
5. 停留5秒以上
6. 观察告警解除
**预期日志**:
```
[DEBUG] ROI xxx: IDLE → CONFIRMING_INTRUSION
[WARNING] ROI xxx: CONFIRMING_INTRUSION → ALARMED (告警触发)
告警已生成: type=intrusion, ...
[DEBUG] ROI xxx: ALARMED → CONFIRMING_CLEAR
[INFO] ROI xxx: 告警已解决(入侵消失)
[DEBUG] ROI xxx: CONFIRMING_CLEAR → IDLE (消失确认成功)
```
**预期告警事件**:
```json
// 入侵告警
{
"alert_type": "intrusion",
"roi_id": "xxx",
"camera_id": "xxx",
"alarm_level": 3,
"message": "检测到周界入侵",
"first_frame_time": "2026-02-14 10:00:00"
}
// 解除告警
{
"alert_type": "alarm_resolve",
"resolve_alarm_id": "上面的alarm_id",
"duration_ms": 5000, // 实际入侵持续时长
"last_frame_time": "2026-02-14 10:00:05",
"resolve_type": "intrusion_cleared"
}
```
### 测试场景2: 冷却期验证
**操作步骤**:
1. 触发第一次告警(入侵5秒)
2. 立即再次入侵(不等待消失确认)
3. 观察是否触发新告警
**预期结果**:
- 300秒内不生成新告警
- 日志显示: "CONFIRMING_INTRUSION → IDLE (冷却期内)"
### 测试场景3: 边界条件
**3.1 入侵确认中途消失**
- 入侵2秒后离开
- 预期: 不触发告警状态回到IDLE
- 日志: "CONFIRMING_INTRUSION → IDLE (人消失)"
**3.2 消失确认中途返回**
- 消失2秒后返回ROI
- 预期: 不发送resolve状态回到ALARMED
- 日志: "CONFIRMING_CLEAR → ALARMED (人又出现)"
---
## 参数调整测试
### 修改confirm_seconds
**Frontend操作**:
1. 打开ROI配置
2. 编辑intrusion算法参数
3. 设置 confirm_seconds = 3
4. 保存并推送
**测试验证**:
- 入侵3秒即触发告警
- 消失3秒即发送resolve
### 修改cooldown_seconds
**Frontend操作**:
1. 设置 cooldown_seconds = 60
2. 保存并推送
**测试验证**:
- 60秒内不重复告警
---
## 日志关键字搜索
### 查看状态转换
```bash
grep "IDLE\|CONFIRMING_INTRUSION\|ALARMED\|CONFIRMING_CLEAR" logs/edge.log
```
### 查看告警事件
```bash
grep "告警已生成.*intrusion" logs/edge.log
grep "告警已解决.*入侵消失" logs/edge.log
```
### 查看alarm_id回填
```bash
grep "set_last_alarm_id" logs/edge.log
```
---
## Backend验证
### 查看告警记录
**SQL查询**:
```sql
-- 查看intrusion告警
SELECT * FROM ai_alarm
WHERE alarm_type = 'intrusion'
ORDER BY create_time DESC
LIMIT 10;
-- 查看告警状态变化
SELECT alarm_id, status, duration, resolve_type
FROM ai_alarm
WHERE alarm_type = 'intrusion'
AND status = 'RESOLVED';
```
### 管理界面验证
1. 登录Backend管理系统
2. 进入告警列表
3. 查看intrusion类型告警
4. 验证:
- 告警状态: PENDING → RESOLVED
- duration字段有值
- resolve_type = "intrusion_cleared"
---
## 性能监控
### 查看处理性能
```bash
# 查看每帧处理时间
grep "Frame processing time" logs/edge.log | tail -20
# 查看告警生成频率
grep "告警已生成.*intrusion" logs/edge.log | wc -l
```
### 监控内存使用
```bash
# Linux/Mac
ps aux | grep python | grep main.py
# Windows PowerShell
Get-Process python | Where-Object {$_.Path -like "*main.py*"}
```
---
## 故障排查
### 问题1: 告警不触发
**检查**:
1. ROI配置是否正确
2. confirm_seconds参数是否过大
3. 人员是否在ROI内停留足够时间
4. 检测模型是否正常运行
**日志检查**:
```bash
grep "ROI.*has_person" logs/edge.log
```
### 问题2: 告警不解除
**检查**:
1. _last_alarm_id是否被正确回填
2. 人员是否完全离开ROI
3. confirm_seconds参数设置
4. 查看状态转换日志
**日志检查**:
```bash
grep "ALARMED\|CONFIRMING_CLEAR" logs/edge.log
grep "set_last_alarm_id" logs/edge.log
```
### 问题3: 重复告警
**检查**:
1. cooldown_seconds设置
2. alert_cooldowns字典是否正常
3. camera_id + roi_id唯一性
**日志检查**:
```bash
grep "冷却期" logs/edge.log
```
---
## 测试数据记录模板
### 测试记录表
| 测试时间 | 测试场景 | 操作 | 预期结果 | 实际结果 | 状态 | 备注 |
|----------|----------|------|----------|----------|------|------|
| 2026-02-14 10:00 | 基本流程 | 入侵5秒 | 触发告警 | | | |
| 2026-02-14 10:01 | 基本流程 | 离开5秒 | 发送resolve | | | |
| 2026-02-14 10:05 | 冷却期 | 300秒内重复 | 不触发告警 | | | |
| 2026-02-14 10:15 | 边界条件 | 入侵2秒离开 | 不触发告警 | | | |
| 2026-02-14 10:20 | 边界条件 | 消失2秒返回 | 不发送resolve | | | |
### 性能数据记录
| 测试时间 | 帧处理时间(ms) | CPU占用(%) | 内存占用(MB) | 告警数量 | 备注 |
|----------|---------------|-----------|-------------|---------|------|
| | | | | | |
| | | | | | |
| | | | | | |
---
## 快速命令参考
### Edge端
```bash
# 启动服务
python main.py
# 查看日志
tail -f logs/edge.log
# 搜索intrusion相关日志
grep intrusion logs/edge.log
# 搜索alarm_resolve
grep alarm_resolve logs/edge.log
```
### Backend端
```bash
# 查看最新告警
tail -f logs/application.log | grep intrusion
# 重启服务
./restart.sh
```
### Frontend端
```bash
# 启动开发服务器
npm run dev
# 清除缓存
npm run clean
```
---
## 验收标准
### 功能完整性
- [x] 入侵5秒触发告警
- [x] 消失5秒发送resolve
- [x] alarm_id正确回填
- [x] duration计算正确
- [x] 冷却期300秒生效
- [x] 状态机正确转换
### 代码质量
- [x] 状态机逻辑清晰
- [x] 日志记录完整
- [x] 防御性编程充分
- [x] 参数配置灵活
### 用户体验
- [x] 参数标签易懂
- [x] 参数说明详细
- [x] UI操作友好
- [x] 告警信息完整
---
## 联系方式
**问题反馈**:
- 提交Issue到项目仓库
- 或联系开发团队
**文档位置**:
- 测试报告: `docs/intrusion_auto_resolve_test_report.md`
- 测试清单: `docs/intrusion_test_checklist.md`
- 快速指南: `docs/intrusion_test_quick_guide.md` (本文档)