• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

通过响应报文判断交易的处理情况

发布: 2007-11-16 14:01 | 作者: xingcyx | 来源: http://www.blogjava.net/xingcyx | 查看: 279次 | 进入软件测试论坛讨论

领测软件测试网     在LoadRunner脚本的编写过程中,很多时候我们需要通过服务器返回的响应报文来判断交易的处理情况,比如说服务器返回一个xml报文,用<reponse_code></response>字段的值来指明交易处理的结果,如'0000'表示处理成功,其余取值则表示出错。在基于http协议的脚本中,该值可以通过关联的方式来获取,在这里就不多说了。我在这里说的是另外一种情况,即在一些非http协议脚本(如tuxedo协议)中,如何获取这个值呢?
    假设脚本向服务器发送请求的脚本如下:
    ret = lrt_tpcall("EAIHINCSMW",(char *)pFml,0,(char **)&recvBuf,&recvlen,0);
    服务器处理请求后返回:
    <?xml version="1.0" encoding="GBK"?><Transaction><Transaction_Header><tran_response><response_code>2000</response_code><respone_msg>组件处理:组件[SDATA_GetSerialNo]执行失?/respone_msg></tran_response></Transaction_Header><Transaction_Body><response/>
</Transaction_Body></Transaction>
    以上信息保存在recvBuf中。其中<response_code>字段值'2000'就是我们需要用来判断的字段值,那么在后续的脚本中如何获取该值并做相应的判断呢?  
    首先声明两个用于取值的字符串指针和一个表示响应码的字符串:
    char *response1;
    char *response2;
    char response_code[5];

    接下来是取值的方法:
   
   //判断返回结果是否成功:响应码respone_code '0000'表示处理成功。返回码的其余取值表示出错
    response1 = (char *)strstr(recvBuf,"<response_code>");
    response1 =response1 + 15;
    response2 = (char *)strstr(response1,"</response_code>");

    说明:
    strstr()函数的作用是:返回一个字符串在另一个字符串中首次出现的位置到后者末尾的子字符串(大小写敏感)。如果这个函数执行成功,将返回剩余字符串(存在相匹配的字符);如果没有找到相匹配的字符,则返回False。
    因此strstr(recvBuf,"<response_code>");表示查找在recvBuf中查找<response>字符串,并将其后的字符都赋给response1,故response1的值为:“<response_code>2000</response_code><respone_msg>组件处理:组件[SDATA_GetSerialNo]执行失?/respone_msg></tran_response></Transaction_Header><Transaction_Body><response/>
</Transaction_Body></Transaction>”
    response2的值为:</response_code><respone_msg>组件处理:组件[SDATA_GetSerialNo]执行失?/respone_msg></tran_response>< /Transaction_Header><Transaction_Body><response/>
</Transaction_Body></Transaction>
   15是“<response_code>”的字符串长度

    最后是判断:
    if(strncmp(response1,"0000",response2-response1)==0)
    {
        //返回码0000,处理成功
         lr_message("Success!");
    }
    else
    {
        //返回码不为0000,处理失败
        lr_message("Fail!");
    }

    说明:strncmp()函数的作用是:比较字符串的前n个字符(大小写敏感)。返回值:
  • 0 – 如果字符串相等
  • <0 – 如果string1小于string2
  • >0 – 如果string1大于string2
    语法:strncmp(string1,string2,length);

    如果想打印返回码,则可以用memcpy函数:
    memcpy(response_code,response1,4);
    lr_error_message("response_code:%s",response_code);

    注:以上代码均是从我的实际工作中选取的例子,其中所使用的方法并不一定是最好的解决方案。如果各位同仁有其它更好的方法或建议,请不吝指教!

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/

TAG: loadrunner lr


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网