loadrunner的关联

摘自:http://www.cnblogs.com/fnng/archive/2013/03/07/2945303.html

 注意:关联的函数要放在最前面

手动关联                                                                                                   

  如果脚本很长,那么我们想找到一个脚本中哪些地方是需要关联的并不是一件容易的事情。这时,我们可以通过脚本对比的方法找出需要关联的内容。

1、录制第一份脚本,保存为“关联a” 。

2、录制第二份脚本(操作步骤与第一次保持一致),调用loadrunner自带的WinDiff

(Tools-->campare with users ),选择“关联a”

通过WinDiff 对脚本的对比,我们很容易来判断需要做关联的内容。

 

3、使用web_reg_save_param函数建立关联脚本

复制代码
web_reg_save_param(
        "ParamName=CorrelationParameter_1",
        "LB=userSession Value=",
        "RB=>",
        "Ordinal=1",
        "RElFrameId=1.2.1",
        "Scope=Body",
        LAST);
复制代码

 

int web_reg_save_param( const char *ParamName, <List of Attributes>, LAST );  

第一部分(const char *ParamName):参数名,用双引号括起来,逗号分开

第二部分(<List of Attributes>):包括LB、RB、RelFameID、Ord、Search、SaveOffiset、SaveLen等。

第三部分(LAST ):结束标志。

通过按F1 键打开帮助文档,搜索此函数,查看具体用法。

 

4、LR11 还提供了另一种手动关联方式。

   选择Tree 视图模式,点击HTTP View 下查看Response Body 中,打到需要关联的内容,右键在下拉列表中选择“Create Coorelation”

 

 

 

预关联                                                                                                      

 

   预关联也可以叫做“ 一边录制一边关联”。为什么录制某此系统,会得到一些自动关联函数呢?这就是系统默认提供自动关联设置。如果我们预先知道需要关联的内容时。可以预先设置好要关联的内容,这样在脚本录制的过程中自动对要关联的内容进行关联。

在录制脚本时打开Recording Options 设置窗口

(本文以loadrunner 自带WebTours 的关联为例)

1、点击一New Application 按钮,新建一个叫做WebTours 的应用

2、选择这个规则,点击 New Rule 按钮一个规则。

3、然后做如下设置:

 

 

关联函数web_reg_save_param_ex                                      

 

 前面的例子用到web_reg_save_param 关联函数,web_reg_save_param_ex 可能也是很常用的一个关联函数。我们碰到函数就胆怯,这个不知道暗具体怎么使用它。

菜单栏Insert --- new step 打开add step 窗口

 

搜索web_reg_save_param_ex 函数,选中函数,点击OK ,弹出函数的设置窗口:

 

Prameter name: 此设置存放参数的名称。

Left boundary: 此处设置左边界,这里是用来填写关联对于数据处理的左匹配内容规则。

  Match case :  默认情况下边界是检查Match case ,也就是检查大小写的。

     Binary data : 如果要关联的内容是非ASCII 字符的,需要选择此项

     Regular expression : 在LR11 中关联提供了使用正则表达式的功能,但是LR11 Patch3 中取消web_reg_save_param_ex 函数对此功能的设置。

Reight boundary: 此处设置右边界。

DFEs : 在录制选项和回放中我们提供了DFE的功能,在关联这里也支持DFE的数据处理。 (DFE等后面再解释,或你自行查资料)

Ordinal :  这个关键字在很多函数里面都有应用,在这里可以填写任意一个整数,也可以填All 。如果填写数字,那么说明从返回的记录中取出对应顺序的值,而填写All 的话将会返回所有内容。

Save Offset : 设置关联的内容偏移量,从第几位开始进行关联操作。

Save Length : 关联出来的内容所需要保存的长度。

Warm if text was not found (Default is Error) : 对于关联的对象不存在的处理。

Filters : 下面的选项都是帮助关联返回限定的,通过这些设置可以进一步减少返回的范围。

 

 

 

 

