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

vTESTstudio系列13--vTESTstudio中的动态函数库介绍3

在上一篇文章中(vTESTstudio系列12--vTESTstudio中的动态函数库介绍2),给大家介绍了如何通过osek_tp.dll的接口去发送诊断指令,本篇文章给大家介绍如何去处理诊断回复内容,确保实际的诊断回复是符合需求。Let's Go!!!

目录

1. CanTp接收数据的函数:

1.1 CanTp_ReceptionInd函数的介绍:

1.2 TestSupplyTextEvent函数的介绍:

1.3 TestWaitForTextEvent函数的介绍:

2.自定义CanTp的接收函数:

2.1 更新CanTp_ReceptionInd函数:

2.2 诊断回复函数:

2.3 编辑测试用例并执行测试:

2.4 有趣之处:


1. CanTp接收数据的函数:

1.1 CanTp_ReceptionInd函数的介绍:

CanTp_ReceptionInd这个函数的功能是通过建立CANTP连接的handle,当收到这个连接的数据时,这个函数就会被自动执行,同时将收到的数据存到data这个数组里面。

使用时我们可以直接使用上述图片的案例放到我们的编辑脚本中:

void CanTp_ReceptionInd( long connHandle, byte data[])
{write( "Received %d byte on connection %d: [%02x] ..." , elcount( data), connHandle, data[0]);
}

1.2 TestSupplyTextEvent函数的介绍:

TestSupplyTextEvent函数的功能发出指定事件的信号,如上述案例中的错误帧事件信号("ErrorFrame occurred!"),这个文本文档是可以自己定义的。

1.3 TestWaitForTextEvent函数的介绍:

TestWaitForTextEvent函数的功能等待来自单个测试模块的指定文本事件的信号。同时,来自另一个测试模块的信号不会影响此等待指令。如果此事件未在aTimeout时间到期之前发生,则等待条件仍将得到解决,这个时候,该函数的返回值不等于1!!!

2.自定义CanTp的接收函数:

2.1 更新CanTp_ReceptionInd函数:

上述的代码可以看出,接收的诊断数据都放在了data的缓存区数组中,不利于我们做诊断回复的处理,我们在上篇文章的第2章节定义了许多变量,其中就有一个接收数据的数组byte ResponseData[8194];同时我们还要再定义一个golbal变量ResponseLength

variables
{byte crc_temp;byte crc_value; //for Diagnostic test parameterlong handle_xml;int g_rxId = 0x691;int g_txId_PhysicalAddr = 0x791;int g_txId_FunctionalAddr = 0x7FF;byte RequestData[8194];byte ResponseData[8194];long ResponseLength = 0;
}

然后我们再对上述的CanTp_ReceptionInd函数做一些处理:

void CanTp_ReceptionInd(long connHandle, byte data[])
{int i = 0;for(i = 0; i<elcount(data); i++){ ResponseData[i] = data[i];}ResponseLength = elcount(data);TestSupplyTextEvent("TpMsgReceived");
}

2.2 诊断回复函数:

做完上述的预处理之后,我们开始编辑我们自定义的诊断回复函数:

export testfunction ReceiveDiagResponse()
{byte ExpectedResponse[8194] = {0x50,0x01,0x00,0x32,0x01,0xF4};long i =0;long result;result = TestWaitForTextEvent("TpMsgReceived", 5000);if(result ==1){for (i = 0; i <= ResponseLength; i++){if (ResponseData[i] == ExpectedResponse[i]){testStepPass("INFO","Diagnostic Response Data[%d] 0x%2x is equal to Expected Respsonse[%d] 0x%2x",i,ResponseData[i],i,ExpectedResponse[i]);}else{testStepFail("INFO","Diagnostic Response Data[%d] 0x%2x is not equal to Expected Respsonse[%d] 0x%2x Please Check!!!",i,ResponseData[i],i,ExpectedResponse[i]);}}}}

上述代码中,我们在2.1中的CanTp_ReceptionInd接收完诊断回复后,向Test Module发送“TpMsgReceived”的文本,然后在自定义的诊断回复函数中去check这个“TpMsgReceived”的文本,当TestWaitForTextEvent的返回值为1时,表明所有的诊断回复数据都被接收到,这个时候我们开始处理这个诊断回复,将它与我们的期望结果一个byte一个byte的去比较,一致就pass,不一致就fail。

2.3 编辑测试用例并执行测试:

测试结果如下所示:

我们可以发现每个byte的数据都是对比一致的,我们再更改一个byte数据使得测试不通过:

可以发现Byte[4]的数据不一致,报告中也是红色的fail。

2.4 有趣之处:

当我把上述代码中的TestSupplyTextEvent和TestWaitForTextEvent两个函数注释掉,然后去重新执行测试脚本,报告如下:

有兴趣的朋友可以评论一下为什么会报错。


http://www.mrgr.cn/news/20322.html

相关文章:

  • 安卓版Infuse来了 打造自己的影视墙
  • MMSegmentation测试Segformer
  • modelsim 关闭 warning 的方法
  • Java企业电子招投标系统:Spring Cloud微服务架构-强化企业招采竞争力:电子化招投标平台助力效率与成本控制-支持二次开发
  • 查看当前主机的硬盘是固态硬盘还是机械硬盘
  • TMGM:美国贸易逆差扩大将对第三季度GDP增长产生压力
  • 0.3 学习Stm32经历过的磨难
  • ROG STRIX Z790-E GAMING WIFI II
  • 【C语言】---- 复合数据类型之联合体(Union)
  • 【PostgreSQL教程】PostgreSQL 高级篇之 TRANSACTION(事务)
  • 体育数据API纳米足球数据API:足球数据接口文档API示例⑥
  • python socket TCP/UDP/MULTICAST 收发示例
  • Scratch在线玩:我的世界中文版
  • 云微客短视频矩阵系统多账号解析,打造流量新高地!
  • CSS选择器:一文带你区分CSS中的伪类和伪元素!
  • 微型丝杆工艺流程!
  • 如何选择适合的继电器测试负载箱?
  • c++ string中append/push_back/insert的区别以及erase/pop_back的区别
  • 外包干了2个月,技术退步明显了...
  • 基于Android Studio的行程记录APK开发指南(三)---界面设计及两种方法获取用户位置