获取服务器的返回值,可以用web_reg_save_param函数,该参数最好放到:

语法:

int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);

参数说明:

o ParamName: 存放得到的动态内容的参数名称o list of Attributes: 其它属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写o Notfound: 当在返回信息中找不到要找的内容时应该怎么处理o Notfound=error: 当在返回信息中找不到要找的内容时,发出一个错误讯息。这是缺省值。o Notfound=warning: 当在返回信息中找不到要找的内容时,只发出警告,脚本也会继续执行下去不会中断。o LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。o RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。o RelFrameID: 相对于URL而言,欲查找的网页的Frame。此属性质可以是All或是数字,该属性可有可无。o Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。o ORD : 说明第几次出现的左边界子串的匹配项才是需要的内容。该属性可有可无,缺省值是1。如为All,则将所有找到的内容储存起来。o SaveOffset : 当找到匹配项后,从第几个字元开始存储到参数中。该属性不能为负数,缺省值为0。o SaveLen :当找到匹配项后,偏移量之后的几个字元存储到参数中。缺省值是-1,表示一直到结尾的整个字串都存入参数。

要获取返回值,那么有2种方法:

第一种方法是通过 SaveOffset 来获取指定的值,这个方法适用于返回的值或是格式比较固定,不会有什么变动,比如有些接口,返回1,表示已经响应成功,那么可以用这个方法来获取。或是返回来的字段顺序都不变,都可以使用该方法。但是当返回值的顺序有变,而我们要取指定的字段值时,就不适用了,在第二种方法再描述。

第一个接口请求后,服务器返回值:

    {"orderId":"9854578067073400832","message":"创建订单成功","status":100}

