需求:
网联域控制收到报文,并进行转发,转发的关系根据客户提供的路由关系表进行映射。
测试环境:
使用2路CAN设备,这里考虑采用CANOE VN1640A作为硬件测试,上位机采用VECTOR 16 SP2进行caple脚本编写,调试。
将被测试设备输入端,与CANOE 的通道1连接
将被测试设备输出端,与CANOE 的通道2连接
测试点:
通过caple脚本,实现输入端与输出端的对比,从而判断测试结果。
测试思路
通过在caple test Moudle中赋值给环境变量,在Network Node中对环境变量的值进行监测,当环境变量值发送变化,就发出报文。
脚本编写
1.新建工程
新建工程选择2ch,要用2个通道。
2.硬件通道配置
3.环境变量
环境变量设置,发送端报文的每个信号都要设置环境变量。可以"E_"与信号名称拼接。
4.设置发送节点
点击“Insert NetWork Node”,新建发送节点。
点击编辑按钮,新建发送文件,如can1_tx.can
例如:当环境变量中E_CIM_310_CheckSum名称发送变化时,就以环境变量的新值作为报文信号值,发送报文。
5.设置caple节点
在CAN2通道上新建CAPLE test节点
新建can2_rx.can文件。
variables
{
int act_dirs;
float act_value,expt_value,i;
int act_dlc;
dword gCycCheckId;
dword act_id;
int exdirs=0;
}
void MainTest ()
{
long time[8];
char target[200];
addTimeToMeasurementStartTime(timeNowNS(), time);
write("%02d/%02d/%02d %02d:%02d:%02d.%-3d",time[5]+1, time[4], time[6]-100, time[3], time[2], time[1], time[0]);
TestModuleTitle("Router Test Report");
TestModuleDescription("This test module calls some test cases to demonstrate ");
TestReportAddSUTInfo("Company", "CIVCD");
TestReportAddSUTInfo("Serial No.", "A012345BC");
//报告执行时间
TestReportAddSUTInfo("Manufactured", "%02d-%02d-%02d %02d:%02d:%02d.%-3d", time[6]-100, time[5]+1,time[4],time[3], time[2], time[1], time[0]);
TestReportAddEngineerInfo("Test Engineer", "D.Patel");
//报告存放路径及文件名
snprintf(target,elcount(target),"./report/OUB_can8RouterCan2-%02d-%02d-%02d_%02d-%02d-%02d.%-3d", time[6]-100, time[5]+1,time[4], time[3], time[2], time[1], time[0]);
testReportFileName(target);
//can1_can8
TC_YW_Router_NotMessageRouter_0x254_001(); //执行的脚本
}
testcase TC_YW_Router_NotMessageRouter_0x254_001() {
/*
前置条件:1.被测板的CAN2连接CANoe的CAN1,被测板的CAN8连接CANoe的CAN2连接
2.被测板子正常启动
测试步骤:1.使用CANoe工具,在CANOE中对应CAN1通道上发送报文名称:MRR_0x254,报文ID:0x254中信号
ADAS_254_CheckSum=0/1/10/100/200/255
2.报文周期设定为20ms,DLC=8发送报文
期望结果:2.在CANOE中对应CAN2通道能收到报文名称:MRR_0x254,报文ID:0x254分别对应以下信号值
ADAS_254_CheckSum=0/1/10/100/200/255
收到报文周期为20ms,DLC=8
*/
message CAN2::MRR_0x254 testMessage;
dword expt_id = 0x254;//路由后的报文ID
float MessageCycleTime = 20;//声明接收报文周期时间
int exp_dirs = 0;//声明接收报文方向
//用例标题
TestCaseTitle("106","TC_YW_Router_NotMessageRouter_0x254_001");
testCaseDescription ("Test case is used to check the 0x254 router status");
TestStep("步骤1-1","ADAS_254_CheckSum-->ADAS_254_CheckSum");
for(i=255;i>=0;i=i-1){
@CAN3::MRR_0x254::E_ADAS_254_CheckSum = i;//与环境变量中保持一致,
//根据路由表,进行映射
expt_value = i;
testWaitForSignalChange(CAN2::MRR_0x254::ADAS_254_CheckSum,5000);//等待接收端信号值改变,设置超时5000ms
act_value = getSignal(CAN2::MRR_0x254::ADAS_254_CheckSum);
testassertResult(testMessage,i,expt_value,act_value,"ADAS_254_CheckSum");
}
}
testassertResult(message *testMessage,int tx_value,int expt_value,int act_value,char signale_name[]){
testStepPass("tx_singal_value ","send signal value is %d",tx_value);
write("实际获取信号值 is %d",act_value);
if(act_value != expt_value) testStepFail("check status ","%s::%s result is Fail,expect value is %d ,actul value is %d",testMessage.name,signale_name,expt_value,act_value);
else testStepPass("check status ","%s::%s result is pass,expect value is %d ,actul value is %d",testMessage.name,signale_name,expt_value,act_value);
}
6.运行脚本
执行结果
测试报告
在这里插入图片描述