3. 自动化测试框架选型与架构设计

在RA/RX系列MCU的自动化测试工程中,框架选型决定了后续所有测试用例的开发方式、执行效率和维护成本。本节围绕三种主流模式——PC端脚本驱动、片上测试固件、CI流水线——展开对比,并给出基于Python/C#/LabVIEW的测试主机与目标板通信架构设计,最后定义测试用例、测试套件与报告格式。

三种测试模式的本质差异

PC端脚本驱动是最直观的模式:测试主机通过调试探针(如J-Link、E2 Lite)或串口与目标板通信,脚本负责下载固件、读写寄存器、采集结果。它的优势在于开发灵活、调试方便,适合功能验证阶段的快速迭代。但缺点是每次测试都依赖主机在线,无法脱离PC独立运行,且通信延迟会拉长测试周期。

片上测试固件则把测试逻辑烧录进MCU内部,目标板自主执行测试序列,仅将最终结果或关键日志通过串口/CAN上报。这种模式适合产线批量测试和长时间老化测试,因为不依赖主机实时干预,单板测试时间可压缩到毫秒级。代价是固件需要针对不同测试项重新编译,灵活性不如脚本驱动。

CI流水线不是替代前两者,而是把它们编排进持续集成环境。每次代码提交后,CI服务器自动触发构建、烧录、执行测试套件、生成报告,并依据通过率决定是否合并。它解决的是“测试何时跑、谁来跑、结果如何追溯”的问题,而非底层通信方式。

三种模式并非互斥:典型工程中,PC端脚本用于研发阶段的功能调试,片上固件用于产线量产测试,CI流水线则把两者串联为自动化回归体系。

测试主机与目标板通信架构

无论选择哪种模式,测试主机与目标板之间的通信链路都是架构核心。RA/RX系列常见接口包括SWD/JTAG调试接口、SCI串口、CAN/CAN-FD、I2C/SPI等。测试主机侧的语言选型直接影响开发效率和生态兼容性。

Python方案适合快速原型和CI集成。通过pyserial操作串口,pylink或pyocd控制调试探针,配合pytest组织测试用例。示例:使用pyocd连接RA6M5目标板,读取寄存器并断言其值。

import pyocd
from pyocd.core.helpers import ConnectHelper

session = ConnectHelper.session_with_chosen_probe(target_override="ra6m5")
session.open()
target = session.target
# 读取系统时钟寄存器
val = target.read32(0x4001E000)
assert (val & 0x0F) == 0x03, f"时钟源配置错误: {val:#x}"
session.close()

C#方案适合Windows桌面工具和产线工装。借助System.IO.Ports处理串口,JLink.NET或OpenOCD绑定调试器,配合NUnit或MSTest管理测试。C#的强类型和Visual Studio调试体验在复杂工装中优势明显。

LabVIEW方案适合硬件在环(HIL)测试和信号采集场景。通过VISA接口控制串口/GPIB,配合DAQmx采集模拟量,图形化编程降低了硬件工程师的上手门槛。但版本管理和CI集成相对薄弱,通常用于专项测试台架。

测试主机与目标板通信架构(三模式对比) PC端脚本驱动 Python / C# / LabVIEW 脚本 调试探针驱动 (J-Link/E2) 串口 / CAN / I2C 通信库 SWD/SCI RA/RX 目标板 片上测试固件 外设寄存器 / 时钟 ADC / PWM / 通信接口 结果上报 CI 流水线 代码提交触发构建 自动烧录 + 执行套件 生成报告 / 门禁判定 测试用例 → 测试套件 → 报告 数据流 测试用例 (Test Case) • ID: TC_CLK_001 • 前置条件: 复位释放 • 操作: 读 0x4001E000 • 期望: bit[3:0]=0x03 测试套件 (Test Suite) • Suite: RA6M5_Clock • 包含: TC_CLK_001~008 • 执行顺序: 顺序/并行 • 超时: 单例 5s 报告 (Report) • 格式: JUnit XML / JSON • 字段: 用例ID/状态/耗时 • 失败: 期望值 vs 实际值 • 汇总: 通过率 / 趋势

测试用例、套件与报告格式定义

测试用例是自动化测试的最小执行单元。一个完整的用例应包含:唯一ID、前置条件、操作步骤、期望结果、实际结果、判定状态和耗时。以RA6M5时钟配置为例,用例TC_CLK_001的前置条件是复位释放且系统时钟稳定,操作是读取寄存器0x4001E000的bit[3:0],期望值为0x03(表示PLL作为主时钟源)。

测试套件是一组相关用例的集合,通常按外设或功能模块划分,如RA6M5_Clock套件包含8个时钟相关用例。套件需要定义执行顺序(顺序或并行)、超时阈值和失败处理策略(继续执行或立即中止)。

报告格式推荐采用JUnit XML,因为它被Jenkins、GitLab CI等主流CI工具原生支持。每个用例对应一个<testcase>节点,失败时附加<failure>节点记录期望值与实际值。同时可输出JSON格式供自定义看板消费。报告应包含:用例ID、状态(通过/失败/跳过)、耗时、失败原因、以及套件级别的通过率汇总。

在CI流水线中,建议将报告中的失败用例自动关联到代码提交记录,便于快速定位引入缺陷的变更。RA/RX项目通常还会在报告中附加目标板序列号和固件版本,确保结果可追溯。

选型决策建议

如果团队以研发调试为主、测试项频繁变更,优先选择PC端脚本驱动,Python是性价比最高的选择。如果进入量产阶段、需要高吞吐量测试,应把核心测试逻辑固化为片上固件,主机仅负责下发指令和收集结果。如果项目已具备CI基础设施,则把上述两种模式封装为CI任务,实现提交即测、报告即达。三种模式可以共存于同一工程,关键是明确每种模式负责的测试阶段和覆盖范围。