当前位置: 首页 > news >正文

Pelco KBD300A 模拟器:18. 按依赖顺序 + 复杂度由低到高逐步推进pytest单元测试

第 18 篇:按依赖顺序 + 复杂度由低到高逐步推进pytest单元测试**

我们采用“依赖顺序 + 复杂度由低到高”的策略组织单元测试,确保底层模块先通过测试,上层模块再依赖可靠的基础。测试优先覆盖纯函数、无外部依赖的模块,再逐步扩展到涉及线程、信号、文件 I/O、模拟器等复杂模块。

测试模块顺序(依赖与复杂度递增)

  1. core/protocol/pelco_protocol.py—— 最基础纯函数,无外部依赖
  2. core/macro/standard.py—— CommandValidator、范围校验
  3. core/alarm/rules.py—— load/save/execute
  4. core/macro/parser.py—— lexer/parser
  5. core/template/renderer.py—— 模板渲染
  6. core/utils/log_emitter.py—— 信号、缓冲区
  7. core/macro/commands.py—— 命令执行核心
  8. core/macro/engine.py—— 宏执行引擎
  9. core/serial/protocol.py—— 帧提取与解析
  10. core/serial/manager.py + worker.py—— 串口管理与线程
  11. core/template/library.py—— 模板文件管理
  12. core/simulator/virtual_device.py—— 模拟器状态机

18.1 core/protocol/pelco_protocol.py 单元测试

测试文件tests/unit/test_pelco_protocol.py
覆盖要点

  • build_pelco_d / build_pelco_p(不同参数组合)
  • parse_pelco_packet(D/P 协议自动识别、PTZ、预置位、AUX、校验和错误、未知命令)
  • 9 字节变体兼容性(若启用)
  • 边界值与非法帧处理

运行命令

pytest tests/unit/test_pelco_protocol.py -v --tb=short

预期:所有测试用例通过,显示具体参数化测试名称及 PASS。

18.2 core/macro/standard.py 单元测试

测试文件tests/unit/test_standard.py
覆盖要点

  • 常量、枚举完整性
  • COMMAND_SPECS 结构校验
  • validate_command:正常、未知命令、参数数量/类型/范围错误(E001~E004)
  • 可选参数处理(cam_id 默认值)
  • 静态方法:get_command_spec、list_all_commands、get_commands_by_category
  • 边界值(speed ±100、preset 1~255、aux 1~8)

运行命令

pytest tests/unit/test_standard.py -v --tb=short

预期:约 20+ 个测试全部通过。

18.3 core/alarm/rules.py 单元测试

测试文件tests/unit/test_alarm_rules.py
覆盖要点

  • load_alarm_rules / save_alarm_rules(文件读写、空文件、异常处理)
  • execute_alarm_action(不同 action 类型:run_macro、load_template、notify、ack 等)
  • 规则过滤(enabled、alarm_code 匹配)
  • 最后触发时间更新

运行命令

pytest tests/unit/test_alarm_rules.py -v --tb=short

预期:全部通过(含 mock 文件 I/O 和动作执行)。

18.4 core/macro/parser.py 单元测试

测试文件tests/unit/test_parser.py
覆盖要点

  • Lexer:token 识别(数字、ID、字符串、注释、符号)
  • Parser:简单命令、字符串、变量、loop、for、if/else、嵌套结构
  • 语法错误恢复(不崩溃,返回部分 AST)
  • 位置信息(line/column)准确性

运行命令

pytest tests/unit/test_parser.py -v --tb=short

18.5 core/template/renderer.py 单元测试

测试文件tests/unit/test_renderer.py
覆盖要点

  • {{{name}}} → 原始值替换
  • {{name}} → 类型转换(int/float → 数字字符串、bool → “true”/“false”、str → 加引号)
  • 缺少参数 → ValueError + 日志
  • 空参数字典 → 返回原始脚本

运行命令

pytest tests/unit/test_renderer.py -v --tb=short

18.6 core/utils/log_emitter.py 单元测试

测试文件tests/unit/test_log_emitter.py
覆盖要点

  • 单例模式(get_log_emitter 返回同一实例)
  • 各日志方法(info、warning、error、send、receive、simulator、alarm)信号发射
  • 缓冲区机制(use_buffer=True 时进入缓冲,flush 后触发 logs_batch)
  • error 触发 error_occurred 信号
  • 非法日志类型自动转为 info

运行命令

pytest tests/unit/test_log_emitter.py -v --tb=short

18.7 core/macro/commands.py 单元测试

测试文件tests/unit/test_commands.py
覆盖要点

  • 各 cmd_xxx 方法(ptz_control、zoom、focus、iris、preset、aux、pattern 等)
  • 参数验证(CommandValidator)
  • 默认 cam_id 处理
  • 执行日志记录
  • 异常情况(未知命令、无效参数)

运行命令

pytest tests/unit/test_commands.py -v --cov=core/macro/commands --cov-report=term-missing

18.8 core/macro/engine.py 单元测试

