LoadRunner中脚本增强技术之关联

1.5脚本增强技术之关联
1.5.1 关联原理
关联是用来解决请求之间的依赖关系。
请求之间的依赖关系,如果请求数据是来源于服务器对于请求A的响应,且该数据是动态变化,则称请求B是依赖于请求A的。
关联的原因是在脚本中存在录制的时候,服务器会给一个唯一的认证码来进行操作,当再次回放脚本的时候服务器会给一个全新的认证码,而脚本还是死的,还是拿老的认证码提交,从而导致脚本执行失败。所谓关联,就是要在脚本中添加一定的操作来模拟客户端处理依赖数据,使得脚本从静态变成动态。
关联的本质,从工具层面来说,关联就是要实现两个操作:
•先存,保存服务器返回的动态的数据
•后用,在需要用到动态数据的地方,将录制or抓包所产生的静态数据替换为所保存的动态数据。
我们知道了关联是要把服务器的返回数据进行存储和取值,那这个数据有什么特征呢?首先这个数据一定是服务器返回的值,其次数据在后续的请求中被使用到,最后数据一定是动态变化的。而动态变化又分为两种情况:
•每一次都发生改变。现象:录制or抓包的脚本回放直接出错。
•满足一定的条件发生改变。
提交的数据变化引起的
时间的变化的引起的
现象:在脚本没有改动的情况下,短时间内是成功的,一旦请求数据变更或者时间间隔太长,脚本回放就会失败。
关联的实现方式:
对于LR来说,关联实现方式有三种:
•录制关联:自动关联方式,基本无用
•回放关联:规则是general options-correlation选项中指定。
注意事项:
·该操作只对录制的脚本有效。
·该操作只有当最后一次回放,脚本是出错的状态下才会有效。
手动关联:根据关联的原理、数据特征等,采用对比法、追溯法等方式进行关联处理。
我们这里主要介绍下手动关联
1.5.2手动关联
手动关联时关联应用场景的最有效的手段,接下来我以phpwind论坛登录发帖业务,来讲解如何进行关联业务:登录不同的账号发帖
手动关联的步骤:
第一步:找到出错的请求。
原理:脚本运行没有出错,则不需要考虑关联
理解:什么是出错?
所谓出错并不是指脚本运行要出现error。而是 指脚本运行没有达到预期的功能目的。
并不是所有的出错都要进行关联,出错的时 候首先先要排除的是脚本(请求)本身的问题
主要考虑:请求的格式(Content-Type)
用户数据的准确性
技巧:一般来说,从关联的角度来讲,我们只需要重点关心使用post方法的请求。
使用test1和test2两个账号登录发帖,结果只发了一次贴。

在这里插入图片描述
在这里插入图片描述

我们看一下LR的The result看一下那个请求出错了,这个时候失败的请求已经找到了
在这里插入图片描述

第二步:找到可疑数据
原理:脚本运行出错,在排除服务器的因素意外,都可以认为是请求中所携带的数据不准确导致的。
理解:可疑数据就是指可能导致请求出错的数据,即可能是需要关联的数据
了解:一般来说,请求的数据只会位于以下部分:url地址参数、header、body。在LR中URL地址是Action的数值(来源于form表单),ITEMDATA后面的内容是body,请求头是LR自己处理的。
技巧:过滤可以数据可以从以下几个方面着手
从业务角度出发:问开发
根据键的名称和逻辑常识进行判断
根据数据本身来进行判断。
通常来说,依赖的数据为了防止被暴力破解,往往都具有特征:又长又臭。
在这个请求中有两个数据:
1 verify=76ccf968
2Name=hexie value=568a07bc
在这里插入图片描述

第三步:定位数据的来源
原理:对于依赖的数据而言,必然是从服务器响应回来的。

这就意味着出错的请求中的可疑数据,假如需要关联,则一定能够在服务器的响应中获取到。
理解:服务器响应数据的格式or字段名称和后续请求(出错请求)中提交数据所用的格式和名称并不会保持一致。
了解:LR中有Generation log ,完整的记录了录制脚本过程中所产生的所有请求和响应数据
对于非LR的工具而言,一般没有提供,则需要我们自己借助抓包工具完整的获取一次脚本业务流程的数据。
操作:
点击Generation log的文本框Ctrl+F查找,查找可疑数据(只要数据即可。)再向上查找******,可以找到response的id,根据id去找请求。这个时候我们就把数据定位到了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第四步:创建关联,即要去保存动态数据
原理:服务器返回的动态数据虽然是变化的,但是服务
返回数据的时机、方式都是不会改变的。
保存就是建立在通过不变的字符串来获取变化的关联数据。
操作:切换到tree模式下的recorded snapshot模式,找到第三步定位到的请求。在Response body中查到可疑数据,找到之后直接右键Create Parameter,弹出的选项框选是。
在这里插入图片描述

双击左侧LR自动新增的关联函数,进行必要的修改:
参数名称:建议命名有意义。
如果左右边界中存在乱码,则需要进行如下处理:
·如果左边界中有乱码,则将乱码及乱码左边的字符串去除,保留乱码右边的字符串。
·如果右边界中有乱码,则将乱码及乱码右边的字符串去除,保留乱码左边的字符串。 在这里插入图片描述

