基于CANoe的自动化测试系统的整体架构
1. SUT:System Under Test 被测系统,一般是待测ECU;
2. VT System:VT system是由一系列硬件板卡组成的ECU功能测试模块,通过连接ECU的I/O线路对ECU进行测试;
3. Remaining bus simulation:残余总线仿真。实际应用中SUT只是总线中的一个ECU节点,总线环境是复杂的,CANoe可以仿真除了SUT之外的总线环境,即残余总线仿真。
Test Unit和Test Module的区别
(1)Test Unit在Test Configuration窗口定义,用户需要根据Vector提供的软件vTESTstudio创建测试用例,然后将测试用例导入CANoe Test Unit运行。
(2)Test Module在 Test Setup for Test Modules 中定义,Test Module支持三种不同语言类型的测试模块:CAPL、XML和.NET。用户可以根据自己熟悉的语言和测试需求来编写测试模块。
CANoe的测试功能模块包括Test Modules和Test Units两大组件,并且集成了TFS(Test Feature Set)测试功能集和TSL(Test Service Library)测试服务库来帮助用户实现高效的自动化测试。
通过Test Modules进行自动化测试脚本的开发
Insert CAPL test module
点击Test-TestSetUp,打开Test Setup for Test Modules窗口
创建新的测试环境
增加新的CAPL测试模块
设置自动化测试脚本的保存路径
测试脚本的运行逻辑是:程序开始运行时,会先进入Main Test函数里,挨个执行主函数里的测试用例脚本。执行测试用例脚本的同时,外部的事件函数也会执行。我们正常是在事件函数中取得一些我们想要的信息(如本例子中的已经收到的报文个数和发送的个数),在测试用例时间到达之后,在测试用例函数中判断结果与预期是否一致,并输出测试结果。
Insert XML test module
空白处右击
Insert xml test module
Choose vxt or xml file
Choose CAPL test script
Double click
TFS(Test Feature Set)
TFS是CANoe扩展出来的一系列测试功能函数,包括测试报告的输出。按照功能来分,主要包括:
1、约束和条件设置函数:主要用来检测测试环境的偏差或被测ECU在测试过程中是否偏离某些参数的范围,以确保测试在正确的测试环境中被执行。
e.g:
TestAddCondition:用于添加一个事件对象(Event Object)或事件文本(Event Text)作为测试的条件。
2、信号测试函数:主要用于检测或操作信号、系统变量的数值。
e.g:
checkSignalInRange:用于检测信号、系统变量是否在指定的范围内。
3、等待指示函数:为用户提供测试动作设置、等待测试等功能。
e.g:
(1)TestCreateTesterAction:创建一个测试动作;
(2)TestWaitForSignalInRange:用于等待待检信号、系统变量是否满足定义的数值范围。
4、测试控制函数:用于控制ECU断开或连接到总线上。
e.g:
(1)TestSetEcuOffline:用于将指定的ECU从总线上断开
(2)TestSetEcuOnline :用于将指定的ECU连接到总线上
5、故障注入函数:允许用户通过调用相关函数实现一些特殊的测试条件。
e.g:
TestDisableMsg:用于禁止发送某个指定的报文
6、测试判别函数:用于对测试步骤、测试用例、测试模块等作出判别和处理。
e.g:
TestCaseFail:用于将当前测试用例的判别设为fail
7、测试架构函数:可以在测试模块设置测试分组、测试用例及测试步骤等,并定义了生成测试报告的格式。
e.g:
(1)TestCaseDescription:用于将测试用例的描述写入测试报告
(2) TestCaseTitle :用于设定测试用例的标题
8、测试报告函数:用于按用户的要求产生测试报告,增加报告的可读性。
e.g:
TestReportAddImage:用于在测试报告中添加图片
TSL(Test Service Library)
Test Service Library(测试服务库)是在测试功能集(TFS)基本函数的基础上,提供一些特殊函数,可以高效地解决某些特殊的测试问题。主要包含:
1、检测函数(Check Descriptions)
(1)信号验证(Signal Evaluation):包括信号的数值有效性、周期性和稳定性等检测。
e.g:
ChkStart_MsgSignalValueInvalid/ ChkStart_MsgSignalValueRangeViolation:用于检测信号/变量数值的有效性
(2)报文验证(Message Evaluation):包括报文丢失、周期、数据长度和错误帧等检测。
e.g:
ChkStart_MsgAbsCycleTimeViolation:用于检测周期性报文的周期是否在给定的范围内
(3)时间验证(Time Evaluation):包括连续帧及超时检测。
e.g:
ChkStart_MsgDistViolation:用于检测指定两条报文之间的时间间隔
2、状态报告函数(Status Report Functions):在执行上面的检测函数以后,CANoe需要使用状态报告函数来查询检测结果、基本状态信息等。状态报告函数又分为通用的状态报告函数和特殊类型的状态报告函数。
e.g:
ChkQuery_NumEvents:用于返回初始化后指定检测函数产生的事件次数
3、激励函数(Stimulus Functions):激励函数作为TSL中的重要一部分,允许用户使用不同的数据源作为信号或系统变量的激励发生器。
4、检测控制函数(Check Control CAPL Functions):用于对于检测事件的控制操作,如初始化、开始、停止、销毁等。
e.g:
ChkControl_Start:用于开始或继续检测事件。
CAPL脚本的封装加密
CAPL脚本的加密与保护主要有三种方式:编译后删除源代码、加密后删除源代码和加密保护与硬件绑定。
1、编译后删除源代码
(1)编辑好CAPL脚本之后,删除相关源代码(.can文件);
(2)在此节点Configuration→Node specification中将.can文件改成.cbf文件。
这种保护方式设置好之后,用户可以使用脚本,但是无法查看(编辑)和编译。
2、加密后删除源代码
(1)将CAPL源代码进行加密生成.canencr文件
(2)将CAPL源代码加密后,删除源代码(.can文件)
加密后的源代码不能被查看或编辑,但是加密后的源代码可以在其他版本CANoe中对其进行编译。
3、加密保护与硬件绑定
在前两种保护方式的基础上,通过CAPL DLL技术添加一些加密算法与计算机本机的硬件进行绑定(如MAC地址等)。
除了可以将CAPL脚本进行加密,还可以将基于TFS(TSL)编写的CAPL脚本在vTESTstudio中进行调用。例如,在使用vTESTstudio编写自动化测试脚本时,需要有车辆加速的过程,则可以通过编写CAPL脚本实现此功能,然后在vTESTstudio中直接调用。