众所周知,在LoadRunner中,关联是一个很重要的动作,大多数的脚本在录制完成后并不能直接回放,需要通过一定的关联才能成功回放。关联的技巧有很多,这里介绍的就是其中之一,以下用一个实际的例子来说明。
    脚本的背景如下:
    web_submit_data("classiLoanMaterial.jsf_2")(web_submit_data函数的其它部分省略,下同。)返回的页面上可能存在多条记录,可能一条,可能两条,也可能三条,等等。我们需要将这些记录逐个选中进行操作。注意:不是全部选中,而是要逐条记录进行操作。同时,每一条记录各有一个编号,这是需要进行关联的值。在下面的操作中web_url("directAdjust.jsf",
        "URL=http://128.64.96.105:1158/clpmapp/bizprocess/loanservice/creditassetsriskclassi/
classiadjuststepbystep/directAdjust.jsf?approveFormNum=123456")需要使用到该编号,即黑体字部分的值。面对这样的目的,很自然地,我们会想到用一个循环语句来实现。首先,在classiLoanMaterial.jsf页面之前加一个关联如下:
    web_reg_save_param("sor","LB=sor\" value=\"","RB=\"","Ord=ALL",LAST);将Ord参数值设定为ALL,则关联函数将自动把符合条件的关联值保存到参数数组里。在本例中,假设关联值返回三条记录,则LR分别将值保存到sor_1,sor_2,sor_3中,同时,LR还将自动创建一个sor_count变量来保存总的记录数,在这里sor_count值等于3。利用这些信息,我们就可以很方便地在循环语句中实现我们的目的了。步骤如下:
1、声明各变量:
    int count;
    int i;
    char sor[50];
    char sorvalue[50];
2、将返回的记录数保存到count变量里:
count=atoi(lr_eval_string("{sor_count}"));
3、使用for循环:
for(i=1;i<=count;i++)
{
    sprintf(sor,"{sor_%d}",i); //分别将各个sor值保存到sor字符串中

    sprintf(sorvalue,"%s",lr_eval_string(sor));//通过lr_eval_string函数将字符串赋给sorvalue变量

}
4、在循环体中使用关联值替换相关值:
web_url("directAdjust.jsf",
        "URL=http://128.64.96.105:1158/clpmapp/bizprocess/loanservice/creditassetsriskclassi/
classiadjuststepbystep/directAdjust.jsf?approveFormNum={sorvalue}")
 
    一切看起来似乎顺理成章,然而如果按照以上的步骤做下来,将会很遗憾地发现:我们定义的{sorvalue}值根本就不被LR认可并接受,于是它将无情地给我们抛出一个错误,说该值是非法的。怎么办?难道我们前面做的一切都白费了吗?
    有句老话说得好:天无绝人之路。聪明而又善良的LR开发团队已经为我们考虑到了这个问题,给我们预备了一个很有用的函数:lr_save_string,它可以帮助我们解决这个问题。于是我们祭出lr_save_string这道最后的杀手锏:
5、在使用关联值之前进行字符串格式转换:
    lr_save_string(sorvalue,"sorvalue1");
    
web_url("directAdjust.jsf",
        "URL=http://128.64.96.105:1158/clpmapp/bizprocess/loanservice/creditassetsriskclassi/
classiadjuststepbystep/directAdjust.jsf?approveFormNum={sorvalue1}")

需要特别注意lr_save_string的用法,它是参数值在前(sorvalue),参数名在后("sorvalue1"),这和一般的习惯用法正好反过来(真是好奇怪!)。而且"sorvalue1"这个参数名称不需要事先声明,它只是一个字符串而已(这也比较奇怪!^_^)。

到此,我们总算大功告成!脚本回放成功,并且正确达到了预期的效果!打完收工!

总结:C的变量不能直接在LR的API里调用,所以必须用lr_save_string进行转换。

最后顺便说一下,lr_save_string这个函数真的很好用,这个例子中提到的方法也适用于另外一些情况,比如说有时候,通过关联函数出来的值我们不能直接使用,还需要做一些特殊的处理时,那么我们可以把关联得到的值取出来,赋给一个字符串,对其进行一番修剪加工后,再用lr_save_string,就可以使用它来替代需要关联的值了。

 

复制代码

转载于:https://www.cnblogs.com/ytab/p/3772603.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值