LR(三)Vugen中脚本增强-关联

关联

header、body在generation log中,所有数据都是按时间的先后,分块排列的。块是以**开头,以$$$$$$结尾的

方法一

  • 在LR中,视图模式切换到tree模式

  • tree模式下,切换到recording snaphosthttp 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}...);

}
原文地址:https://www.cnblogs.com/yjh1995/p/13514835.html