CPAL脚本自动化测试 ———— Test Report系列函数及使用

本文详细介绍了如何使用TestReport系列函数在自动化测试过程中添加和展示各种信息,包括测试员信息、测试配置、待测样品详情、扩展信息、外部引用、图片、额外信息区块、诊断对象和响应等内容,旨在提升测试报告的完整性和分析效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在完成了测试用例的设计之后,最终的测试用例执行结果将会以Test Report形式展示。可能测试步骤中并没有包含我们所需要的信息,那这个时候test report系列函数将帮助我们完成这个功能。

  1. TestReportAddEngineerInfo/TestReportAddSetupInfo/TestReportAddSUTInfo 函数
    使用格式如下。主要用于在测试报告中添加一些信息(测试员、测试配置、待测样品)。
    在这里插入图片描述
    用例:
	// add information to SUT information table 
TestReportAddSUTInfo("Serial No.", "A012345BC");
TestReportAddSUTInfo("Manufactured", "2003-10-02");
	// add information to test engineer information table 
TestReportAddEngineerInfo("Test Engineer", "S. Grey");
TestReportAddEngineerInfo("Stuff No.", "12345");
	// add information to test setup information table 
TestReportAddSetupInfo("Tester", "TH12");
  1. TestReportAddExtendedInfo 函数
    使用格式如下。主要用于将信息添加CANoe本身不支持的协议,常见的有HTML、txt、其他文本(将在XML报告中体现,不会再HTML报告中体现)
    在这里插入图片描述
    用例:
	// add html line to report, e.g. a link to the homepage 
TestReportAddExtendedInfo("html", "<A HREF=\"http://www.vector.com\">Homepage</A>");

TestReportAddExtendedInfo("text", "Output voltage = %d volts)", voltage);
  1. TestReportAddExternalRef 函数
    使用格式如下。主要用于在测试报告中添加外部应用。向报告添加外部引用(URL,DOORS(IBM公司的一个需求管理系统)、eASEE链接),该引用在测试报告中显示为链接。
    在这里插入图片描述
    用例:
testcase tc_1_1()
{
   TestCaseTitle("tc_1_1", "Test Case 1.1");
TestReportAddExternalRef("url", "Requirement", "doors://doorssrv:36677/?version=1,prodID=0,dbid=42d2481361dc551c,container=00004600,object=19");
}
  1. TestReportAddImage 函数
    使用格式如下。主要是用于添加图片。在XML或HTML格式的报告中,对于图片的格式也是存在着一定的要求的,这里仅支持JPEG,GIF 和 PNG这三种格式。
    在这里插入图片描述
    用例:
	// add image to report, scale down to reasonable size 
TestReportAddImage("Oscilloscope Snapshot", "osc_01.png", "400px", "");
  1. TestReportAddMiscInfoBlock 函数
    使用格式如下。主要用于生成一个新的信息区域来记录一些额外的信息。具体的信息需要使用到TestReportAddMiscInfo函数来写入。重新启用TestReportAddMiscInfoBlock 函数、用例执行结束或者调用了新用例聚会导致一个信息块的终止。
    在这里插入图片描述
    用例:
// add info block to test case in report 
TestReportAddMiscInfoBlock("Used Test Parameters");
TestReportAddMiscInfo("Max. voltage", "19.5 V");
TestReportAddMiscInfo("Max. current", "560 mA");
  1. TestReportAddMiscInfo 函数
    使用格式如下。主要用于在测试报告中添加一些信息。在使用该函数之前必须先使用TestReportAddMiscInfoBlock创建附加信息区域。 如果使用此功能但没有相应的信息区域,则将在“Write”窗口中生成警告,并自动创建一个新的信息区域。 在此信息区域中,可以使用此功能写入任意数量的信息对。
    在这里插入图片描述
    用例:
