当前位置: 首页 > web >正文

CAPL编程系列_04

1_ 测试模块TestModule:基本使用

  • 1)在Simulation Setup 中创建并配置 Test Module节点

  • 2)编写测试脚本
  •       【1】测试用例函数(testcase):实现具体测试逻辑
  •       【2】测试函数(Main Test):控制测试执行流程

  • 3)执行测试用例并查看测试报告

  Test Module 提供了 TFS(Test Feature Set):大量的测试相关的函数

1.在测试用例函数执行到某个步骤,想判定测试用例执行成功或者失败时:

(1) testStepPass("步骤序号","描述信息”,….)

(2) testStepFail("步骤序号","描述信息",...)

      如果在testcase函数中调用了上述函数,那么结果被记录到测试报告中,并作为判定依据

//定义一个被测试的函数:计算2个数的和
long add(long a,long b)
{return a+b;
}//测试用例1 : 测试add函数计算两个整数相加的结果是否正确
testcase TestAdd01()
{long res;res = add(3,5);if(res == 8){//测试用例执行通过testStepPass ("1.1","add(3,5)测试用例执行成功,返回结果为 %d",res);}else{//测试用例执行失败testStepFail ("1.2","add(3,5)测试用例执行失败,返回结果为 %d",res);}
}//在主测试函数中按执行顺序,调用要执行的测试用例
//只有有了MainTest,才能执行测试用例,我们应该在MainTest中调用测试用例函数 
void MainTest()
{TestAdd01();
}




 2_测试模块TestModule:Test Setup

  • 1) 在 Test Setup 中创建并配置 Test Environment 节点
  • 2) 在Test Environment 节点下创建 Test Module 节点
  • 3) 配置 Test Module 节点,编写测试脚本
  • 4) 执行测试用例并查看测试报告

     




3_ 测试模块TestModule:用例组织和描述

Test Module的架构

  • 一个测试模块中可以包含多个测试用例
  • 一个测试用例中可以包含多个测试步骤

Test Module { 包含多条 Test Case 1  2  3 ......}

Test Case 1  { 包含多条  Test Step  1  2  3 ......}

· Test Module   ->     Test Case  ->     Test Step 

  • 可以使用测试组对测试用例进行分类
  • 测试组可以嵌套

Test Module

1 Test Group
     Test Case
     Test Case

     Test Case
     1.1 Test Group
          Test Case
          Test Case
     1.2 Test Group

          Test Case

2 Test Group

     Test Case

     Test Case

//测试用例是从MainTest中启动的
void MainTest()
{//指定测试模块的标题和描述testModuleTitle("测试模块的示例标题");testModuleDescription("测试模块的示例描述信息");//组 开始到结束testGroupBegin("测试分组1","测试分组1的详细描述");TestCase01();TestCase02();testGroupEnd();testGroupBegin("测试分组2","测试分组2的详细描述");TestCase03();TestCase04();TestCase05();testGroupEnd();testcase TestCase01()
{testCaseTitle("TC01","测试用例1的示例标题");testCaseDescription("测试用例1的示例描述");
}testcase TestCase02()
{testCaseTitle("TC02","测试用例2的示例标题");testCaseDescription("测试用例2的示例描述");
}testcase TestCase03()
{testCaseTitle("TC03","测试用例3的示例标题");testCaseDescription("测试用例3的示例描述");
}testcase TestCase04()
{testCaseTitle("TC04","测试用例4的示例标题");testCaseDescription("测试用例4的示例描述");
}testcase TestCase05()
{testCaseTitle("TC05","测试用例5的示例标题");testCaseDescription("测试用例5的示例描述");
}}




4_ 测试模块TestModule:ECU自动化测试案例

        1) 案例分析: HU(车机)请求控制雨刮器

需求描述
1、BCM(车身控制模块) 控制着雨刮器的工作,可以控制雨刮器: 关闭 / 低速刮/ 高速刮  / 自动。

   (1) BCM (车身控制模块)会周期性地发出CAN 报文,反馈雨刮器当前的工作状态。

   (2) 报文 ID 0x387,其中【前雨刮工作状态】的信号名为:BCM_FrontWiperstatus

2、通过车机给 BCM(车身控制模块) 发送 CAN 报文 (其中包含请求控制雨刮的信号) 来实现雨刮器的控制请求。

   (1) 车机 ( HU ) 会根据用户的操作 ( 按键 / 语音 ) 来发送相应的 CAN 报文。

   (2) 报文 ID0x55D,其中【请求控制前雨刮】的信号名为: HU_FronWiperRg

测试验证
BCM (车身控制模块)是否能根据车机指令相应地控制雨刮器工作,并发送对应雨刮器工作状态的 CAN 报文。


        2) 案例设计:HU(车机)请求控制雨刮器

