仿真+测试
- CANoe的自动化测试系统简介
- Canoe TFS常用函数
- 测试判别函数
- 测试架构函数
- 测试报告函数
- 检测函数
 
- 创建自动化测试工程
- 其他常用函数
 
CANoe的自动化测试系统简介
基于CANoe的自动化测试系统架构,根据ECU的测试环境和测试规范,搭建基于CANoe的测试系统,通过开始测试模块(Test Module)或测试单元(Test Unit)、网络控制硬件接口(如VN2600)、外围的硬件在环设备(如TV System)以及数据采集和控制I/O等板卡,实现高效的自动化测试。
Canoe TFS常用函数
测试判别函数
| 函数 | 功能描述 | 
|---|---|
| TestCaseFail | 用于将当前测试用例的判别设为fail | 
| TestGetVerdictLastTestCase | 用于返回上一次测试用例的判别结果 | 
| TestGetVerdictModule | 用于返回测试模块的当前判别结果 | 
| TestSetVerdictModule | 用于设定测试模块的当前判别结果 | 
| TestStepFail | 用于描述当前测试步骤的错误信息 | 
测试架构函数
| 函数 | 功能描述 | 
|---|---|
| TestCaseDescription | 用于将测试用例的描述写入测试报告 | 
| TestCaseSkipped | 用于在测试报告描述中跳过某个测试用例 | 
| TestCaseTitle | 用于设定测试用例的标题 | 
| TestCaseReportMeasuredValue | 用于在测试报告中添加测试参数的测量值 | 
| TestGroupBegin | 用于测试分组的开始 | 
| TestGroupEnd | 用于测试分组的结尾 | 
| TestModuleDescription | 用于在测试报告中描述测试模块 | 
| TestModuleTitle | 用于设定测试模块的标题 | 
| TestStep | 用于报告测试步骤信息,而不对测试结果有任何影响 | 
| TestStepErrorInTestSystem | 用于描述某个测试步骤在测试系统中发生一个错误 | 
| TestStepFail | 用于描述某个测试步骤发生错误 | 
| TestStepInconclusive | 用于描述某个测试步骤测试结果无法判别通过(pass)还是失败(fail) | 
| TestStepPass | 用于描述某个测试步骤测试结果通过(pass),满足期望结果 | 
| TestStepWarning | 用于描述某个测试步骤的警示信息 | 
| TestInfoTable | 用于创建一个新表格,使测试报告显示更加结构化 | 
| TestInfoHeadingBegin | 用于在表格中添加一个表头 | 
| TestInfoHeadingEnd | 用于在表格中添加表头结束 | 
| TestInfoRow | 用于在表格中添加一个行 | 
| TestInfoCell | 用于在表格或者表头行添加单元格内容 | 
测试报告函数
| 函数 | 功能描述 | 
|---|---|
| TestCaseComment | 用于在测试用例中添加一个备注信息 | 
| TestReportAddEngineerInfo | 用于在测试报告中添加一些测试配置信息,如测试员、测试设定和待测样品等 | 
| TestReportAddSetupInfo | 用于在测试报告中添加一些测试配置信息,如测试员、测试设定和待测样品等 | 
| TestReportAddSUTInfo | 用于在测试报告中添加一些测试配置信息,如测试员、测试设定和待测样品等 | 
| TestReportAddExtendedInfo | 用于在测试报告中直接添加其他协议的信息(如HTML、text或XML),而处理不依赖于CANoe | 
| TestReportAddExternalRef | 用于在测试报告中添加外部应用(如URL) | 
| TestReportAddImage | 用于在测试报告中添加图片 | 
| TestReportAddMiscInfo | 用于在测试报告中添加一些额外信息 | 
| TestReportAddMiscInfoBlock | 用于在测试报告中添加一些额外信息区域 | 
| TestReportAddWindowCapture | 用于在测试报告中对某个测试用例抓取指定窗口图片 | 
| TestReportFileName | 用于动态设定测试报告名称 | 
| TestReportWriteDiagObject | 用于将某些指定对象以HTML表格形式写入测试报告 | 
| TestReportWriteDiagResponse | 用于将接收到的诊断响应以一个HTML表格的形式写入测试报告 | 
检测函数
CANoe为用户提供了多种检测函数(CheckDescriptions),主要包括以下几个方面的检测。
- SignalEvaluation〔信号验证〕:包括信号的数值有效性、周期和稳定性等检测。
- MessageEvaluation(报文验证〕:包括报文丢失、周期、数据长度、错误帧等检测。
- TimeEvaluation〔时间验证〕:包括连续帧及超时等检测。
创建自动化测试工程
-  点击Test下面的Test Setup 
  
-  空白位置右击,新建测试环境,并命名。 
  
-  插入CAPL测试模块,并简单配置该模块。 
  
-  双击该测试名称,进入编辑界面,点击下方的小铅笔,可以开始进行测试脚本编写。 
  
-  测试脚本样例 
variables
{
  const kTIMEOUT=5000;//常变量 测试等待时间为5s
}
void MainTest()//void返回值为空 ,测试程序的主入口
{
  testModuleTitle("TestDemo002");//测试模块名称
  testModuleDescription("这是Demo002的测试集");//测试模块描述
  testGroupBegin("测试组","测试组描述");//测试组开始
  checkEngineSpeed();
  testGroupEnd();//测试组结束
}
testcase checkEngineSpeed()
{
  dword checkId;//存放检测函数的返回值
  testCaseTitle("TC-1","TC-1测试引擎转速区间");//测试用例标题
  testCaseDescription("应用报文的功能测试");//测试用例描述
  //判断信号的值所在区间
  checkId=ChkStart_MsgSignalValueRangeViolation(Engine::EngineSpeed,2000,5000);
  testAddCondition(checkId);//添加测试条件
  if(checkId!=0)
  {
    testStepPass("引擎转速区间在2000-5000之间");
  }
  else
  {
    testStepFail("引擎转速区间不在2000-5000之间");
  }
  testWaitForTimeout(kTIMEOUT);//添加测试等待时间
  testRemoveCondition(checkId);//测试结束后 移除测试条件
  //测试报告的测试用例处添加
  TestReportAddMiscInfoBlock("测试参数");//额外信息区域
  TestReportAddMiscInfo("Max. voltage", "19.5 V");//额外信息
  TestReportAddMiscInfo("Max. current", "560 mA");
  TestReportAddImage("IP Snapshot", "IP.png", "400px", "");
}
- 仿真测试
 此测试项目参考 https://blog.csdn.net/m0_48468018/article/details/133847476?spm=1001.2014.3001.5501,需要先运行项目,然后进行仿真,最后测试面板点击三角符号,进行仿真测试
  
- 测试结果查看
  
  
- 查看函数的含义,测试过程中有一个比较重要的函数是ChkStart_MsgSignalValueRangeViolation,如果不清楚函数的含义,可以鼠标移动到函数的位置,点击F1查看官方的帮助文档。
  
其他常用函数
- ChkStart_InconsistentDlc
- ChkStart_UndefinedMessageReceived
- ChkStart_MsgAbsCycleTimeViolation
- ChkStart_MsgRelCycleTimeViolation
- ChkStart_NodeMsgsRelCycleTimeViolation
- ChkStart_ErrorFramesOccured
- ChkQuery_NumEvents
- ChkStart_MsgOccurrenceCount
- ChkStart_MsgDistViolation
- ChkStart_AllNodesDead
- ChkStart_AllNodesBabbling
- ChkStart_NodeMsgsAbsDistViolation
- ChkStart_MsgRelOccurrenceViolation
- ChkStart_MsgSignalValueInvalid
- ChkStart_SignalValueChange
- ChkStart_SignalCycleTimeViolation
- ChkStart_Timeout
- 故障注入函数
On key 'z'
{
  testSetMsgDlc(EngineState,5);//设置报文EngineState的DLC为5
  testResetMsgDlc(EngineState);
  testSetMsgCycleTime(0x150,50);//故障注入 设置引擎报文的循环周期为50ms
  TestDisableMsg(0x250);
  TestWaitForTimeout(2000);  
  TestSetMsgEvent(0x250);
  TestWaitForTimeout(2000);
  TestEnableMsg(0x250);
}
可以自己动手操作一下,理解函数的含义。

















