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
201 lines
4.9 KiB
|
3 months ago
|
# 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
|
||
|
|
**状态:** 已完成
|