仿真+测试
- 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为5testResetMsgDlc(EngineState);testSetMsgCycleTime(0x150,50);//故障注入 设置引擎报文的循环周期为50msTestDisableMsg(0x250);TestWaitForTimeout(2000); TestSetMsgEvent(0x250);TestWaitForTimeout(2000);TestEnableMsg(0x250);
}
可以自己动手操作一下,理解函数的含义。