loadrunner socket协议问题归纳(5)
获取服务器的返回值,可以用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)相关推荐
- 自行控制loadrunner的socket协议性能测试 (转)
一前言 二任务的提出 三实现方案讨论 四技术要点讲解 如何开始录制一个最简单的收发数据包脚本 写日志文件 一行一行读数据包文件 字符串转换为十六进制数据包 发送自己定义的数据包 接收数据包到自定义缓冲 ...
- 【loadrunner】录制socket协议
今天我们来对Loadrunner下socket协议的录制和录制后的脚本的简单设置 首先我们来简单的认识一下windows socket 协议 Winsock协议是作用于windows与TCP/IP协议 ...
- Loadrunner中socket协议十六进制报文参数化方法
在做tuxedo和socket脚本的过程中,经常会碰到发送的报文是十六进制字符串.而往往我们又需要针对十六进制报文中的某些数据进行参数化.比如pos机交易,银行方面数据交易,几乎使用socket协议. ...
- loadrunner测试socket协议程序知识汇总
本文转载自 http://bbs.51testing.com/thread-462017-1-1.html (出处: 51Testing软件测试论坛 ) 第1节课:为什么选用socket通过方式? 好 ...
- Loadrunner windows socket 协议简解
今天我们来对Loadrunner下socket协议的录制和录制后的脚本的简单设置 首先我们来简单的认识一下windows socket 协议 Winsock协议是作用于windows与TCP/IP协议 ...
- Loadrunner socket测试内容总结
socket简介 这里请大家自行百度.这里测的是基于tcp的长连接socket,简单点说,不同于平时测试的web应用,socket像打电话一样,需要接通-保持通信-断开,且这三个应该是一个完整的过程, ...
- socket协议的接口测试方法
1.loadrunner使用socket协议写C调用底层socket协议数据 2.jmeter添加websocket相关依赖包,可以添加websocket协议的sampler 3.专门的socket协 ...
- 网络协议之:socket协议详解之Datagram Socket
文章目录 简介 什么是Datagram Socket 使用socat来创建UDP服务 使用ss命令来监控Datagram Sockets 使用nc建立和UDP Socket的连接 总结 简介 上一篇文 ...
- loadrunner ftp linux,loadrunner ftp协议使用详细步骤
loadrunner ftp协议使用详细步骤 大家好,我会给大家讲解两种编写方式,手动和录制.^_^ 1.首先要了解loadrunner中几个FTP函数 在loadrunner联机帮助文档的索引中,输 ...
最新文章
- CSS,点击去除虚线边框代码
- Flash中的“插入关键帧”和“插入空白关键帧”的区别
- 小鸭脖大生意——绝味鸭脖背后的故事
- 一季度跨越式增长,高灯科技跑出“第二曲线”
- javascript中json格式转为字符串
- Matlab | MATLAB编辑器:无法使用GBK编码保存文件,请改用UTF-8编码保存文件(问题解决)
- 大人的世界啊,全是屁股!
- 知方可补不足~CSS中的几个伪元素
- Rest Framework
- 实战06_SSM整合ActiveMQ支持多种类型消息
- pythonos模块怎么设置_Python OS模块如何使用?
- python实现简单计算器
- 可能最详细的教程,新手如何获取Zcash钱包(ZEC钱包)官方客户端地址的方法
- Python基础---如何运行Python程序?(How to Excute a python programe?)
- 网络服务器充斥大量信息,使网络服务器中充斥着大量要求回复的信息,消耗带宽,导致网络或系统停止正常服务,这属于什么攻 - 普法考试题库问答...
- win8 安装双系统 ubuntu 过程
- js监听只读文本框_js设置input文本框只读
- CSS(Cascading Style Sheets)
- 对于DES的S盒 计算随机变量的偏差
- python_day6_面向对象的介绍/构造函数/类变量和实例变量/析构函数/私有属性和私有方法/继承、多继承和继承实例/多态
热门文章
- TCP 、UDP各自的优缺点
- Java-string字符串
- 可能是基于 Hooks 和 Typescript 最好的状态管理工具
- MyBatis逆向工程:根据table生成Model、Mapper、Mapper.xml
- mac命令行用sublime,vscode,atom打开目录或文件的方法
- Arduino教程:MPU6050的数据获取、分析与处理
- ABP官方文档翻译 3.1 实体
- python windows下的file()
- OpenCV 霍夫线检测
- 使用Microsoft Visual Studio安装AsmDude插件