LoadRunner 如何设置关联

关于Loadrunner关联
一、什么时候需要关联
1.关联的含义
关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。
其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同
一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值
2.什么时候需要做关联
要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程
过程说明:
客户端发出获得登录页面的请求
服务器端得到该请求后,返回登录页面,同时动态生成一个Session Id
当用户输入用户名密码,请求登录时,该Session Id同时被发送到服务器端
如果该Session Id在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败
在第一次录制过程中loadrunner把这个值记录了下来,写到了脚本中,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了Session Id,此时客户端发出的请求就是错误的,为了获得这个动态的Session Id我们这里用到了关联。
所以我们得出结论:
当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联
当然我们在录制脚本时应该对测试的项目进行适当的了解,知道哪些请求需要用到服务器响应的动态值,如果我们不明确那些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析

二、自动关联 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”,当回放玩脚本后,会弹出Scanactionfor 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.回放脚本检查关联的正确性
创建好关联后,回放脚本检查关联的正确性

三、手动关联
 手动关联的过程大致如下:
  第一步:录制测试脚本,录制二遍
  第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联
  第三步:确定插入关联的位置
  第四步:在VIEW TREE中使用web_reg_save_param函数手动建立关联
  第五步:将脚本中有用到关联的数据,用参数代替
  第六步:验证关联的正确性
  下面详细介绍:
  第一步:录制测试脚本,录制二遍
  这一步就不用多说了,相同的操作,录制两份,分别保存
  第二步:使用WinDiff工具协助找出需要关联的数据
  1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
  2. 接着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);
  第六步:验证关联的正确性
  回放脚本,验证关联的正确性。
  OK!!!
  大功告成

时间: 2024-10-12 06:16:47

LoadRunner 如何设置关联的相关文章

Loadrunner脚本自动关联和手动关联

关于Loadrunner关联一.什么时候需要关联 1.关联的含义        关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联.        其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同        一般的参数化的参数来源于一个文件.一个定义的table.通过sql写

LoadRunner下设置监控Windows系统资源

一般在客户端通过LoadRunner对服务器进行压力测试,都需要实时监控服务器端的系统资源. 本篇主要简单介绍一下如何设置在LoadRunner的Controller中配置监控Windows Resources,其实也可以直接在远程连接服务器端在上面开启任务管理器或者在控制面板中找到性能计数器来监控也可以,但是为了在LR进行施压过程中更便捷,我们还是要学会这个基本的配置.关于此处的配置,需要针对不同的服务器操作系统进行不同的设置,但基本思路相同.本篇以Windows系统为例,具体配置如下: 1.

LoadRunner缓存设置引发的问题

问题现象: 在使用LoadRunner对起始页做压力测试时,遇到一个大家都容易碰到的问题,即没有设置脚本运行时清除浏览器的缓存,导致虚拟用户上去了但是Http请求却没有发出去. 具体现象是这样: 1. 用lr录好请求页面的脚本,启动controller连接agent对服务器打压力. 2. 每1分钟增加100个虚拟用户,当达到2000个时持续5分钟. 3. 执行过程中,虽然虚拟用户按照计划在不断上涨,但是apache的Log中的http每分钟请求只有100个.按照预期,log中的http请求数应该

YII 1.0 设置关联模型

在model中设置如下 /* * 设置关联 */ public function relations(){ return array( 'cate'=>array(self::BELONGS_TO, 'Category', 'catid') ); } 这样返回的就是 article.catid = category.id 的category表中的一行数据包含所有字段 HAS_MANY ( 有多个)HAS_ONE ( 有一个)MANY_MANY ( 多对多) 在视图中: $v['cate']->

LoadRunner参数设置

hi,baby~i am back! 在上一篇博文中,我大概写了一下登录脚本的录制,没有给出源代码.但实际上,只要你 认真按顺序看下去,每一部分拼接起来,就已经是完整的代码部分了. **今天我们来看一下参数的设置.** 任何语言,肯定都会有参数的存在.参数存在的意义是什么?在我的理解来说,就像 是把一部分数据放进一个盒子里,给这个盒子起一个名字,然后方便我们找到它. 大家都见过中医抓取重要的药橱嘛?每一个药橱都有自己的名字.如果没有名字?每 个数据存放在一个盒子里?在哪个盒子?I don't k

loadrunner 如何做关联

在页面中为了防止CRSF攻击,每次访问登录页面时,在浏览器器端生成一个token. 在提交时检验这个token是否有效,提交后token自动失效.   如果使用loadrunner来测试此系统话需要做一个关联,把这个token作为一个参数进行提交. 做关联有一下几种方法:   1.通过回放的HTTP VIEW视图.   选择变化的值选择创建关联. 切换到脚本模式. 使用关联 这样关联就可以了.   2.如果用户对脚本比较熟悉的话. 直接写脚本就好了.

【转】loadrunner检查点设置

转自:http://www.cnblogs.com/fnng/archive/2013/03/10/2953257.html 判断脚本是否执行成功是根据服务器返回的状态来确定的,如果服务器返回的HTTP状态为 200 OK ,那么VuGen 就认为脚本正确地运行了,并且是运行通过的.在绝大多数系统出错时会返回错误页面码? 不会一般系统都会返回一个消息提示框,来提升用户感受.例如,“网站繁忙,请稍后”.其实这个时候网站已经无法正确响应用户请求了,但是VuGen 脚本无法识别,会错误地认为网站还能正

【转】关于loadrunner中设置进程和线程的区别

loadrunner中,在进行运行设置中有一项选择,是按进程运行Vuser或按线程运行Vuser?下面进行分别来讲: 1.按进程运行Vuser:Controller将使用驱动程序mdrv运行Vuser.如果按进程方式运行每个Vuser,则对于每个Vuser实例,都将启动一个mdrv进程.如果设置了10个Vuser,则在任务管理器中出现10个mdrv进程.多个mdrv进程肯定会占用大量内存及其他系统资源,这就限制了可以在任一负载生成器上运行的Vuser的数量. 2.按线程运行Vuser:及设置了1

LoadRunner录制:关联

一般请求中看到 hash strings, random strings, session ID 这种,就需要动态去获取该内容,这样就需要用到关联. 回放时自动关联 1. 录制脚本并执行. 2. 打开"Scan Action for Correlation"窗口,该窗口会询问用户是否要扫描脚本并建立关联,单击"yes"按钮,扫描脚本. 有多种方式可以打开"Scan Action for Correlation"窗口: 方式一:选择 Vuser –