CanOE中基于CAPL实现自动化诊断测试
CAPL自动化测试脚本
文章目录
- CAPL自动化测试脚本
- 前言
- 一、UDS服务
- 二、测试工程概览
- 三、一个简单的测试工程
- 3.1、新建测试工程
- 3.2、编辑测试代码
- 3.2.1、void MainTest ()
- 3.2.2、testcase
- 总结
前言
工作中在需要对ECU的诊断模块进行验证。
在一个项目的不同时期,需要进行多次验证,而每次验证的内容又大致相同;在不同的项目中,诊断服务又大同小异。相较于每次手动测试验证并通过截图、撰写测试报告的操作流程,直接使用CanOE进行脚本测试更为简单快捷,且可复用。
于是便萌生了制作测试脚本的想法,简化操作流程,用更少的时间完成更多的工作,以此有更多的时间摸鱼。
一、UDS服务
AutoSAR规范中主要有以下诊断服务:
Service ID | Service | 服务 |
---|---|---|
0x10 | Diagnostics Session Control | 诊断会话控制 |
0x11 | ECU Reset | ECU 复位 |
0x14 | Clear Diagnostic Information | 清除诊断信息 |
0x19 | Read DTC Information | 读取故障码信息 |
0x22 | Read Data By Identifier | 通过ID读数据 |
0x2E | Write Data By Identifier | 通过ID写数据 |
0x27 | Security Access | 安全访问 |
0x28 | Communication Control | 通讯控制 |
0x3E | Tester Present | 待机握手 |
0x85 | Control DTC Setting | 诊断故障码设置控制 |
上表中诊断服务不在本文中进行详细描述,目前脚本仅实现了上表中部分服务(10、11、14、28、3E、85),剩下的逻辑相较复杂(19、27),或是复用性较低(22、2E),以后有时间再说吧
二、测试工程概览
整体界面如下:
左上角为Trace窗口,该窗口显示的是测试过程中的Log:
左下角为Write窗口,该窗口显示着测试代码中的某些输出内容,包括寻址方式、报文内容、测试结果等等:
右上角为Panel窗口,该窗口由CanOE内Panel Designer编辑形成(Panel Designer会在后文进行详细说明),可以通过该窗口设置报文类型、诊断ID、测试用例等:
最后,右下角为Test窗口,通过该窗口开始整体的测试,同时,该窗口还显示了测试用例的测试结果以及提供了查看测试报告的快捷按钮:
三、一个简单的测试工程
若要实现上面的工程,让我们从一个小小的工程开始。
3.1、新建测试工程
在节点上右键,选择“Insert CAPL Test Module”,新建一个CAPL测试模块:
在创建完成的Test Module上右键,可以对该Module进行简单的设置:
①此处可以重命名Module:
②勾选下图选项后,测试报告的名字会增加一个递增的后缀,第二次测试的测试报告不会覆盖上一次测试,不勾选则是会覆盖掉报告:
③上述内容设置完成后,一个基础的CAPL测试模块已经创建完成了,接下来就是基于CAPL语言编写逻辑。点击下图中“铅笔”按钮,选择一个 .can文件后,开始编辑此文件:
3.2、编辑测试代码
3.2.1、void MainTest ()
CAPL测试脚本的入口函数为void MainTest (),可以在MainTest加入生成测试报告的函数,一个简单的代码如下:
void MainTest ()
{
testModuleTitle("DIAG TEST");
testGroupBegin("UDS SERVICE",""); //UDS服务测试开始
testGroupEnd(); //UDS服务测试结束
}
3.2.2、testcase
testcase对应测试用例, MainTest () 中包含的测试用例会在接下来的测试中执行,未包含的则不执行,详见下面的代码: Service_10_01_Positive() 就是一个简单的测试用例,他的功能是测试UDS 0x10服务 01子服务,但是目前还没有填充具体的逻辑:
testcase Service_10_01_Positive()
{//在这里编写测试用例的逻辑
testCaseTitle("UDS SERVICE","SERVICE_10_01_Positive");
//write函数会在上文中提到的write窗口输出内容,语法类似C语言中的print
write("/**************************************************/");
write("UDS 0x10服务 01子服务 正响应测试开始");
if(1)
{ //Positive
//如果测试通过应该调用testStepPass,它可以在测试报告中显示绿色的“PASS”
testStepPass("RESP","0x%02X",RxDataBuffer[0]);
write("0x%02X",RxDataBuffer[0]);
write("测试通过");
}
else
{ //Negative
//如果测试失败应该调用TestStepFail,它可以在测试报告中显示红色的“FAIL”
TestStepFail("RESP","0x%02X",RxDataBuffer[0]);
write("0x%02X",RxDataBuffer[0]);
write("测试未通过");
}
}
void MainTest ()
{
testModuleTitle("DIAG TEST");
testGroupBegin("UDS SERVICE",""); //UDS服务测试开始
Service_10_01_Positive(); //第一个测试用例
testGroupEnd(); //UDS服务测试结束
}
总结
以上是关于CanOE中基于CAPL语言创建一个测试脚本的简单描述,后续有缘更新。