函数的讲解放到后面。
第五步:替换。
原理:用所保存的动态数据替换静态数据。
操作:CTRL+H
将可疑数据替换为第四步中的参数调用格式.
一般来说,参数调用格式为: {参数名}
在这里插入图片描述

修改完之后我们再看一下,发帖结果:success成功
在这里插入图片描述

1.5.3关联函数
在LR中,关联函数一般常用的有四个:
web_reg_save_param() 最基本的关联函数,采用的是普通的字符串查找的方法来查找获取数据,通过通配符来实现模糊查找。
web_reg_save_param_ex 增强版的关联函数,采用的是普通的字符串方式,但是允许使用正则表达式。
web_reg_save_param_regexp() 采取正则表达式的关联函数,官方推荐使用
web_reg_save_param_xpath 采取的是xpath查找匹配数据,要求响应的是标准的xml或者xhtml格式。
比较常用的是web_reg_save_param_ex和web_reg
_save_regexp()

关联函数web_reg_save_param_ex详解
在LR中,函数的名称是具有特定的意义,包含大量的信息:web_reg_save_param_ex
web 第一个字段,表明该函数所能够支持的协议or使用场景。
reg 特殊字段,带有该字段的函数,表明是一个注册型的函数,是要求放在请求之前。实际是执行在请求之后。
解释:该函数是对其之后的第一个请求类的函数有效,是等请求得到相应之后,注册型函数才会开始工作。
save_param_ex 表明函数的功能or特性
在这里插入图片描述

•Parameter Name:参数名称,由用户带定义,建议有意义
•Left Boundary:左边界、就是提取数据左边的字符串
•Right Boundry:右边界、就是提取数据右边的字符串
注意:左右边界的读取:一般来说,左右边界要求尽量是静态的、组合是唯一的。
在LR中,左右边界采取的是最小匹配的原则,即非贪婪的原则。什么是非贪婪的原则?假设服务器响应的字符串为:a1ba2ba3ba4b,设置左边界为a,右边界为b。最终匹配到的数据是 1、2、3、4 而不是1ba2ba3ba4这样的字符串

如果是手写函数,则左右边界本身存在双引号,转义符等都需要做转义操作。
左右边界的选项:
Match case :是否区分大小写,默认是区分的(选中再取消)
Binary data :是否识别为十六进制的数据
Regular expression:是否支持正则表达式
•DEFs:没什么用的选项
•Ordinal:又叫ORD属性,该处可以填写的是正整数N或者字符串“all”
•正整数N:则表示将第N次查找到的数据 赋值给参数,默认值为1
•字符串all:则表示将所有查到到的数据以类似于数组的方式存入参数数组,效果为:
ParamName_1=value1,ParamName_2=value2,…,ParamName_N=valueN
与之同时,会自动生成一个隐藏参数叫:ParamName_count=N用来存储所保存的值的个数。
•Save offset:偏移量,表示LR会从左边界开始向右偏移指定数量的字符(不管是字母、数字、符号、中文一位就是一个字符),然后开始保存数据。
示例:
假设服务器响应的字符串为:a1ba2ba3ba4b
设置:LB=a,RB=b,ParameName=test
则test=“1”
假设服务器响应的字符串为:a1ba2ba3ba4b
设置:LB=a,RB=b,ParameName=test,ordinal=3
则test=“3”
假设服务器响应的字符串为:a1ba2ba3ba4b
设置:LB=a,RB=b,ParameName=test,ordinal=all
则最终得到的参数为:
test_1=“1”,test_2=“2”,test_3=“3”,test_4=“4”,test_count=4
一般来说,当ord=all的时候,则意味着我们对于数据的使用通常会存在下列两种诉求:
•随机:
在LR中,一般会结合函数lr_paramarr_random()来实现随机值的获取。
核心代码:
lr_save_string(lr_paramarr_random(“关联函数所定义的参数名”),“输出参数名称”);
•遍历:
在LR中,一般会结合函数lr_paramarr_idx()来实现。
核心代码:
int i,count;//定义变量在函数的开头

关联函数;
请求A;

count=atoi(lr_eval_string("{关联函数所定义的参数名_count}"));//获取参数的个数
for(i=1;i<=count;i++){
lr_save_string(lr_paramarr_idx(“关联函数所定义的参数名”,i),“输出参数名称”);//传值
请求B("{输出参数名称}");
}
•Save Length:长度,是用来指定最终存入参数的值得长度,是左边界+偏移量开始计算的。
实例:假设服务器返回的数据是“welcome to testingedu”
设置1:
LB=welcome,RB=testingedu,ParameterName=pa
则最终pa=“ to ”
设置2:
LB=welcome,RB=testingedu,ParameterName=pa,Saveoffset=1,Savelength=2
则最终pa=“to”
•Warm if text was not found (Default is Error)
如果关联结果不存在则提示错误
•Filters:基本上不用,效果微乎其微。
在这里插入图片描述

项,Body,Headers、Cookies、All。
•Request URL:这里提供了针对URL地址的过滤方式来减少关联的范围
•Ignore Redirection:该选项是用来忽略跳转页面信息的。如果选中该选项,通过这种重定向技术的页面将不会被关联。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谷雨飞鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值