测试文件tests/unit/test_macro_engine.py
覆盖要点

  • 生命周期(init、set_script、run、stop、pause/resume)
  • AST 执行(命令、loop、for、if)
  • 信号(started、stopped、error、progress、command_executed)
  • 进度计算、检查点、缓存
  • 异常安全与日志

运行命令

pytest tests/unit/test_macro_engine.py -v --tb=short

18.9 core/serial/protocol.py 单元测试

测试文件tests/unit/test_serial_protocol.py
覆盖要点

  • detect_protocol(D/P/未知)
  • extract_frame(完整帧、不完整、校验失败)
  • parse_frame(PTZ、zoom、preset、query、错误帧、Pelco-P 未知命令)
  • 校验和验证

运行命令

pytest tests/unit/test_serial_protocol.py -v --tb=short

18.10 core/serial/manager.py + worker.py 单元测试

测试文件tests/unit/test_serial_manager_worker.py
覆盖要点

  • open/close/write/is_open
  • 信号转发(opened、closed、error、data_received、parsed_received)
  • 默认 cam_id 同步到控制方法

运行命令

pytest tests/unit/test_serial_manager_worker.py -v --tb=short

18.11 core/template/library.py 单元测试

测试文件tests/unit/test_template_library.py
覆盖要点

  • load/save(JSON 读写、异常处理)
  • find(存在/不存在)
  • _validate_template(合法/非法结构)
  • _create_default_templates
  • 缓存机制(首次加载后复用)

运行命令

pytest tests/unit/test_template_library.py -v --tb=short

18.12 core/simulator/virtual_device.py 单元测试

测试文件tests/unit/test_virtual_device.py
覆盖要点

  • process_command(ACK、查询响应、错误响应)
  • update_from_command(PTZ、zoom、focus、iris、aux)
  • generate_response(各查询类型)
  • 状态范围限制(pan/tilt/zoom)

运行命令

pytest tests/unit/test_virtual_device.py -v --tb=short

测试执行建议

  • 按顺序运行上述测试文件,确保底层模块先通过。
  • 使用--cov生成覆盖率报告,关注未覆盖分支。
  • 所有测试均使用 mock 避免真实串口/文件依赖,保证快速稳定。
  • 通过后可继续集成测试(serial + protocol + macro)。

下一阶段:完成以上单元测试后,我们进入集成测试阶段。

👉上一篇 :按照pytest自动化测试方案规划建立测试基础框架
👉总目录:Python开发软键盘全程总览
👉下一篇

http://www.jsqmd.com/news/317171/

相关文章:

  • 塑料原料回收新选择:2026年实力厂家盘点,正规的塑料原料回收实力厂家深度剖析助力明智之选
  • 【右值引用完美转发】右值引用与完美转发的“天罡北斗阵” - 指南
  • 学霸同款10个AI论文软件,专科生搞定毕业论文!
  • 导师推荐!专科生必备8款AI论文软件测评与推荐
  • Flutter艺术探索-EventChannel使用:原生事件流与Flutter交互
  • 美国静态 IP 哪个城市更稳定?华盛顿 vs 洛杉矶
  • cf div2 914 E
  • 聊聊高压均质机制造厂哪家好?哪家产品性价比高?
  • 常州阿科牧机械价格多少,节能效果与性价比深度剖析
  • 郑州留学中介前十,申请成功率高?选择最佳指南
  • 2026抖音代运营优选指南,源头厂家值得信赖,小红书代运营/短视频代运营/企业号代运营,抖音代运营品牌口碑推荐
  • 2026靠谱应急调度系统推荐 多场景品牌解析
  • 2026年有机肥设备大比拼:口碑与实力并存,中药材粉碎机/环保粉土机/新型粉土机/有机肥发酵罐设备,有机肥设备公司找哪家
  • 天猫超市卡四大回收平台对比
  • 智能建站平台如何实现自动SEO?外贸网站提升自然流量的关键技术
  • 2026年浙江热门清洁胶带品牌排名,东辉清洁胶带粘性、耐用性和可信度揭秘
  • 企业级农商对接系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • 2026年专业的包装设计公司排名,全速网络优势明显
  • 电脑录屏神器!无广告免安装超好用
  • 2026年烯牛实业口碑排名,客户评价是否能让人满意呢
  • 解读推荐全套不锈钢酿酒设备的品牌及费用问题
  • 图片处理神器!一键漂白去底超好用
  • 图片分割神器!免费开源支持多种分割方式
  • SQL语言分类思维脑图
  • 常州阿科牧机械规模怎么样,工业温控设备实力揭秘
  • 计算机毕业设计springboot牙科诊所预约管理系统 基于SpringBoot的口腔门诊在线预约服务平台 基于SpringBoot的齿科诊疗预约与病历档案管理系统
  • 保障高危作业安全:精选值得信赖的工业防爆气象站生产厂家
  • 2026国内最新虾青素厂家top5推荐!优质天然虾青素品牌权威榜单发布,科学抗衰优选品
  • 2025年度盘点:汉口地区黄沙供应商实力排行,排行前列的黄沙厂商排行榜甄选实力品牌
  • 2025口碑之选!模块电源源头定制厂家榜单,新能源车载逆变电源/车载电源/军用电源,模块电源源头定制哪个好