CAPL 编程系列第三十一期-第三十四期回顾

第 31 期:字符串处理 (Part 2) - 比较、查找与子串提取

  1. strncmp("TestData", "TestDone", 4) 的返回值是多少?为什么?
  2. 假设有字符串 char info[] = "Status:OK;Result:Pass;",如何找到第一个分号 ; 的索引位置?(写出使用的函数即可)
  3. 要从字符串 char record[] = "Timestamp=12345,Value=67.8" 中提取数值 67.8,已知它在逗号之后,需要先找到逗号的位置,然后使用类似 strncpy 的逻辑提取。请简述提取该数值子串并确保其为有效 C 字符串(包含 \0)的关键步骤。
  4. strstr(source, pattern) 函数的作用是什么?如果 source 是 "CAN Message Received",pattern 是 "Message",函数调用成功会返回什么?如何获取 "Message" 在 source 中的起始索引?
  5. 在第 31 期的例子中,从 "speed is 100km/h,100km/h,104km/h" 提取中间字段 "100km/h" 时,为什么计算其长度使用了 index2 - index1 - 1 的表达式?(index1, index2 分别是第一、二个逗号的索引)
  6. strncmp(s1, s2, n) 函数返回 0 表示什么?返回正数或负数又分别表示什么?
  7. 如果 strchr(logLine, 'E') 返回 NULL (0),这说明了什么情况?
  8. 逻辑推理: 你收到一条格式为 "$CMD,PARAM1,PARAM2*CS" 的指令字符串(CMD, PARAM1, PARAM2, CS 的长度不定,但以逗号和星号分隔)。请概述你需要使用的字符串函数(主要来自第 30 和 31 期)以及逻辑步骤,来分别提取出 CMD, PARAM1, PARAM2 这三个部分。

第 32 期:时间处理函数

  1. timeNow() 函数返回的时间值的单位是什么?它代表的是哪段时间?
  2. timeNowNS() 相对于 timeNow() 在精度(单位)和返回的数据类型上有何不同?
  3. 如何将 timeNowNS() 返回的 double 类型纳秒值转换为以毫秒 (ms) 为单位的浮点数值?写出转换表达式。
  4. getLocalTime(long timeArray[]) 函数的主要作用是什么?时间信息是如何传递给调用者的?
  5. getLocalTime 填充的 long tm[9] 数组中,索引 2 (tm[2]) 和索引 3 (tm[3]) 分别代表时间的哪个部分?
  6. 索引 4 (tm[4]) 代表月份,但其取值范围是什么?如何将其转换为我们日常使用的 1-12 月?
  7. 索引 5 (tm[5]) 代表年份,但其基准是什么?如何得到公元年份(如 2025)?
  8. 逻辑推理: 假设你需要实现一个功能:当某个特定 CAN 报文 (如 MsgA) 收到时,如果距离上次收到 MsgA 的时间间隔超过 500 毫秒,则在 Write 窗口打印一条包含当前年月日和时分秒的时间戳的日志。请描述你需要使用的主要时间函数 (timeNow/timeNowNS, getLocalTime) 以及大致的逻辑判断流程来实现此功能。(提示:你需要一个变量来存储上次收到的时间)

第 33 期:测试模块 (Test Module) 入门

  1. 在 CAPL Test Module 中,定义测试用例函数的关键字是什么?
  2. void MainTest() 函数在测试模块脚本中的核心作用是什么?
  3. 如果一个测试模块脚本中定义了 TestCaseA()TestCaseB() 两个测试用例函数,但 MainTest 函数体为空,执行该测试模块会发生什么?
  4. TestStepPass("Step 1.1", "Init OK") 的作用是什么?调用后会在哪里看到效果?
  5. TestStepFail 函数通常在什么情况下被调用?它和 TestStepPass 在参数上有什么共同点?
  6. 在 CANoe 中,启动和监控 Test Module 执行的主要面板是什么?它通常显示用例的哪些状态信息?
  7. 要成功执行一个 Test Module,CANoe 的测量状态通常需要是什么?
  8. 除了 Test Module 执行面板显示的概览信息(Pass/Fail),在哪里可以查看到更详细的测试步骤结果和描述?
  9. 逻辑推理: 你需要编写一个测试用例 TestCase_CheckVoltage 来检查一个系统变量 SysVar_Voltage 的值。如果电压在 4.8V 到 5.2V 之间,则测试通过;否则测试失败,并需要在报告中记录实际电压值。请简述此 testcase 函数内部需要包含的关键逻辑(获取变量值、IF 判断、调用 TestStepPass/Fail 并传递实际值)。

第 34 期:测试模块 (Test Module) 进阶 - Test Setup 环境

  1. 相比于直接在 Simulation Setup 中插入 Test Module,使用 CANoe 的 Test Setup 环境来管理测试模块有哪些主要优势?
  2. 在 CANoe 菜单栏中,通常通过哪个菜单项可以访问 Test Setup 环境?
  3. 在 Test Setup 环境中,Test Module 通常被放置在哪个层级结构之下?
  4. 当测试模块在 Test Setup 环境中配置好后,测试的执行主要通过哪个界面来启动和控制?
  5. 在 Lecture 34 的例子中,将 add 函数从返回 long 修改为返回 double 并重新运行测试,这个过程展示了自动化测试在什么方面的价值?
  6. 是否仍然可以在 Test Setup 环境中配置测试报告的输出路径和命名规则?
  7. Test Setup 环境是否允许只执行 Test Module 中的某一个或某几个特定的测试用例?(基于环境推测)
  8. 逻辑推理: 你的团队正在开发一个大型项目的自动化测试。项目包含多个独立的 ECU 功能模块(如网关、仪表、娱乐系统)。为了方便管理和分工,你决定使用 Test Setup 环境。请描述你会如何利用 Test Setup 的层级结构(如 Test Environment, Test Module)来组织针对不同 ECU 功能模块的测试脚本和配置。

第 35 期:测试模块 (Test Module) - 用例组织与报告描述

  1. TestGroupBeginTestGroupEnd 函数的主要目的是什么?它们应该在哪个函数 (MainTest 还是 testcase) 中使用?
  2. MainTest 中使用 TestGroupBegin/End 包裹 testcase 调用后,对测试报告的结构(尤其是在 Test Report Viewer 中查看时)有什么影响?
  3. TestModuleTitleTestModuleDescription 函数的作用是什么?它们通常在测试脚本的哪个位置调用?
  4. TestCaseTitleTestCaseDescription 函数的作用是什么?它们应该在测试脚本的哪个位置调用?
  5. 调用 TestCaseTitle("TC_PWR_01", "Verify Power On Sequence") 时,第一个参数 "TC_PWR_01" 有什么特别的作用?它在报告中会如何呈现?
  6. 为什么建议为 Test Module 和 Test Case 添加自定义的标题和描述?
  7. TestGroupBegin 函数需要哪两个字符串作为参数?它们的含义分别是什么?
  8. 逻辑推理: 你需要为一个测试模块生成一份非常清晰的报告。该模块包含两个测试组:“初始化测试” 和 “功能测试”。“初始化测试”组包含 3 个用例,“功能测试”组包含 5 个用例。你希望报告的模块标题是“XXX ECU V1.2 测试报告”,并且每个测试用例都有明确的中文标题和唯一的英文 ID (如 "INIT_01", "FUNC_01" 等)。请描述你需要在 MainTest 和各个 testcase 函数中调用哪些特定的函数(并大致说明参数内容)来实现这个报告效果。