// add info block to test case in report 
TestReportAddMiscInfoBlock("Used Test Parameters");
TestReportAddMiscInfo("Max. voltage", "19.5 V");
TestReportAddMiscInfo("Max. current", "560 mA");
  1. TestReportAddWindowCapture 函数
    使用格式如下。主要用于抓取某些窗口或面板(Panel)的图片。例如在自动泊车的过程中会有视频输出,我们可以每隔一段时间进行截取,从而记录整个过程中的状态变化。这里的窗口是CANoe工程里面自带的一个窗口,不支持外部设备。例如,可以使用该函数来截取CANoe工程中的Vedio窗口,但是不能截取电脑的Camera窗口。
    在这里插入图片描述
    用例:
testcase tc_1_1()
{
   TestCaseTitle("tc_1_1", "Test Case 1.1");
   TestReportAddWindowCapture("Trace - Report", "", 
                              "Trace before execution of test case:", 
                              "tc-1.1-trace-before");

      ... execute Test Pattern(s) ...

      if (TestGetVerdictLastTestCase() != 0) {
          TestReportAddWindowCapture("Trace - Report", "", 
                                     "Testfall failed. Trace am Ende:",
                                     "tc-1.1-trace-after");
   }
}
  1. TestReportWriteDiagObject/TestReportWriteDiagResponse 函数
    使用格式如下。主要是将获取到的诊断对象、诊断响应以HTML格式写入到测试报告中。这对于后续的分析还是存在着较大的便利。例如,如果回访log则需要花费太多的时间并且占用设备,如果能在报告中直接获取到响应内容则方便了许多。
    在这里插入图片描述
    用例:
TestCase Test1()
{
   // Send Request and react to all possible cases.
   diagRequest Door.EcuIdentification_Read idReq;
   diagSendRequest( idReq);
   switch( TestWaitForDiagResponse( idReq, 200))
   {
   case 0: // Timeout: The ECU did not respond within 200 ms.
      write("No answer from ECU!");
      TestStepFail("Read ID", "No answer from ECU!");
      break;
   case 1: // response received
      TestReportWriteDiagResponse(idReq); // write response to report
      if( diagGetLastResponseCode(idReq) == -1)
      {
      // A positive response was received
      write("ECU Diagnostics Identification: %d", (long)diagGetRespParameter(idReq,"Diagnostic_Identification"));
      TestStepPass("Read ID", "Positiv response received!");
      }
      else // A negative response was received
      {
      write( "ECU Diagnostics Identification failed: 0x%x", diagGetLastResponseCode( idReq));
      TestStepFail("Read ID", "Negative response received");
      }
      break;
      default: // internal or setup error
      TestStepFail("Read ID", "Error in TestCase! Verdict unreliable.");
      }
}

