You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过CAPL将CANoe测试结果直接记录至CSV文件?

可以用CAPL直接导出测试用例结果至CSV,以下是具体实现方案

完全可行,CAPL的文件操作函数支持写入任意格式的文本文件,CSV本质就是逗号分隔的文本,只需按格式组织内容即可实现。


核心实现步骤

  1. 初始化CSV文件
    用openFileWrite()打开目标CSV文件,建议使用绝对路径避免路径歧义,同时处理文件打开失败的异常情况。

  2. 写入CSV表头
    先写入测试结果的字段名(如测试用例ID、名称、结果、执行时长),字段间用逗号分隔,写完后换行。

  3. 捕获测试用例结果
    利用CAPL的测试回调函数on TestCaseEnd(),在每个测试用例执行完成后,通过testCaseGetName()、testCaseGetResult()、testCaseGetDuration()等API获取测试用例的关键信息。

  4. 格式化并写入数据
    将获取到的测试信息按CSV格式拼接成一行,注意处理特殊字符(如字段含逗号时,用双引号包裹字段内容),再写入文件。

  5. 关闭文件
    在测试结束的on stop回调中关闭文件,确保所有数据写入完成。


示例代码

variables
{
  long csvFileHandle;
}

on start
{
  // 创建目标目录(避免路径不存在导致文件打开失败)
  fileCreateDir("C:\\TestResults");
  // 打开CSV文件,第二个参数0表示覆盖已有文件,1表示追加
  csvFileHandle = openFileWrite("C:\\TestResults\\TestCaseResults.csv", 0);
  
  if(csvFileHandle == 0)
  {
    write("无法打开CSV文件,请检查路径权限!");
    return;
  }
  // 写入CSV表头
  fileWriteLine(csvFileHandle, "测试用例ID,测试用例名称,测试结果,执行时长(ms)");
}

on TestCaseEnd
{
  if(csvFileHandle == 0) return;
  
  char testCaseName[256];
  long testCaseResult;
  dword execTimeMs;
  long testCaseId;

  // 获取测试用例核心信息
  testCaseId = testCaseGetId();
  testCaseGetName(testCaseName, elcount(testCaseName));
  testCaseResult = testCaseGetResult();
  execTimeMs = testCaseGetDuration();

  // 转换结果为可读文本
  char resultText[32];
  switch(testCaseResult)
  {
    case 0: strcpy(resultText, "通过"); break;
    case 1: strcpy(resultText, "失败"); break;
    case 2: strcpy(resultText, "不确定"); break;
    default: strcpy(resultText, "未知"); break;
  }

  // 处理含特殊字符的字段(如名称含逗号时用双引号包裹)
  char formattedName[256];
  if(strstr(testCaseName, ",") != 0)
  {
    snprintf(formattedName, elcount(formattedName), "\"%s\"", testCaseName);
  }
  else
  {
    strcpy(formattedName, testCaseName);
  }

  // 拼接CSV行并写入
  char csvLine[512];
  snprintf(csvLine, elcount(csvLine), "%d,%s,%s,%d", testCaseId, formattedName, resultText, execTimeMs);
  fileWriteLine(csvFileHandle, csvLine);
}

on stop
{
  if(csvFileHandle != 0)
  {
    closeFile(csvFileHandle);
    csvFileHandle = 0;
    write("测试结果已成功导出至CSV文件");
  }
}

注意事项

  • 路径权限:确保CANoe有目标目录的写入权限,必要时以管理员身份运行CANoe。
  • 特殊字符处理:如果测试用例名称包含逗号、双引号等,必须按CSV规范转义(如双引号包裹字段,内部双引号替换为两个双引号)。
  • 脚本挂载:将该CAPL脚本关联到测试环境的Test Setup节点中,确保回调函数能被触发。

内容的提问来源于stack exchange,提问作者Bace Gosho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:12:45