转载:loadrunner中的关联

上一篇 / 下一篇  2008-09-17 14:19:17 / 个人分类:loadrunner

文章出处:http://www.51testing.com/?41972


Loadrunner关联(一)什么时候需要做关联


1.关联的含义

关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。

其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同:

一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值。

2.什么时候需要做关联

要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程。

拿一个登录的过程我们来看一下,过程说明:

客户端发出获得登录页面的请求,

服务器端得到该请求后,返回登录页面,同时动态生成一个Session Id,

当用户输入用户名密码,请求登录时,该Session Id同时被发送到服务器端,

如果该Session Id在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败。


在第一次录制过程中loadrunner把这个值记录了下来,写到了脚本中,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了Session Id,此时客户端发出的请求就是错误的,为了获得这个动态的Session Id我们这里用到了关联。

所以我们得出结论:

当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联。

当然我们在录制脚本时应该对项目进行适当的了解,知道哪些请求需要用到服务器响应的动态值,如果我们不明确那些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析。


Loadrunner关联(二)loadrunner中的自动关联


自动关联包含两种机制:

一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如:自动关联所检测到的关联点不一定真的需要进行关联,这要我们更具实际情况进行判断;有些需要关联的动态数据自动关联无法找到,这是就需要做手动关联。

另一种是loadrunner自带的自动关联规则,在录制脚本时,会根据这些规则自动创建关联。

自动关联的步骤如下:

1.开启自动关联选项

刚才提到的两种关联机制,如果用户想使用loadrunner自带的关联规则创建关联,那么需要在Recording Options>Internet Protocol>Correlation】中启用关联规则,选中“Enable correlation during recording”,当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。也可以在【Recording Options>Internet Protocol>Correlation】中添加关联规则,达到自动关联的目的。

如果需要在回放脚本时,loadrunner自动检测需要关联的部分,那么需要在【Tools>general options>Correlation】中选中“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,当回放玩脚本后,会弹出Scan action for correlation窗口,进行关联点的搜索。

 

2.录制脚本

录制脚本的过程在这里就不多说了。

 

3.回放脚本

如果录制的脚本存在需要做关联的部分,那么在回放脚本时会出现错误。

 

4.系统自动弹出检测关联对话框,或手动启动关联检测对话框

如果选择了Tools>general options>Correlation】中的“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,那么在回放脚本后会自动弹出“Scan action for correlation”窗口,点击“yes”进行自动查找。

如果没有选择上述设置,那么也可以按CTRL+F8启动关联自动搜索。

 

5.查看系统检测出的关联点进行关联设置

如果在录制和回放中存在差异,loadrunner会在“Correlation Results”中列出需要做关联的内容,用鼠标点击一条需要做关联的内容,点击“Create Rule”,系统会显示获得当前数据的规则,点击“yes”,完成规则的创建,同时查看脚本中增加了一个web_reg_save_param函数。

也可以点击Correlate】按钮创建关联,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。

注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。

 

6.回放脚本检查关联的正确性

  创建好关联后,回放脚本检查关联的正确性

Loadrunner关联(三)loadrunner中的手动关联

手动关联的过程大致如下:

第一步:录制脚本,录制二遍。

第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联。

第三步:确定插入关联的位置。51Testing软件测试网g.e/f0BX'l
第四步:在VIEW TREE中使用web_reg_save_param函数手动建立关联
d_J.^8q)~T't74947
第五步:将脚本中有用到关联的数据,用参数代替。

第六步:验证关联的正确性。

 

下面详细介绍:

第一步:

录制测试脚本,录制二遍

这一步就不用多说了,相同的操作,录制两份,分别保存。


第二步:

使用WinDiff工具协助找出需要关联的数据
^9s7Zg1x#E749471.
在第二份脚本中,点选VuGen的【Tools>Compare with Vuser…】,并选择第一份脚本。

