CAPL 编程 - 第 33 期:测试模块 (Test Module) 入门
目标: 本期开始介绍 CANoe 中用于结构化、自动化测试的核心特性——CAPL 测试模块 (Test Module)。学习如何在 CANoe 中创建、配置测试模块,并编写基本的测试脚本,包括测试用例和执行控制。
1. 测试模块 (Test Module) 概念
- 是什么: Test Module 是 CANoe 提供的一个框架,允许使用 CAPL 语言编写、组织、执行自动化测试用例,并自动生成结构化的测试报告。它将测试逻辑与执行控制和结果评估分离开来。
- 目的: 从通用的 CAPL 编程转向专门面向测试验证的脚本开发,实现自动化测试流程。
2. 创建与配置测试模块
- 创建:
- 在 CANoe 的 "Simulation Setup" (仿真设置) 窗口中,右键点击仿真总线或空白区域。
- 选择 "Insert CAPL Test Module"。
- 配置:
- 右键单击新创建的 Test Module 节点,选择 "Configuration"。
- General (通用) Tab:
- Name: 为测试模块设置一个描述性的名称 (例如: "Demo Test Module")。
- File: 关联一个 CAPL 脚本文件 (
.can)。点击 "Edit" 或 "..." 选择或创建一个新的.can文件。- 推荐: 在项目工程目录下创建专门的子文件夹 (如
Test Modules) 来存放测试脚本文件,保持结构清晰。
- 推荐: 在项目工程目录下创建专门的子文件夹 (如
- Test Report (测试报告) Tab:
- Output file: 配置测试报告的生成路径和文件名。
- 推荐: 在项目工程目录下创建专门的子文件夹 (如
Test Reports) 来存放报告文件,将脚本与报告分离。
- 推荐: 在项目工程目录下创建专门的子文件夹 (如
- 默认生成的文件格式通常是 Vector Test Report Viewer 可以打开的格式。
- Output file: 配置测试报告的生成路径和文件名。
- 文件结构: 建议在 CANoe 工程根目录下创建
Test Modules(存放.can脚本) 和Test Reports(存放报告) 文件夹。
3. 编写测试脚本 (.can 文件)
- CAPL Browser 结构: 当编辑与 Test Module 关联的
.can文件时,CAPL Browser 会显示特定的测试相关节点,如Test Functions,Test Cases,Test Control。 - 核心组件:
- 测试用例函数 (
testcase):- 目的: 定义一个独立的、可执行的测试场景。
- 语法: 使用
testcase关键字代替void或其他返回类型来声明。函数名通常以Test或TC_开头,便于识别。Code snippettestcase MyTestCase01() { // Test logic here... } - 内容: 包含执行测试步骤、调用被测功能、检查结果并记录测试步骤状态的代码。
- 测试步骤断言/记录函数 (
TestStepPass,TestStepFail):- 目的: 在
testcase函数内部,根据检查结果显式地记录某个测试步骤是通过还是失败。 - 常用函数:
TestStepPass(char stepID[], char descriptionFormat[], ...): 记录一个成功的步骤。TestStepFail(char stepID[], char descriptionFormat[], ...): 记录一个失败的步骤。
- 参数:
stepID: 一个字符串,用于标识测试步骤 (例如 "1.1", "Check Init State")。descriptionFormat: 描述性文本,可以包含格式说明符 (如%d,%s),类似于write函数。...: 可变参数,用于填充descriptionFormat中的说明符。
- 作用: 这些函数的调用结果会直接记录在最终的测试报告中,并影响测试用例的整体判定 (Verdict)。
- 目的: 在
- 主测试函数 (
MainTest):- 目的: 作为测试模块执行的入口点,定义测试用例的执行顺序和流程。
- 语法: 必须命名为
MainTest,返回类型为void,通常无参数。位于 CAPL Browser 的Test Control节点下。Code snippetvoid MainTest() { // Call test cases in desired order MyTestCase01(); MyTestCase02(); } - 实现: 在函数体内按顺序调用需要执行的
testcase函数。
- 测试用例函数 (
- 其他元素: 仍然可以在测试脚本中使用
includes,variables以及定义普通的辅助functions(例如,被测函数本身或用于测试逻辑的帮助函数)。
4. 执行测试与查看报告
- 执行:
- 启动 CANoe 测量 (点击工具栏的“Start”按钮)。
- 打开 Test Module 执行面板:双击 Simulation Setup 中的 Test Module 节点,或右键点击选择 "Execution",或通过 "Test" 菜单访问。
- 在 Test Module 执行面板中,点击 "Run" (▶) 按钮。
- 流程: CANoe 会执行关联
.can文件中的MainTest函数,进而按顺序执行MainTest中调用的testcase函数。
- Test Module 执行面板: 实时显示正在执行/已执行的测试用例列表、每条用例的最终判定结果 (Verdict - 通常是 Pass/Fail 图标) 以及执行耗时。
- 测试报告:
- 生成: 测试执行完毕后自动生成。
- 查看: 在 Test Module 执行面板中点击 "Open Test Report" 按钮,或直接打开配置文件中指定的报告文件。报告通常使用 "Vector CANoe Test Report Viewer" 查看。
- 内容: 包含测试概览(通过/失败数量、总用例数、执行时间等)和详细信息(每个测试模块、测试用例及测试步骤的执行结果、由
TestStepPass/Fail记录的描述信息)。
5. 实例总结 (来自讲座)
- 讲座中演示了测试一个简单的
add函数。 - 创建了
TestAdd01(测试 3+5=8,预期通过) 和TestAdd02(测试 3.2+5.4=8.6,但因函数返回long导致截断,预期失败)。 - 在
MainTest中调用了这两个testcase。 - 执行后,在 Test Module 面板看到一条 Pass,一条 Fail。
- 在 Test Report Viewer 中查看详细报告,确认了每条用例及步骤的结果和描述信息,验证了
TestStepPass/Fail的作用。
总结: 本期介绍了 CANoe Test Module 的基本概念和使用流程:创建模块、配置脚本和报告路径、编写包含 testcase (使用 TestStepPass/Fail 记录结果) 和 MainTest (控制执行流程) 的 CAPL 脚本、执行测试并查看结果面板和详细报告。这是使用 CAPL 进行自动化测试的基础。