LR(三)Vugen中脚本增强-关联
关联
header、body在generation log中,所有数据都是按时间的先后,分块排列的。块是以**
方法一
-
在LR中,视图模式切换到tree模式。
-
tree模式下,切换到recording snaphost和http view模式下。 找到需要设置关联的url、request、response 找到需要关联的值后,在选中的状态下,右键选择create parameter。会自动在左侧自动添加的关联函数,双击关联函数,修改参数引用
如果左右边界里面有乱码,则建议做如下处理: 第一:按照之前所讲的乱码处理原则,将乱码变为对应的中文即可。 第二:不管乱码的根源,直接删除,删除规则如下: 如果左边界中出现乱码,则将乱码及乱码左侧的所有字符串都删除,只保留乱码右侧的字符串。 如果右边界中出现乱码,则将乱码及乱码右侧的所有字符串都删除,只保留乱码左侧的字符串。
-
替换:切换到script模式,使用动态的参数来替换脚本中需要关联的数据。 CTRL+H,实现全文替换。
方法二
在script模式下,直接在需要关联的请求后面添加函数web_reg_save_param_ex(右键->insert->new step->web_reg_save_param_ex),选择左右边界,设置参数引用,最后替换脚本中需要关联的数据。
常用函数
在LR中,常用的关联函数有以下四个:
-
web_reg_save_param 通过字符串查找的方式进行定位查找、获取数据。
-
web_reg_save_param_ex 通过字符串查找的方式进行定位查找、获取数据。
-
web_reg_save_param_regexp 通过正则表达式查找的方式进行定位查找、获取数据。(需要打补丁)
-
web_reg_save_param_xpath 通过xpath表达式查找的方式进行定位查找、获取数据。
函数名称的规则 在LR中,函数的名称本身就包含大量信息。
-
web 第一个字段往往表示该函数可以在何种类型协议的脚本中使用。
-
reg 该字段表明函数是一个注册型的函数。
所谓注册型函数要求放在请求之前,是只对其后的第一个请求函数有效的(在请求之后工作)。
-
save_param_ex 一般就表明函数的功能
web_reg_save_param_ex函数详解
-
在LR中,左右边界去匹配数据的时候遵循的是最小匹配(非贪婪)原则。 比如说服务器返回:a1ba2ba3ba4b 使用LB=a,RB=b,则默认匹配到的将是:1、2、3、4这样的数据,而不会是1ba2这样的数据。
-
选择左右边界组合尽量唯一
-
如果左右边界中出现了字符: " 和 \ ,则需要对之进行转义操作
-
Offset:偏转、位移,是用来设置相对于左边界的位移量,单位是字符。表示从左边界开始,向右位移N个字符,开始提取数据保存。
-
Length:长度,是用来设置最终保存到参数中的字符串的长度。 通常来说,该选项有值,则右边界失效。不建议和右边界同时使用。
·示例:假设服务器响应的字符串是:"welcome to testingedu" 设置LB=welcome、RB=testingedu,则最终存入参数的是:" to "
如果设置Offset=1,Length=2,则最终存入参数的是:"to"
-
Ordinal:该处可以填写的是正整数N和字符串all,默认值是1
-
正整数N:则表示将第N次匹配到数据存入参数,默认是将第一次匹配到的数据存入参数。
-
all:则表示将所有匹配到的数据以类似于数组的方式存入参数数组。 效果为:ParamName_1=value1,ParamName_2=value2,......,ParamName_N=valueN,与之同时,会自动生成一个参数叫:ParamName_count=N,用来保存参数的个数
当Ordinal=all时,就意味着我们需要对数据进行随机或者遍历的操作。
-
-
随机:在LR中,提供了函数lr_paramarr_random("ParamName")函数来进行处理。使用随机函数的值作为参数代码: lr_save_string(lr_paramarr_random("ParamName"),"finalParamName");
-
遍历:在LR中,提供了函数lr_paramarr_idx("ParamName",int index)函数来进行处理,遍历代码:
//变量定义在所有方法之前 int i,count; //其他业务请求方法 web_url().... //获取参数的个数值N,atoi()函数转成String(charToInt) count = atoi(lr_eval_string("{ParamName_count}")); //遍历参数数组,循环请求 for(i=1;i<=count;i++){ //遍历到的参数值设置为参数 lr_save_string(lr_paramarr_idx("ParamName",i),"finalParamName"); //业务请求 web_url().... 业务请求(...{finalParamName}...); }