J$z NL[749472.
接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。(假如没看到红色字体,请点选【Options>View>Show Inline Differences】)。

查看二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。

注意:lr_thik_time部分的差异可以忽略

找到不同的部分后,复制,然后打开Recording Log或是Generation Log,按Ctrl+F,在查找窗口中粘贴差异部分的内容,点击查找找到后,查看该部分的信息,确认是客户端的请求信息还是服务器回应的信息。

如果出现在$$$$$$ Request Header For Transaction With Id 3 Ended $$$$$$这个部分,那证明是客户端发出的请求,这里是不需要做关联的。

一般做的关联都是出现在****** Response Header For Transaction With Id 7 ************ Response Body For Transaction With Id 7 ******中的部分。

在找到这个信息后,需要记录如下信息:

a.记录这个不同数据之前的内容和之后的内容。

b.记录这个不同数据出现的位置,是Header还是Body。

 

第三步:

确认插入关联的位置

我们在日志中找到了两次脚本的不同点的位置,根据这个位置,我们再确定是在哪个请求之后产生的,也就是说要定位发生不同点的response是由哪个request产生的,找到了这个请求的函数位置,我们就知道要往哪里做关联了。

一般情况下关联函数写到发出请求的函数之前就可以了。

 

第四步:

插入关联函数

在插入关联函数前,我们先介绍关联函数web_reg_save_param

 一个web_reg_save_param函数的例子:

web_reg_save_param ("sessionid",

     "LB=Session_id:",

     "RB=;",

     "Search=Body",

      LAST);

在这里我们只介绍几个常用参数的含义

语法说明:

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

参数说明:

ParamName:存放得到的动态内容的参数名称

list of Attributes:属性,包括:Notfound, LB, RB, RelFrameID, Search, ORD, SaveOffset, Convert, SaveLen。属性值不分大小写

LB( Left Boundary ) :返回信息的左边界字串。该属性必须有,并且区分大小写。

RB( Right Boundary ):返回信息的右边界字串。该属性必须有,并且区分大小写。

Search :返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。

 

那么如何插入该关联函数呢?

1.vugun切换到view tree模式下

2.在左边的列表中,找到在上一步发出请求的函数,点击“右键”

选择“insert before

3.在弹出的“add step”对话框的“find function”中输入“web_reg_save_param”,点击“ok

在“parameter name”中输入,关联函数的名称,这里最好有含义,“sessionid

在“left boundary”中输入,刚才记录下的不同点字符串的左面的几个字符,定义左边界,Session_id:

在“right boundary”中输入,刚才记录下的不同点字符串的右面的几个字符,定义右边界,;

在“search in”中,选择“body

点击“ok

4.回到脚本编辑模式下,查看该函数插入是否正确

在发出请求的函数前应该看到:

web_reg_save_param ("sessionid",

     "LB=Session_id:",

     "RB=;",

     "Search=Body",

     LAST);

 

第五步:

将脚本中有用到关联的数据,用参数代替

 

如发出请求的参数如下,那么将原来服务器返回的动态值使用{ sessionid }来替换:

 web_submit_form("login.php_2",

     "Snapshot=t2.inf",

     ITEMDATA,

     "Name=login", "Value=wangjin", ENDITEM,

     "Name=password", "Value=wangjin", ENDITEM,

       "Name=Session_id","Value={ sessionid }", ENDITEM,

     "Name=Submit", "Value=Login", ENDITEM,

     EXTRARES,

     "URL=/media/images/border_bg_l.gif", ENDITEM,

     "URL=/media/images/header_bg.gif", ENDITEM,

     "URL=/media/images/th.gif", ENDITEM,

     LAST);

 

第六步:

验证关联的正确性

  回放脚本,验证关联的正确性。

TAG: LoadRunner loadrunner

魔力鸟的个人空间 引用 删除 魔力鸟   /   2009-08-03 01:04:55
和我想的一样
good ideas
 

评分:0

我来说两句

我的栏目

日历

« 2024-05-03  
   1234
567891011
12131415161718
19202122232425
262728293031 

数据统计

  • 访问量: 4955
  • 日志数: 7
  • 书签数: 2
  • 建立时间: 2008-09-17
  • 更新时间: 2008-11-25

RSS订阅

Open Toolbar