因为返回的数据格式比较固定,数据的顺序很少变化,那么可以用如下的函数来获取:

     web_reg_save_param("orderId","LB=","RB=","ORD=1","SaveOffset=1","SaveLen=31",    //获取运行结果里的orderId    "orderId":"9854578067073400832""Search=Body",LAST);

这种方法不是很灵活,很容易报错,当返回值有变动时或是返回值的顺序有变动,必须要重新修改,否则运行还是会报错。用第二种方法,通过取返回值的边界值,达到目的:

     web_reg_save_param("orderId","LB=orderId","RB=message","ORD=1","SaveLen=23","Search=Body",LAST);

会发现"SaveLen"取的值不一样,因为第一种方法取的值是"orderId":"9854578067073400832",第二种方法,取的值是":"9854578067073400832"

这里只需要传的参数修改一下就可以了,如我在用第一种方法时,用如下的参数:

     {"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX",

如果用第二种方法,用如下的参数:

     {"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX","orderId

取得返回值,用如下的数据进行拼接:

      lr_save_string(lr_eval_string("{NewParam}{orderId}}"),"orderId2");

因为代码里面的4接口是业务的一个部分,但在测试接口的时候,可以不用管,所以只是放在代码里面尽可能的模拟业务而已,实际在本代码中,没有什么用处,是5接口创建订单号orderId给第18接口,并作为第18个接口的参数进行请求,完整的代码如下:

Action()
{
/*18接口的参数
{"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX",
{"account":"13900001111","posId":"N9NL10255029","couponMoney":0,"couponInfo":"","payMoney":0.01,"barcode":"130122475934385558","channelId":"WX","orderId5接口的参数
{"account": 13900001111,"payMoney":0.01}

4接口的参数
{"account": 13900001111}
*///18扫描支付接口的前半部分参数char * tmpParam = lr_eval_string("{NewParam}");//5创建订单接口的参数char * tmpParam2 = lr_eval_string("{NewParam_2}");//4获取商户开通支付方式char * tmpParam3 = lr_eval_string("{NewParam_1}");web_set_proxy("10.16.1.151:180");   //设置请求头,没有这个,请求会不认得 web_custom_request该函数的json请求web_add_header("content-type","application/json");lr_save_string(lr_eval_string("{NewParam_1}"),"tmpParam3");web_custom_request("4","URL=http://10.16.1.151:180/getMerchantPayType","Body={tmpParam3}","Method=POST","mode=HTML",LAST);web_add_header("content-type","application/json");
//把5创建订单的参数,获取过来,赋值给tmpParam2lr_save_string(lr_eval_string("{NewParam_2}"),"tmpParam2");//获取5接口返回的参数,指定的参数SaveOffset=31,然后赋值给orderId
/*web_reg_save_param("orderId","LB=","RB=","ORD=1","SaveOffset=1",//获取运行结果里的orderId 45"SaveLen=31","Search=Body",LAST);
*/
//获取5接口返回的参数,指定的参数,然后赋值给orderIdweb_reg_save_param("orderId","LB=orderId","RB=message","ORD=1","SaveLen=23","Search=Body",LAST);//5接口创建订单,向服务器请求    web_custom_request("5","URL=http://10.16.1.151:180/onlineOrder","Body={tmpParam2}","Method=POST","mode=HTML",LAST);
//返回的参数 {"orderId":"9854578277036064768","message":"创建订单成功","status":100}
//获取5接口返回的参数orderId赋值给orderIdlr_save_string(lr_eval_string("{orderId}"),"orderId");//打印获取服务器回复指定的参数lr_output_message(lr_eval_string("{orderId}"));//参数并接,赋值给orderId2,作为18扫描支付接口的参数 会发现这里有2个},参数里面因为少了一个},所以在参数后面补充}lr_save_string(lr_eval_string("{NewParam}{orderId}}"),"orderId2");lr_output_message(lr_eval_string("===========:{orderId2}"));web_add_header("content-type","application/json");//扫描支付接口请求web_custom_request("18","URL=http://10.16.1.151:180/scanPay","Body={orderId2}","Method=POST","mode=HTML",LAST);return 0;
}

转载于:https://www.cnblogs.com/VseYoung/p/loadrunner_5.html

loadrunner socket协议问题归纳(5)相关推荐

  1. 自行控制loadrunner的socket协议性能测试 (转)

    一前言 二任务的提出 三实现方案讨论 四技术要点讲解 如何开始录制一个最简单的收发数据包脚本 写日志文件 一行一行读数据包文件 字符串转换为十六进制数据包 发送自己定义的数据包 接收数据包到自定义缓冲 ...

  2. 【loadrunner】录制socket协议

    今天我们来对Loadrunner下socket协议的录制和录制后的脚本的简单设置 首先我们来简单的认识一下windows socket 协议 Winsock协议是作用于windows与TCP/IP协议 ...

  3. Loadrunner中socket协议十六进制报文参数化方法

    在做tuxedo和socket脚本的过程中,经常会碰到发送的报文是十六进制字符串.而往往我们又需要针对十六进制报文中的某些数据进行参数化.比如pos机交易,银行方面数据交易,几乎使用socket协议. ...

  4. loadrunner测试socket协议程序知识汇总

    本文转载自 http://bbs.51testing.com/thread-462017-1-1.html (出处: 51Testing软件测试论坛 ) 第1节课:为什么选用socket通过方式? 好 ...

  5. Loadrunner windows socket 协议简解

    今天我们来对Loadrunner下socket协议的录制和录制后的脚本的简单设置 首先我们来简单的认识一下windows socket 协议 Winsock协议是作用于windows与TCP/IP协议 ...

  6. Loadrunner socket测试内容总结

    socket简介 这里请大家自行百度.这里测的是基于tcp的长连接socket,简单点说,不同于平时测试的web应用,socket像打电话一样,需要接通-保持通信-断开,且这三个应该是一个完整的过程, ...

  7. socket协议的接口测试方法

    1.loadrunner使用socket协议写C调用底层socket协议数据 2.jmeter添加websocket相关依赖包,可以添加websocket协议的sampler 3.专门的socket协 ...

  8. 网络协议之:socket协议详解之Datagram Socket

    文章目录 简介 什么是Datagram Socket 使用socat来创建UDP服务 使用ss命令来监控Datagram Sockets 使用nc建立和UDP Socket的连接 总结 简介 上一篇文 ...

  9. loadrunner ftp linux,loadrunner ftp协议使用详细步骤

    loadrunner ftp协议使用详细步骤 大家好,我会给大家讲解两种编写方式,手动和录制.^_^ 1.首先要了解loadrunner中几个FTP函数 在loadrunner联机帮助文档的索引中,输 ...

最新文章

  1. CSS,点击去除虚线边框代码
  2. Flash中的“插入关键帧”和“插入空白关键帧”的区别
  3. 小鸭脖大生意——绝味鸭脖背后的故事
  4. 一季度跨越式增长,高灯科技跑出“第二曲线”
  5. javascript中json格式转为字符串
  6. Matlab | MATLAB编辑器:无法使用GBK编码保存文件,请改用UTF-8编码保存文件(问题解决)
  7. 大人的世界啊,全是屁股!
  8. 知方可补不足~CSS中的几个伪元素
  9. Rest Framework
  10. 实战06_SSM整合ActiveMQ支持多种类型消息
  11. pythonos模块怎么设置_Python OS模块如何使用?
  12. python实现简单计算器
  13. 可能最详细的教程,新手如何获取Zcash钱包(ZEC钱包)官方客户端地址的方法
  14. Python基础---如何运行Python程序?(How to Excute a python programe?)
  15. 网络服务器充斥大量信息,使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于什么攻 - 普法考试题库问答...
  16. win8 安装双系统 ubuntu 过程
  17. js监听只读文本框_js设置input文本框只读
  18. CSS(Cascading Style Sheets)
  19. 对于DES的S盒 计算随机变量的偏差
  20. python_day6_面向对象的介绍/构造函数/类变量和实例变量/析构函数/私有属性和私有方法/继承、多继承和继承实例/多态

热门文章

  1. TCP 、UDP各自的优缺点
  2. Java-string字符串
  3. 可能是基于 Hooks 和 Typescript 最好的状态管理工具
  4. MyBatis逆向工程:根据table生成Model、Mapper、Mapper.xml
  5. mac命令行用sublime,vscode,atom打开目录或文件的方法
  6. Arduino教程:MPU6050的数据获取、分析与处理
  7. ABP官方文档翻译 3.1 实体
  8. python windows下的file()
  9. OpenCV 霍夫线检测
  10. 使用Microsoft Visual Studio安装AsmDude插件