需求定义
1、BCM 控制着雨刮器的工作,周期性地发出 CAN 报文,反馈雨刮器当前的工作状态。

        (1) 报文 ID 为 0x387,其中【前雨刮工作状态】的信号名为: BCM_FrontWiperStatus

        (2) 信号值: 0x0 ( off )0x1 ( low )0x2 ( high )0x3 ( error )

2、车机给 BCM 发送 CAN 报文来实现雨刮器的控制请求。
        (1) 报文 ID0x55D,其中【请求控制前雨刮】的信号名为: HU_FronWiperRq

        (2) 信号值: 0x0 ( inactive )0x1 ( low )0x2 ( high )0x3 ( auto )

所属模块用例编号 用例标题前置条件执行步骤预期执行结果
BCM-雨刮器控制TC001HU给BCM发送雨刮器低速刮请求

1、BCM 上电

2、BCM控制的雨刮器当前是关闭状态【0x387中信号BCM_FrontWiperStatus为0】

1、模拟HU给BCM发送请求低速刮的报文【0x55D中信号HU_FronWiperRg值为1】1、BCM发出的0x387中信号BCM_FrontWiperStatus值由0变更为1pass
BCM-雨刮器控制TC002HU给BCM发送雨刮器高速刮请求

1、BCM 上电

2、BCM控制的雨刮器当前是关闭状态【0x387中信号BCM_FrontWiperStatus为0】

1、模拟HU给BCM发送请求高速刮的报文【0x55D中信号HU_FronWiperRg值为2】1、BCM发出的0x387中信号BCM_FrontWiperStatus值由0变更为2pass

        3)案例脚本编写:HU(车机)控制雨刮器

variables
{message HU_0x55d msg55d;
}void MainTest()
{TestFrontWiperLow();
}testcase TestFrontWiperLow()
{TestCaseTitle("TC001","HU给BCM发送低速刮请求");TestCaseDescription("模拟HU给BCN发送低速刮请求的信号报文,验证BCM是否控制前雨刮低速刮,并返回相应状态的信号");/*1.先记录请求前BCM发出的前雨刮工作的状态信号是否是已关闭(0)2.先创建HU发出请求低速刮的信号(1)的报文,并发送3.等待2秒钟(2000毫秒)(让BCM完成对前雨刮的实际控制)4.验证BCM当前发出的前雨刮工作状态的信号是否为低速刮(1)*/testStep("Step 1","HU请求发出前,BCM_FrontWiperStatus信号的值: %d",                    (int)$BCM_FrontWiperStatus);msg55d.HU_FrontWiperRq = 1;  //设置为请求低速刮output(msg55d);testStep("Step2","模拟HU发出请求低速刮(信号为1)的报文");testWaitForTimeout(2000);  //让测试程序等待指定的时长testStep("Step3","测试程序休眠了2秒");if((int)$BCM_FrontWiperStatus == 1){testStepPass("Step 4 Pass","用例执行通过:前雨刮当前工作状态为低速刮(1)");}else{testStepFail("Step 4 Fail","用例执行失败:前雨刮当前工作状态的信号值为:%d",    (int)$BCM_FrontWiperStatus);}
}

        4)案例脚本编写:信号判断函数

1. 在超时时长内判断指定的信号是否符合预期【要等待】
        ① TestWaitForSignalMatch ( 信号, 比较值, 超时时长 ) 

        ② TestWaitForSignallnRange ( 信号, 下限值, 上限值, 超时时长 )

        ③ TestWaitForSignalOutsideRange ( 信号, 下限值, 上限值, 超时时长 )
                ①②③ 只检查,不记录到测试结果


2. 检查 / 测试信号的当前值是否符合预期【不等待】
        1) CheckSignalMatch ( 信号, 比较值 )

        2) CheckSignallnRange ( 信号, 下限值, 上限值, 超时时长 ) 

                1) 2) 只检查,不记录到测试结果

        3) TestValidateSignalMatch ( 步骤描述, 信号, 比较值 ) 
        4) TestValidateSignallnRange ( 步骤描述, 信号, 下限值, 上限值, 超时时长 )            

        5) TestValidatesignalOutsideRange ( 步骤描述, 信号, 下限值, 上限值, 超时时长 )

                3) 4) 5) 检查并记录到测试结果


         5)ECU报文发送周期的自动化测试【1】

1. 需求:
        BCM 周期性地发出 ID0x387 CAN 报文,周期为 100ms ( ± 8ms )
2. 思路:
        步骤 ① 开启针对指定报文的发送周期的检查
        步骤 ② 添加检查条件 ( 将检查结果记录到测试报告,并将违反规则的结果判定为 fail )
        步骤 ③ 等待一段时间
        步骤 ④ 移除检查条件

3. 相关函数:
        ChkStart_MsgAbsCycleTimeViolation ( 报文,最小间隔,最大间隔 )
        TestAddCondition( 检查 ID )
        TestRemoveCondition ( 检查 ID )

