在上上篇文章中vTESTstudio系列6--vTESTstudio中如何去根据需求编写自己需要的测试函数(一),主要介绍了通过需求去实现了Rolling Counter和CheckSum的测试,今天给大家介绍一下通信测试中另外一个测试点,信号的初始值测试!!!
目录
2.Check Initial Value的CAPLCAPL函数的实现逻辑如下:
1.信号的初始值:
测试初始值的目的是验证每个节点在系统启动时是否处于正确的初始状态,以确保正常通信的开始。一般以客户的CAN Matrix文档中定义的初始值为准,如果在CAN Matrix中未定义,可以通过DBC文件去检查每个信号的初始值是多少:
2.Check Initial Value的CAPLCAPL函数的实现逻辑如下:
export testfunction TF_CheckInitialValue(char MessageName[], char SignalName[], float InitialValue)
{
dword MessageID;
long res1;
long Timeout;
float SignalValue;
signal * checksignal;
Timeout = 500;
RequestResponseCompareLogic("1101", "5101", "Equal","Physical");
checksignal = lookupSignal(SignalName);
MessageID = getMessageID(MessageName);
res1 = testWaitForMessage(MessageID, Timeout);
if(res1 == 1)
{
SignalValue = getSignal(checksignal);
if (SignalValue == InitialValue)
{
testStepPass("INFO","The signal initial value(%f) is correct!",InitialValue);
}
else
{
testStepFail("INFO","The signal initial value is wrong, expected value is %f, and actual value is %f",InitialValue,SignalValue);
}
}
else if (res1 == 0)
{
// Timeout occured!
TestStepFail("INFO","The message has not arrived within timeout!");
}
else if(res1 == -2)
{
TestStepFail("INFO","Constraint violation!");
}
else
{
TestStepFail("INFO","General error!");
}
}
上述代码中,MessageName,SingalName,InitialValue是需要传入的函数参数,SingalName是需要传入的被测信号名,MessageName是被测信号所在的报文名,InitialValue是被测信号期望的初始值,代码的主要逻辑如下:
1.通过lookup的自带函数将传入的字符串信号名转化成信号类型
2.检测到CAN总线上有传入的MessageName是否在发送
3.通过1101控制ECU重启初始化(如何实现1101的诊断,我会在后面的文章中给大家详细介绍)
4.获取被测信号的当前值,并将当前值与期望的初始值作比较,完成测试
3.编辑测试用例:
因为每个报文的包含的信号众多,可以参考上一篇文章(vTESTstudio系列7--vTESTstudio中如何实现测试用例的批量化生成),快速的生成批量的InitialValue的测试用例,生成结果如下:
4.执行测试结果及报告:
测试报告结果如下:
对具体的Pass和Fail的步骤如下:
分析发现可以实现测试信号初始值的逻辑!!!