Loadrunner关联原理及方法
注:建议先通读一遍文档,再根据文档进行实际操作,选择你认为最喜欢的方法进行关联!
一、关联原理:
(图一)
如上图所示:
脚本录制时,我们通过登录获取的session ID①会被存储在我们客户端(浏览器)本地,下次请求时,我们就会使用session ID①进行访问。
(图二)
但是,如图二所示,在我们回放脚本时,由于是二次登录,所以我们的服务器又会产生新的session ID返回给我们,这个时候我们把它标作session ID②。
但是由于脚本里面的sessionID依然是存储的上次保存的session ID①(但是由于生成了第二次session ID②,所以服务器要的是②,不是①),所以发送给服务器的时候,会提示错误的session ID,这样就造成了我们登录不上去,后续的业务也就不能进行下去了。
因此,为了解决这些类似session ID的动态值的问题,我们需要在脚本有这种动态值的时候进行相应的关联。原理就是,当我们发现关联的参数有新值产生(动态变化时),会将新值赋给参数,在如上图就是把session ID②的值给到之前的session ID①,这样就能让我们在回放时,成功登录。
录制时userSession=3.4164576868789
回放时userSession=3.4232456789322
二、怎么设置关联
设置关联通常有两种方式,分别为自动关联和手动关联。
a) 自动关联(loadrunner11):
第一步、自动关联,需要在录制选项Recording Options里将Enable correlation during recording(启用录制时关联)给勾上。
第二步、录制脚本,脚本录制完以后回放,如果有session值的变化,第一次回放会是失败的。类似下面两图
注意:不管是自动还是手动关联,需要做关联都需要先回放
第三步、这个时候点击快捷键ctrl+F8弹出如下页面
然后,如果两次相应的值有变化,系统会自动用黄色的标记给标识出来,同时,在下方的correlated栏也会显示出来,然后我们只需要选中相应的值,且点击右下角的Correlate按钮,就能够进行关联了。
然后关联以后可以看到,value里面保存的是这个sessionID原本的值。在脚本里面产生了这样一个函数web_reg_save_param_ex(),其中ParamName是这个参数的名字,LB=后面的是sessionID的左边界,RB对应的是右边界。至此,自动关联就完成啦。
但是自动关联有很大的弊端,loadrunner11的自动关联非常不完善,比如找不到或者说所以很多情况下都需要我们自己来做手动关联(Loadrunner12的自动关联使用起来体验不错,可以适当减少工作量)。
b) 手动关联:
手动关联,有好多种方法,这里只讲一种,就是通过两次录取脚本来查找其中变化的值,然后根据找到的值进行函数编写,手动输入左右边界值的过程。
步骤:
第一步:录制测试脚本,录制两遍;
第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联;
第三步:使用web_reg_save_param函数手动建立关联;
第四步:将脚本中有用到关联的数据,以参数代替;
第一步、录制测试脚本,录制两遍:
先录制一份脚本存档,取名为loginA,再依照相同的操作步骤与数据录制第二份脚本并保存,取名为loginB并关闭loginB;(两次录制的操作步骤及使用数据最好保持一模一样)。
第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联;
在脚本loginA中,单击VuGen的菜单tool→compare with vuser...,并选择loginB,如下图所示:
然后就会看到,黄色的部分都是两个脚本不同的地方(所以尽量要保持脚本一致)。可以看到红色部分,就是我们两次的userSession发生了变化。
然后根据选项选择options->view->Line Numbers和Show Inline Differences,如下图
结果显而易见,会把字符变化的部分使用红色的标记出来,这样就更方便观察了。所以最终对比的结果如下所示:
第三步:使用web_reg_save_param函数手动建立关联;
逐一检查差异部分,每个地方都可能是需要关联的地方,但是在上图所示的例子里,我们只需要关联的是userSession。
接着打开Recording Log(单一协议)或是Generation Log(多重协议)中找到这个值。可以在Generation Log的开头部分使用ctrl+f快捷键,查找发生变化的值
经过查找我们发现,userSession是在Response Body For Transcation With Id 25(ID25的回执报文身体部分)这里回执给客户端的;然后,我们需要找到Id 25所对应的发送请求的路径。
如下图所示,最终找到发送请求的 Request Header For Transaction With Id 25(ID25的请求报头),它的请求地址是 “/webTours/nav.pl?in=home”;
接下来去脚本里面进行搜索,最终定位,在脚本的下图部分进行的请求
所以,最终,我们只需要在web_submit_data前面编写关联函数就可以了(如果怕有问题,可以写在脚本最前面)。
第四步:插入关联函数函数可以如下所示,也可以使用web_reg_save_param()函数,区别在于web_reg_save_param_ex()函数可以使用正则表达式来过滤左右边界。
web_reg_save_param_ex(
"ParamName=CorrelationParameter_1",
"LB=userSession value=",
"RB=>\n<table border",
SEARCH_FILTERS,
"Scope=All",
"RequestUrl=*/nav.pl*",
LAST);
然后,在脚本里面,使用ParamNmae后面的值 CorrelationParameter_1这个参数把脚本里面的变化值value=122860.759740786zDVQzfApDcQVzzzHDHQVHpQAVQHf替换掉,就会变成
value={ CorrelationParameter_1}。
最后,运行脚本,体验一下关联成功以后,脚本是否能够运行成功!
注意:还有两种手动关联的方式,会比手动写函数更简单一点,就是在确认变化的参数之后,①在Response body里面找到变化的值以后,直接采用右键关联的方式进行关联设置。
其中需要做的设置有其中要进行的设置,包括,启用Tree模式,点击HTTP View,设置为Display Recorded Snapshot,然后点击到Response Body部分。
接着,找到变化的值,选中它,点击右键->Create Correlation创建联接
②在VGun里面选择insert->New Step->Services->web_reg_save_param_ex,然后会出现以下的界面,分别填写左右边界和参数名字等关键参数,就能够将关联做好而不需要手动写函数了。
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 : 下面的选项都是帮助关联返回限定的,通过这些设置可以进一步减少返回的范围。
最后,介绍几个解决乱码问题的方法:
1. 录制完以后脚本里面有乱码
解决方案:在VuGen里面选择Tools->Recording Options(或者直接CTRL+F7)->Advanced,更改Suppert Charset->UTF-8
注意:该方法只有改了以后再录才会生效,录完再改没有任何效果!
但是如果设置为UTF-8,页面反而是GB2312或者其他编码,这个时候反而会产生乱码,所以最好是确认页面是什么编码然后进行更改最稳妥
如何查看页面编码呢?
- 查看页面源代码,查看charset(编码在http response header中的Content-Type)是什么格式。
b.IE打开页面后,右键->编码,查看浏览器自动选择的编码是什么
2.脚本回访时出现乱码
a. 更改运行时设置:
点击菜单栏中的Vuser,选择Run-time Settings(或者直接按F4键):
在弹出的窗口左侧点击Internet Protocol->Preferences->Advanced然后在右侧窗口中点击Options按钮,在弹出的窗体中找到General->Convert from/to UTF-8,将其设为Yes。