You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

201 lines
4.9 KiB

# WebSocket第二次连接事件推送修复功能测试说明
## 测试文件说明
### 1. 完整功能测试
**文件:** `tests/test_websocket_second_connection_fix.py`
**功能:** 完整的WebSocket第二次连接事件推送修复功能测试
**测试内容:**
- ✅ 第一次连接时的事件推送
- ✅ 第二次连接时的事件推送(无新事件)
- ✅ 设备状态检查功能
- ✅ 错误处理
- ✅ 性能测试
**运行方式:**
```bash
cd tests
python test_websocket_second_connection_fix.py
```
### 2. 快速测试脚本
**文件:** `tests/run_websocket_second_connection_test.py`
**功能:** 快速运行完整功能测试的脚本
**运行方式:**
```bash
cd tests
python run_websocket_second_connection_test.py
```
### 3. 单元测试
**文件:** `tests/test_websocket_device_status_check.py`
**功能:** 专门测试 `_async_check_current_device_status` 方法的单元测试
**测试内容:**
- ✅ 设备状态检查基本功能
- ✅ 已注册设备跳过逻辑
- ✅ 空设备列表处理
- ✅ 错误处理
**运行方式:**
```bash
cd tests
python test_websocket_device_status_check.py
```
## 测试场景说明
### 场景1:第一次连接事件推送
**目的:** 验证第一次连接时能正常推送历史事件
**测试步骤:**
1. 模拟一些设备事件(在连接之前)
2. 检查事件缓冲队列
3. 模拟WebSocket客户端连接
4. 验证连接成功和事件推送
**预期结果:**
- 连接成功
- 设备状态检查被调用
- 历史事件被推送
### 场景2:第二次连接事件推送(无新事件)
**目的:** 验证第二次连接时能主动检查设备状态并推送数据
**测试步骤:**
1. 模拟缓冲队列被清空(第一次推送后的状态)
2. 模拟第二次WebSocket客户端连接
3. 验证连接成功和主动设备状态检查
**预期结果:**
- 连接成功
- 设备状态检查被调用
- 为在线设备生成连接事件
### 场景3:设备状态检查功能
**目的:** 验证设备状态检查方法的正确性
**测试步骤:**
1. 模拟不同状态的设备列表
2. 调用设备状态检查方法
3. 验证只处理自动发现的在线设备
**预期结果:**
- 只处理自动发现的在线设备
- 跳过已注册设备
- 跳过离线设备
### 场景4:错误处理
**目的:** 验证异常情况下的错误处理
**测试步骤:**
1. 模拟设备管理器异常
2. 模拟空设备列表
3. 验证异常被正确处理
**预期结果:**
- 异常被正确处理
- 不会影响其他功能
- 有适当的日志记录
### 场景5:性能测试
**目的:** 验证大量设备情况下的性能表现
**测试步骤:**
1. 生成100个设备数据
2. 调用设备状态检查方法
3. 测量执行时间
**预期结果:**
- 执行时间合理
- 只处理在线设备
- 内存使用稳定
## 测试数据说明
### 设备数据结构
```python
{
"device_id": "device_001",
"status": "device", # "device" 表示在线,"offline" 表示离线
"source": "auto_discovered", # "auto_discovered" 或 "registered"
"device_info": {
"model": "Test Device 1",
"manufacturer": "Test Corp"
}
}
```
### 事件数据结构
```python
{
"type": "device_status_update",
"device_id": "device_001",
"status": "device",
"timestamp": "2025-01-27T10:00:00",
"device_info": {
"model": "Test Device 1",
"manufacturer": "Test Corp"
}
}
```
## Mock说明
### 使用的Mock对象
1. **WebSocket客户端管理器**:模拟客户端连接
2. **Channel管理器**:模拟Channel启动
3. **设备管理器**:模拟设备数据获取
4. **事件处理**:模拟事件生成和处理
### Mock策略
- 使用 `unittest.mock.patch` 进行方法Mock
- 使用 `AsyncMock` 处理异步方法
- 设置合理的返回值模拟真实场景
## 测试结果验证
### 成功标准
1. **功能正确性**:所有测试用例通过
2. **性能表现**:执行时间在合理范围内
3. **错误处理**:异常情况被正确处理
4. **日志记录**:有完整的日志输出
### 失败处理
1. **测试失败**:检查Mock设置和测试逻辑
2. **功能异常**:检查修复代码实现
3. **性能问题**:优化设备状态检查逻辑
## 运行建议
### 开发阶段
- 使用单元测试快速验证核心功能
- 使用完整功能测试验证整体流程
### 部署前
- 运行所有测试确保功能正常
- 检查测试日志确认无异常
### 问题排查
- 查看详细日志定位问题
- 使用Mock数据隔离问题
## 注意事项
1. **测试环境**:确保测试环境与生产环境一致
2. **Mock数据**:使用真实的设备数据结构
3. **异步处理**:正确处理异步方法的测试
4. **资源清理**:测试完成后清理资源
5. **日志级别**:使用DEBUG级别查看详细日志
---
**创建时间:** 2025-01-27
**创建人:** AI Assistant
**状态:** 已完成