Loadrunner C/S关联函数(LSP)AND(LSSS)使用-案例
LSP就是lrs_save_param()函数
LSSS就是lrs_save_searched_string()函数
一下我们用一个例子去说明他们的使用.
C/S机制和B/S不一样,特别是有一个data.ws
里面的数据就是一些向服务端发的数据包和服务端返回的数据包
以下就是我录制完以后的data.ws内容
;WSRData 2 1
send buf0 55
"4##SELECT agent_name FROM AGENTS ORDER BY agent_name###"
recv buf1 55
"0##Alex#Amanda#Debby#Julia#Mary#Robert#Sharon#Suzan###"
"\x00"
send buf2 68
"2##1## SELECT DISTINCT departure FROM Flights ORDER BY departure ###"
recv buf3 56
"0##Denver#Los Angeles#Portland#San Francisco#Seattle###"
"\x00"
send buf4 298
"2##0##SELECT departure, flight_number, departure_initials, day_of_week, ar"
"rival_initials, arrival, departure_time, arrival_time, airlines, seats_ava"
"ilable, ticket_price, mileage FROM Flights WHERE arrival = 'Portland' A"
"ND departure = 'Denver' AND day_of_week = 'Friday'ORDER BY flight_number #"
"##"
recv buf5 128
"0##5787;250;5587;03:11 PM;DEN;Friday;POR;04:52 PM;NW;164;Denver#6242;250;6"
"042;08:00 AM;DEN;Friday;POR;11:00 AM;AA;177;Denver###"
"\x00"
send buf6 82
"11##UPDATE Counters SET counter_value=counter_value+1 WHERE table_name='OR"
"DERS'###"
recv buf7 8
"0##1###"
"\x00"
send buf8 67
"12##SELECT counter_value FROM Counters WHERE table_name='ORDERS'###"
recv buf9 10
"0##101###"
"\x00"
send buf10 72
"12##SELECT customer_no FROM Customers WHERE customer_name='<Customer>'###"
recv buf11 9
"0##-1###"
"\x00"
send buf12 85
"11##UPDATE Counters SET counter_value=counter_value+1 WHERE table_name='CU"
"STOMERS'###"
recv buf13 8
"0##1###"
"\x00"
send buf14 70
"12##SELECT counter_value FROM Counters WHERE table_name='CUSTOMERS'###"
recv buf15 9
"0##31###"
"\x00"
send buf16 81
"11##INSERT INTO Customers (customer_name,customer_no) VALUES ('<Customer>',"
" <userid>)###"
recv buf17 8
"0##1###"
"\x00"
send buf18 58
"12##SELECT agent_no FROM Agents WHERE agent_name='<agent>'###"
recv buf19 8
"0##4###"
"\x00"
send buf20 195
"11##INSERT INTO Orders (order_number,agent_no,customer_no,flight_number,de"
"parture_date,tickets_ordered,class,send_signature_with_order) VALUES (<orderno>,"
" <agentid>, <userid>, 6242, {d '2011-11-11'}, 1, '3', 'N')###"
recv buf21 8
"0##1###"
"\x00"
send buf22 13
"11##COMMIT###"
recv buf23 8
"0##0###"
"\x00"
-1
下面就是我们的ACTION里面的脚本了
#include "lrs.h"
Action()
{
int random;
lrs_create_socket("socket0", "TCP", "RemoteHost=172.16.2.9:3456", LrsLastArg);
lrs_send("socket0", "buf0", LrsLastArg); //返回agent name
lrs_receive("socket0", "buf1", LrsLastArg);
srand(time(NULL));
random=rand() % 8 + 2;
lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
lr_think_time(12);
lrs_send("socket0", "buf2", LrsLastArg); //返回航班起始地和目的地
lrs_receive("socket0", "buf3", LrsLastArg);
lr_think_time(13);
lrs_send("socket0", "buf4", LrsLastArg); //查询航班信息
lrs_receive("socket0", "buf5", LrsLastArg);
lr_think_time(18);
lrs_send("socket0", "buf6", LrsLastArg); //生成订单号
lrs_receive("socket0", "buf7", LrsLastArg);
lrs_send("socket0", "buf8", LrsLastArg); //返回订单号码
lrs_receive("socket0", "buf9", LrsLastArg);
lrs_save_param("socket0", NULL, "orderno", 3, 3);//利用关联返回订单号
lrs_send("socket0", "buf10", LrsLastArg); //查找是否是新用户,新用户返回-1,否则返回客户编号
lrs_receive("socket0", "buf11", LrsLastArg);
lrs_save_param("socket0", NULL, "userid", 3, 2);
if (strcmp(lr_eval_string("<userid>"),"-1")==0)
{
lrs_send("socket0", "buf12", LrsLastArg);//生成客户编号
lrs_receive("socket0", "buf13", LrsLastArg);
lrs_send("socket0", "buf14", LrsLastArg);//返回客户编号
lrs_receive("socket0", "buf15", LrsLastArg);
lrs_save_param("socket0", NULL, "userid", 3, 2);
lrs_send("socket0", "buf16", LrsLastArg);//插入客户记录
lrs_receive("socket0", "buf17", LrsLastArg);
};
lrs_send("socket0", "buf18", LrsLastArg); //返回agent id
lrs_receive("socket0", "buf19", LrsLastArg);
lrs_save_param("socket0", NULL, "agentid", 3, 1);
lrs_send("socket0", "buf20", LrsLastArg); //插入订单记录
lrs_receive("socket0", "buf21", LrsLastArg);
lrs_send("socket0", "buf22", LrsLastArg); //提交
lrs_receive("socket0", "buf23", LrsLastArg);
lr_think_time(7);
return 0;
}
srand(time(NULL));
random=rand() % 8 + 2;
lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
我们从这段代码开始分析。
srand(time(NULL));
random=rand() % 9 + 2;
这个随机数的作用是为了
lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
函数从
recv buf1 55
"0##Alex#Amanda#Debby#Julia#Mary#Robert#Sharon#Suzan###"
"\x00"
中随机获得一个关联数据,为什么是数据说的范围是2-9呢,细看一下
##Alex#Amanda#Debby#Julia#Mary#Robert#Sharon#Suzan###
就知道以左边界和右边界为#的是有11对D,不过只有第二开始到第九个才是对我们有用的。
所以我们这样取值。从上面我们也可以看出WINSOCKET协议里面使用的关联和HTTP/HTML协议里面的关联函数是有区别的,区别是http的协议里面关联函数的位置一定要在打开的页面的前面,在Winsocket里面是在后面。
所以执行完以下脚本
srand(time(NULL));
random=rand() % 8 + 2;
lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
agent就会随机得到Alex、Amanda、Debby、Julia、Mary、Robert、Sharon、Suzan其中的一个。
我再来分析
lrs_save_param("socket0", NULL, "orderno", 3, 3);
这段代码是data.ws包里面提取所以要的数据
recv buf9 10
"0##101###"
"\x00"
从以下的范例
lrs_save_param( char *s_desc,char *buf_desc, char *param_name, intoffset, intparam_len);
可以看出
lrs_save_param("socket0", NULL, "orderno", 3, 3);
是从"0##101###"的第3位开始取值,取3位,所以
Orderon=101
再来说一说这两个函数的一个大家不太了解的地方,然后就结束本章。
lrs_save_searched_string("socket0", NULL, "agent", "LB=#", "RB=#", random,0,-1);
lrs_save_param("socket0", NULL, "orderno", 3, 3);
其中我们都发现有一个NULL,NULL的作用就是在刚从服务端里面的数据中取值,
lrs_send("socket0", "buf8", LrsLastArg); //返回订单号码
lrs_receive("socket0", "buf9", LrsLastArg);
lrs_save_param("socket0", NULL, "orderno", 3, 3);
如果写NULL,我们要从buf9中取值的话,关联函数就得在
lrs_receive("socket0", "buf9", LrsLastArg);
的后面
如果
lrs_receive("socket0", "buf10", LrsLastArg);
lrs_save_param("socket0", NULL, "orderno", 3, 3);
就是在duf10中取值。
还有一种情况如果在
lrs_receive("socket0", "buf10", LrsLastArg);
后面取duf9的值就必须这么写
lrs_save_param("socket0","buf9", "orderno", 3, 3);
Loadrunner C/S关联函数(LSP)AND(LSSS)使用-案例的更多相关文章
- loadrunner 脚本优化-关联函数web_reg_save_param()函数详解
脚本优化-关联函数web_reg_save_param()函数详解 by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...
- Jmeter调试脚本之关联
前言: Jmeter关联和loadrunner关联的区别: 1.在loadrunner中,关联函数是写在要获取变量值的页面的前面,而在就Jmeter中关联函数是要写在获取变量函数值的页面的后面 2.在 ...
- Jmeter 后置处理器
1.JSON Extractor Json extractor 后置处理器用在返回格式为 Json 的 HTTP 请求中,用来获取返回的 Json 中的某个值.并保存成变量供后面的请求进行调用或断言等 ...
- LoadRunner关联函数的脚本实例--如何操作关联参数
LoadRunner关联函数的脚本实例--如何操作关联参数 这几天一直在学习LoadRunner的VuGen编程,今天想对关联函数web_reg_save_param做详细的试验和研究: ~f6p q ...
- loadrunner提高篇-插入检查点与关联函数
插入检查点 靠LR自动生成的脚本是不够的,很难达到业务要求,因此需要对录制完的脚本进行完善,使其能达到业务模拟的要求 ,这样尽可能地使虚拟用户模拟时更接近用户的实际使用. 在进行压力测试时,经常会 ...
- loadrunner 关联函数web_reg_save_param
当我们每次访问网站都需要提交从服务器获取的动态文本时就会需要用到关联函数,就好像每次乘坐火车票我们都需要用最新的火车票,如果用旧车票就不能做火车,如果我们采用了录制时的旧动态码如usersession ...
- Loadrunner中socket协议中的三个关联函数
这3个函数其实都可以动态获取运行中收到的数据包中的数据,只要跟在要获取的收取数据包脚本后面即可.其中:lrs_save_searched_string和lrs_save_param如果buf_desc ...
- 接口测试之基于LoadRunner的一个简单示例
这几天一直在捣鼓接口测试,以下总结一下: 1.什么是接口测试:接口是指系统模块与模块之间或者系统与系统之间进行交互,一般我们用的多的是HTTP协议的接口.WebService协议的接口.还有RPC(R ...
- loadrunner 的Administration Page页面设置
工作中用到Loadrunner不是很多,能够简单用用,深入的知识还得靠自己空余时自学.对于loadrunner 的Administration Page页面设置,我的理解是给自己设置各种障碍,然后一个 ...
随机推荐
- 用js来实现那些数据结构04(栈01-栈的实现)
其实说到底,在js中栈更像是一种变种的数组,只是没有数组那么多的方法,也没有数组那么灵活.但是栈和队列这两种数据结构比数组更加的高效和可控.而在js中要想模拟栈,依据的主要形式也是数组. 从这篇文章开 ...
- R2 day2
简单写一下吧 emmmm,来晚了1h,没赶上,所以没交.......(捂脸 T1 开始读错题了诶 开烤1.2h后 发现是个傻逼题.... 排序一下,维护前缀最左,右端点 随机数据我跑的比他们都慢... ...
- 3451: Tyvj1953 Normal 点分治 FFT
国际惯例的题面:代价理解为重心和每个点这个点对的代价.根据期望的线性性,我们枚举每个点,计算会产生的ij点对的代价即可.那么,i到j的链上,i必须是第一个被选择的点.对于i来说,就是1/dis(i,j ...
- bootstrap中的行和列布局
<!doctype html><html > <head> <meta charset="utf-8"> <link rel= ...
- IBM Thread and Monitor Dump Analyzer for Java解决生产环境中的性能问题
这个工具的使用和 HeapAnalyzer 一样,非常容易,同样提供了详细的 readme 文档,这里也简单举例如下: #/usr/java50/bin/java -Xmx1000m -jar jca ...
- 【docker】docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志
如题: docker部署spring boot服务,但是docker logs查看容器输出控制台日志,没有日志打印,日志未打印,docker logs不打印容器日志 场景再现: docker部署并启动 ...
- 修改Unity中Lua文件的默认打开程序
项目中引用了XLua,而Lua文件又是以txt文件结尾的,当修改系统的扩展脚本编辑器为vs后双击lua文件(xx.txt)默认也使用vs打开了,无提示的黑白文本编辑 昨办? -. 后来看到网上有写Un ...
- Kubernetes基础:编排调度的那些Controllers
0. 概述 Kubernetes提供了很多Controller资源来管理.调度Pod,包括Replication Controller.ReplicaSet.Deployments.StatefulS ...
- Java全栈程序员之01:做个Linux下的程序猿
Windows10正在成为史上口碑最差的Windows系统 (图侵删) 我曾经花了数次1小时去寻找解决方案去关闭自动更新,包括停掉服务.修改注册表等等.但是都没有成功. 微软自身是知道这个问题的,但就 ...
- 《学习opencv》笔记——矩阵和图像操作——cvAnd、cvAndS、cvAvg and cvAvgSdv
矩阵和图像的操作 (1)cvAnd函数 其结构 void cvAnd( //将src1和src2按像素点取"位与运算" const CvArr* src1,//第一个矩阵 cons ...