失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > LoadRunner中脚本增强技术之关联

LoadRunner中脚本增强技术之关联

时间:2022-01-30 08:49:13

相关推荐

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:该选项是用来忽略跳转页面信息的。如果选中该选项,通过这种重定向技术的页面将不会被关联。

如果觉得《LoadRunner中脚本增强技术之关联》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。