看懂这篇文章,你将可以利用CAPL进行大部分诊断自动化测试
车载领域都要进行UDS诊断测试,每次版本更新都要进行一次重复的测试,避免出现问题,面对这中情况,每次都要重复手动点击几十个要浪费大量的时间,这个时候如果写一个CAPL脚本,通过CANoe进行自动化测试,将给我们省去大量的时间
看懂这篇文章,你就可以通过CAPL进行编写自动化脚本,可以帮助进行大部分UDS自动化测试
废话不多说,直接看代码:
TestCase Test1()
{
// Send Request and react to all possible cases.
diagRequest Door.EcuIdentification_Read idReq;
diagSendRequest( idReq);
switch( TestWaitForDiagResponse( idReq, 200))
{
case 0: // Timeout: The ECU did not respond within 200 ms.
write("No answer from ECU!");
TestStepFail("Read ID", "No answer from ECU!");
break;
case 1: // response received
TestReportWriteDiagResponse(idReq); // write response to report
if( diagGetLastResponseCode(idReq) == -1)
{
// A positive response was received
write("ECU Diagnostics Identification: %d", (long)diagGetRespParameter(idReq,"Diagnostic_Identification"));
TestStepPass("Read ID", "Positiv response received!");
}
else // A negative response was received
{
write( "ECU Diagnostics Identification failed: 0x%x", diagGetLastResponseCode( idReq));
TestStepFail("Read ID", "Negative response received");
}
break;
default: // internal or setup error
TestStepFail("Read ID", "Error in TestCase! Verdict unreliable.");
}
}
diagRequest:诊断请求,cdd文件中定义好的诊断命令
diagSendRequest:发送诊断命令
TestWaitForDiagResponse:CAPL自带函数,对上面发送的诊断命令进行判断,用法是(诊断请求,时间ms级),会有三种返回值
=1:时间内回复
0:超时未回复
<0:错误
write:write窗口打印
TestStepFail:返回用例执行失败
TestReportWriteDiagResponse:将响应的结果打印在测试报告中
diagGetLastResponseCode:获取上一次响应代码,三种返回值
-1:肯定响应
0:超时
>0:负响应
TestStepPass:返回用例执行通过
可以通过函数封装,将这些封装在一个函数里面,在对发送诊断命令,并对响应进行判断,而且也会自动生成报告,以后在多个项目中,只要改变参数,就可以方便我们进行自动化测试编写并测试
最后在下面添加 MainTest()函数,并添加上面的testcase 用例名称,在canoe里面添加CAPL测试模块,将.can文件添加进去就可以执行测试了