CANOE-仿真测试
目录
CANOE 仿真+测试
仿真+测试
CANoe的自动化测试系统简介
基于CANoe的自动化测试系统架构,根据ECU的测试环境和测试规范,搭建基于CANoe的测试系统,通过开始测试模块(Test Module)或测试单元(Test Unit)、网络控制硬件接口(如VN2600)、外围的硬件在环设备(如TV System)以及数据采集和控制I/O等板卡,实现高效的自动化测试。
Canoe TFS(Test Feature Set)
Canoe Test Feature Set是一套专为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", "");
}
仿真测试
此测试项目参考 ,需要先运行项目,然后进行仿真,最后测试面板点击三角符号,进行仿真测试
测试结果查看
查看函数的含义,测试过程中有一个比较重要的函数是 ChkStart_MsgSignalValueRangeViolation ,如果不清楚函数的含义,可以鼠标移动到函数的位置,点击F1查看官方的帮助文档。
其他常用函数
- ChkStart_InconsistentDlc:检查DLC(数据长度代码)不一致的情况。
- 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);将报文EngineState的DLC重置为默认值。
testSetMsgCycleTime(0x150,50);故障注入,将引擎报文的循环周期设置为50ms。
TestDisableMsg(0x250);禁用报文0x250。
TestWaitForTimeout(2000);等待超时时间为2000毫秒。
TestSetMsgEvent(0x250);设置报文0x250的事件。
TestEnableMsg(0x250);启用报文0x250。
}