<think>好的,我现在需要帮助用户了解或学习CAPL编程的教程和资源。首先,我要回忆一下CAPL是什么。CAPL全称是CAN Access Programming Language,主要用于汽车电子领域的CANoe和CANalyzer工具中,用于开发测试和诊断用例。用户可能是在汽车行业工作,或者对汽车网络通讯感兴趣,想要学习这方面的编程。 接下来,我需要根据用户提供的引用资料来整理可用的资源。用户给出了四个引用,其中引用1提到CAPL编程教学实战的优快云博客,引用2和3提供了两个GitCode仓库的地址,分别是关于CAPL编程和其他英文资料,以及CAPL语言资料下载。引用4提到CANoe的Demo工程是学习的好资源。 首先,我应该分步骤回答用户的问题,结构要清晰。可能需要包括以下几个部分:入门基础、核心功能、学习资源、实战建议以及常见问题。每个部分下需要列出具体的内容和对应的资源链接,即引用中的项目地址。 然后,要确保生成的相关问题符合用户需求,可能涉及学习方法、资源推荐、调试技巧、应用场景和与其他语言对比等方面。这些问题应该能帮助用户进一步深入学习。 需要注意用户提到的系统级指令,特别是关于LaTeX格式的要求。不过在这个回答中,可能用到的数学公式较少,但如果有的话,比如示例代码中的算法解释,可能需要用行内公式。不过根据用户的问题和引用内容,可能不需要太多数学公式,但还是要检查是否有需要的地方,并正确使用$...$或$$...$$格式。 另外,要确保回答使用中文,并且引用标识自然添加在引用段落末尾。比如在提到某个资源时,末尾加上[^1]、[^2]等。 现在开始整理: 1. 入门基础:可能需要介绍CAPL的基本语法、开发环境(CANoe/CANalyzer)、如何创建工程、事件处理程序等。引用4提到Demo工程的重要性,可以推荐用户从Demo开始学习。 2. 核心功能:报文发送与接收、定时器、系统变量、诊断测试。引用1中的示例可能涉及报文发送,可以结合说明。 3. 学习资源:引用1的优快云博客、引用2和3的GitCode仓库,引用4的Demo工程。需要将这些资源分门别类,并给出链接。 4. 实战建议:推荐用户实际动手操作,如修改Demo工程,参考引用中的项目源码进行练习。 5. 常见问题:如环境搭建问题,可以指向引用1的优快云博客,或者引用3的CAPL语言资料仓库。 生成的相关问题可能需要包括如何搭建环境、如何发送自定义报文、调试技巧、实际应用案例、与其他语言的区别等。这些都能帮助用户进一步探索。 检查是否有遗漏的引用,确保每个引用都正确对应到内容中。例如,引用2和3都是GitCode的仓库,一个是全英资料,一个是CAPL语言资料,需要明确区分。 最后,确保回答结构清晰,分点明确,资源链接正确,引用标识正确放置,并且语言流畅自然,符合用户的要求。</think>### CAPL编程教程与资源整理 #### 一、CAPL编程基础 1. **开发环境搭建** CAPL需在Vector公司的CANoe或CANalyzer工具中使用。建议从官方提供的**Demo工程**入手,快速理解工程结构、报文配置和脚本逻辑[^4]。 ```示例代码 on message 0x100 { // 当收到ID为0x100的报文时触发 write("Received message 0x100: %x", this.byte(0)); } ``` 2. **语法核心要点** - **事件驱动编程**:通过`on`关键字定义事件(如报文接收、定时器触发)。 - **数据类型**:支持`int`, `float`, `byte`等,以及自定义结构体。 - **报文操作**:使用`message`对象发送或解析CAN报文。 #### 二、核心功能实现 1. **报文发送与接收** - **发送自定义报文**:通过`output()`函数或`message`对象直接发送,支持周期或事件触发。 - **接收过滤**:可通过`on message`事件监听特定ID的报文。 2. **定时器与诊断功能** ```capl variables { timer t1; } on start { setTimer(t1, 100); // 启动100ms周期定时器 } on timer t1 { // 定时任务逻辑 } ``` #### 三、学习资源推荐 1. **中文教程与实战案例** - **优快云博客教程**:包含报文选择发送、诊断测试等实战代码示例。 - **GitCode项目源码**:提供完整的CAPL工程文件,可直接下载并运行调试[^2][^3]。 2. **英文资料与进阶内容** - **全英资料仓库**:覆盖CAPL语言规范、高级功能(如加密通信、自动化测试)。 - **官方文档**:CANoe安装包中的帮助文档(搜索`CAPL Function Reference`)。 3. **Demo工程学习路径** 通过修改CANoe自带的Demo工程(如`CANoe Demo\Diagnostics`),理解诊断协议实现逻辑[^4]。 #### 四、实战建议 1. **从简单功能入手**:例如实现周期性发送报文、响应特定事件。 2. **结合硬件测试**:通过CANoe连接真实ECU,验证脚本功能。 3. **调试技巧**:使用`write()`函数输出日志,或利用CANoe的Trace窗口观察报文流。 #### 五、常见问题 - **环境问题**:确保CANoe版本与工程兼容,检查硬件驱动安装。 - **语法错误**:注意变量作用域(`variables`块)、事件命名冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老趴菜_专业汽车行业搬砖人

谢谢大爷赏饭吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值