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 parameter
  long 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两个函数注释掉,然后去重新执行测试脚本,报告如下:

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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道法自然0402

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值