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.

4.9 KiB

WebSocket第二次连接事件推送修复功能测试说明

测试文件说明

1. 完整功能测试

文件: tests/test_websocket_second_connection_fix.py

功能: 完整的WebSocket第二次连接事件推送修复功能测试

测试内容:

  • 第一次连接时的事件推送
  • 第二次连接时的事件推送(无新事件)
  • 设备状态检查功能
  • 错误处理
  • 性能测试

运行方式:

cd tests
python test_websocket_second_connection_fix.py

2. 快速测试脚本

文件: tests/run_websocket_second_connection_test.py

功能: 快速运行完整功能测试的脚本

运行方式:

cd tests
python run_websocket_second_connection_test.py

3. 单元测试

文件: tests/test_websocket_device_status_check.py

功能: 专门测试 _async_check_current_device_status 方法的单元测试

测试内容:

  • 设备状态检查基本功能
  • 已注册设备跳过逻辑
  • 空设备列表处理
  • 错误处理

运行方式:

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. 测量执行时间

预期结果:

  • 执行时间合理
  • 只处理在线设备
  • 内存使用稳定

测试数据说明

设备数据结构

{
    "device_id": "device_001",
    "status": "device",  # "device" 表示在线,"offline" 表示离线
    "source": "auto_discovered",  # "auto_discovered" 或 "registered"
    "device_info": {
        "model": "Test Device 1",
        "manufacturer": "Test Corp"
    }
}

事件数据结构

{
    "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
状态: 已完成