void MainTest()
{TestMessageCycle ();
}//测试0x387的报文发送周期是否满足规定:100ms(±8ms)
testcase TestMessageCycle()
{dword checkId;  //返回一个检测的ID的整数// 开始检查报文发送的周期(返回该检查的ID )checkId = chkStart_MsgAbsCycleTimeViolation(BCM_0x387,92,108);// 添加检查条件(开始向测试报告中记录,并且会判定违规的结果为Fail)TestAddCondition(checkID);// 让程序休眠3s(让检查进行3s)TestWaitForTimeout(3000);// 移除检查条件(不再测试报告中记录)testRemoveCondition(checkId);
}

         5)ECU报文发送周期的自动化测试【2】

1. 需求:
        BCM 周期性地发出 ID0x387 CAN 报文,周期为 100ms ( ± 8ms )
2. 思路:
        步骤 ① 开启针对指定报文的发送周期的检查
        步骤 ② 等待一段时间
        步骤 ③ 结束检查
        步骤 ④ 查询各项统计结果

3. 相关函数:
        ChkStart_MsgAbsCycleTimeViolation ( 报文,最小间隔,最大间隔 )
        ChkControl_Stop ( 检查 ID )
        ChkQuery_NumEvents ( 检查 ID )

        ChkQuery_StatNumProbes ( 检查 ID )

        ChkQuery_StatProbeIntervalMin ( 检查 ID )

        ChkQuery_StatProbeIntervalMax ( 检查 ID )

        ChkQuery_StatProbeIntervalAvg ( 检查 ID )

void MainTest()
{TestMessageCycle ();
}//测试0x387的报文发送周期是否满足规定:100ms(±8ms)
testcase TestMessageCycle()
{dword checkId;  //返回一个检测的ID的整数long numEvents;long numProbes;float intervalMin;float intervalMax;float intervalAvg;// 开始检查报文发送的周期(返回该检查的ID )checkId = chkStart_MsgAbsCycleTimeViolation(BCM_0x387,92,108);// 让程序休眠3s(让检查进行3s)TestWaitForTimeout(3000);// 停止检查ChkControl_(checkId);// 获取违反规则的事件次数(本例中:报文发送间隔违规: < 92 ||  > 108 )numEvents = ChkQuery_NumEvents(checkId);// 获取统计过程中的收到的报文次数numProbes = ChkQuery_StatNumProbes (checkId);// 获取报文之间的最小间隔intervalMin = ChkQuery_StatProbeIntervalMin(checkID);// 获取报文之间的最大间隔intervalMax = ChkQuery_StatProbeIntervalMax(checkID);// 获取报文之间的平均间隔intervalAvg = ChkQuery_StatProbeIntervalAvg(checkID);write("numEvents : %d, numProbes : %d, intervalMin : %.1f, intervalMax  : %.1f, intervalAvg : %.1f,numEvents ,numProbes ,intervalMin ,intervalMax  ,intervalAvg ")
}



希望对你有所帮助,谢谢观看。

http://www.xdnf.cn/news/6490.html

相关文章:

  • std::vector c++
  • LeetCode 热题 100 1.两数之和
  • 竞品分析是什么,包括哪些内容?AI竞品分析生成器推荐!
  • 20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图
  • VMware中快速安装与优化Ubuntu全攻略
  • 28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
  • string(c++)
  • 如何在 Visual Studio Code 中克隆 GitHub 上的 Git 仓库?
  • Java并发编程面试题总结
  • 从管理痛点破局:安科瑞预付费系统赋能高校智慧水电
  • 最优化方法Python计算:有约束优化应用——线性不可分问题支持向量机
  • Java集合框架
  • Python解析Excel入库如何做到行的拆分
  • mysql 基础复习-安装部署、增删改查 、视图、触发器、存储过程、索引、备份恢复迁移、分库分表
  • 五件应该被禁止自行托管的事情(5 Things That Should Be Illegal to Self Host)
  • 【MySQL】基础知识
  • 线程的两种实现方式
  • 云服务模型深度解析:IaaS、PaaS 和 SaaS
  • DevExpressWinForms-TreeList-基础概念介绍
  • 《Java 大视界——Java 大数据在智能电网分布式能源协同调度中的应用与挑战》
  • 面试题:请解释Java中的垃圾回收机制(Garbage Collection, GC),并讨论不同的垃圾回收算法及其优缺点
  • 涨薪技术|0到1学会性能测试第65课-SQL捕获阻塞事件
  • HashSet
  • python打卡打印26
  • Github 2025-05-15 Go开源项目日报 Top10
  • 基于IBM BAW的Case Management进行项目管理示例
  • 单物理机上部署多个TaskManager与调优 Flink 集群
  • 【GESP】C++三级模拟题 luogu-B3849 [GESP样题 三级] 进制转换
  • MCP Server On FC 之旅2: 从 0 到 1 - MCP Server 市场构建与存量 OpenAPI 转 MCP Server
  • AWS Elastic Beanstalk控制台部署Spring极简工程