CanOE中基于CAPL实现主动化诊断测试

打印 上一主题 下一主题

主题 1713|帖子 1713|积分 5139

CAPL主动化测试脚本



  

前言

  工作中在需要对ECU的诊断模块进行验证。
  在一个项目的不同时期,需要进行多次验证,而每次验证的内容又大致雷同;在不同的项目中,诊断服务又大同小异。相较于每次手动测试验证并通过截图、撰写测试报告的操作流程,直接使用CanOE进行脚本测试更为简单快捷,且可复用。
  于是便萌生了制作测试脚本的想法,简化操作流程,用更少的时间完成更多的工作,以此有更多的时间摸鱼。

一、UDS服务

  AutoSAR规范中重要有以下诊断服务:
Service IDService服务0x10Diagnostics Session Control诊断会话控制0x11ECU ResetECU 复位0x14Clear Diagnostic Information清除诊断信息0x19Read DTC Information读取故障码信息0x22Read Data By Identifier通过ID读数据0x2EWrite Data By Identifier通过ID写数据0x27Security Access安全访问0x28Communication Control通讯控制0x3ETester Present待机握手0x85Control 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加入天生测试报告的函数,一个简单的代码如下:
  1. void MainTest ()
  2. {
  3.         testModuleTitle("DIAG TEST");
  4.         testGroupBegin("UDS SERVICE","");        //UDS服务测试开始
  5.        
  6.         testGroupEnd();                                                //UDS服务测试结束
  7. }
复制代码
3.2.2、testcase

  testcase对应测试用例, MainTest () 中包罗的测试用例会在接下来的测试中执行,未包罗的则不执行,详见下面的代码: Service_10_01_Positive() 就是一个简单的测试用例,他的功能是测试UDS 0x10服务 01子服务,但是如今还没有添补具体的逻辑:
  1. testcase Service_10_01_Positive()
  2. {//在这里编写测试用例的逻辑
  3.         testCaseTitle("UDS SERVICE","SERVICE_10_01_Positive");
  4.        
  5.         //write函数会在上文中提到的write窗口输出内容,语法类似C语言中的print
  6.         write("/**************************************************/");
  7.         write("UDS 0x10服务 01子服务 正响应测试开始");
  8.         if(1)
  9.         { //Positive
  10.        
  11.                 //如果测试通过应该调用testStepPass,它可以在测试报告中显示绿色的“PASS”
  12.                 testStepPass("RESP","0x%02X",RxDataBuffer[0]);
  13.                 write("0x%02X",RxDataBuffer[0]);
  14.                 write("测试通过");
  15.         }
  16.         else
  17.         { //Negative
  18.        
  19.                 //如果测试失败应该调用TestStepFail,它可以在测试报告中显示红色的“FAIL”
  20.                 TestStepFail("RESP","0x%02X",RxDataBuffer[0]);
  21.                 write("0x%02X",RxDataBuffer[0]);
  22.                 write("测试未通过");
  23.         }
  24. }
  25. void MainTest ()
  26. {
  27.         testModuleTitle("DIAG TEST");
  28.         testGroupBegin("UDS SERVICE","");        //UDS服务测试开始
  29.        
  30.         Service_10_01_Positive();                        //第一个测试用例
  31.        
  32.         testGroupEnd();                                                //UDS服务测试结束
  33. }
复制代码

总结

以上是关于CanOE中基于CAPL语言创建一个测试脚本的简单形貌,后续有缘更新。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表