今天我们一起来学习关于“LoadRunner的关联技术”首先准备一个场景,录制这样一个脚本,登录LoadRunner自带的机票预订系统,检查登录的用户名是否正确,如图6-55所示。
图6-55 录制场景
录制结束之后,为登录的用户名做一个检查点,然后回放脚本,发现Replay Log中报错,如图6-56所示。
图6-56 Replay Log报错
这时首先可能想到的第一个原因就是关联。关联是LoadRunner中一个很重要的应用,对于初学者来说也是最容易犯错的地方,但是很遗憾的是,并没有任何特定的错误与关联有关系。
那么什么叫关联呢?关联(Correlation)是把脚本中某些写死的(hard-coded)数据,转变成取自服务器所送的、动态的、每次都不一样的数据。
常用的关联技术有三种:录制中关联、录制后关联和手动关联。
一、关联的原理
在学习关联之前必需清楚两个问题,一是:什么情况下需要关联?二是:LoadRunner使用关联函数进行关联时,关联函数是如何获得这些动态数据的,即关联函数的工作原理?
第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图6-57所示。
图6-57 登录功能脚本录制过程
第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图6-48所示。
第一步:进入登录界面,输入用户名和密码进行登录。
第二步:服务器向客户端返回一个Session ID值。
第三步:客户端向服务发送请求,在发送请求给服务器时,同时会向服务器发送一个Session ID,这个Session ID就是第二步从服务器返回到客户端的Session ID值,并且第二步和第三步的Session ID必须完全一样,否则发送到服务器端的请求将失败。
第四步:服务器返回数据给客户端。
在脚本录制过程中可以正确的登录,没有任何问题,但在回放脚本时发现并没有被正确的登录,那么这是什么原因呢?
再仔细分析整个登录过程,注意第三步,第三步要求提交的HTTP请求中必须包括Session ID值,并且这个Session ID值一定是服务器返回给客户端的。在录制时,LoadRunner会将服务器返回的Session ID值保存在脚本中,脚本内容如下:
从服务器端返回的Session
ID(108993.054434994fzAzDDApcDHfDDzDHpQiVtcf)值保存在userSession参数中,那么当脚本进行回放时,客户端就一直使用这个Session
ID并和其它的请求一块发送到服务器。这个过程其它并没有任何问题,但是服务器为了出于安全性考虑,每次返回给客户端的Session
ID都会发生变化,而在整个请求过程中的第三步明确要求,客户端发送的请求必须同时附加上Session ID,并且一定需要与服务器返回的Session
ID值一致,这样问题就出现了,每回放一次脚本时,服务器返回的Session ID值就发生改变,而脚本又将Session
ID值写成了固定值,这样直接导致脚本回放失败。
通过上面的例子可以看出,如果录制脚本过程中,服务器会返回一个动态的、变化的值给客户端时,那么就必须对脚本进行关联,否则业务不可能正常的完成。
第二个问题,LoadRunner关联原理。
在第一个问题中描述了什么情况下需要对脚本进行关联,这样就引出了另外一个问题,既然需要关联的内容是一个动态的、变化的,并且一定是服务器返回给客户端的值,那么LoadRunner又如何能获得这些动态的值呢?也即是接下来要分析的LoadRunner的关联原理。
对于这些动态的值,如果想直接获得是不可能的,因为它是变化的,所以不可能直接获得每次回放时现成的值。这样就必须使用其它的方法来获得这串变化的值,先看生活中的一个例子,读者朋友应该都经历过军训,早上开始军训时,教官会先让大家报数,如果报数发现少人了,教官问会大家旁边是谁还没有到,注意这个案例中,教官其实根本不知道是谁没到,但是只要这未到的这个人左右两边的人都到了,那就一定可以知道是谁没到,所以同理LoadRunner也可以使用这种方法来获得那串动态的值,虽然不能直接去读到那串动态的值,但如果能找到左右边界的内容,那么同样可以获得那串变化的值。
所以LoadRunner关联是通过左右边界值来查找服务器返回给客户端的值,所以关联最难的是如何查找待关联值的左右边界值。
二、录制中关联
VuGen内建自动关联引擎(auto-correlation engine),可以自动找到需要关联的值,并且自动关联函数建立关联。
1、建立规则
如果在录制之前已经知道关联规则,那么可以先建立一个规则,再进行录制,这样在录制过程中会自动关联。关联规则最重要是指定两个边界,即被关联量的左边界和右边界。对于关联的规则有两种。
(1)内建关联规则(Built-in Correlation)
所谓的内建关联规则通俗的说就是LoadRunner内部自带的一些规则。VuGen针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等内建了很多关联规则,在Tools→Recording Options→HTTP Properties→Correlation中可以看到,如图6-58所示。在录制前可以启动需要的规则,这样在录制时,VuGen会在脚本中自动建立关联。
图6-58 内建规则
(2)用户自定义关联规则(User-defined Rules Correlation)
如果在录制前发现默认的内建规则并不能满足录制需要,并且在录制前就已经知道规则的左右边界时,此时可以自己动手新建一个规则,如图6-59所示。点击New Application按钮先新建一个应用,再点击New Rule按钮为该应用新建一个规则,新建规则时只要正确填好左右边界信息即可。
图6-59 新建关联规则
Action设置待匹配参数所存在的位置,通常服务器返回的内容包括:Response Body、Headers、Cookies等,所以必须指定需要查找参数所在的位置,该选项有以下几个设置项:
Search for parameters in all of the body text:指在整个body中查找参数的内容,不仅仅包含links、form或cookies的内容。
Search for parameters in links and form actions:在links和form中查找待匹配的参数。
Search for parameters in cookie headers:该选项与前面的设置项类似,但该选项是指从cookie内容中去匹配需要的参数。
Parameterize form field value:查找表单中的字段内容,将其作为参数,使用该选项会创建一个参数并在表单请求之前插入一行代码,在设置时需要指定字段的名称。
Text to enter a web_reg_add_cookie function by:通过web_reg_add_cookie函数功能,检查指定缓冲区的内容参数。
缺省值为在body中查找待匹配的内容,一般的情况下,需要匹配的参数都是来自于Response Body中。
Left boundary:关联规则的左边界值。
Right boundary:关联规则的右边界值。
Parameter Prefix:定义参数的前缀,每次使用该规则生成变量时,变量的前缀都使用该选项所定义的前缀。
Match Case:是否区分大小写。
User `#` for any digit:是否使用“#”做通配符。
同时还可以导入已定义好的规则,将已经定义好的规则导出,对定义的规格进行测试。
单击【Import】按钮,选择需要导入的规则,导入即可,由于多人同时开发脚本,通过导入的方式,就没有必须每个人都去查找关联的左右界面值,通过导入功能即可共享已建好的关联规则。
单击【Export】按钮可以将已定义好的规则导出到本地磁盘。
测试的功能主要是对已定义好的规则进行测试,测试规则的匹配是否正确,单击【Test】按钮,弹出【Token Substitution Testpad】对话框,如图6-60所示。
图6-60 规格测试对话框
在Source string for substitution输入框中输入待匹配的字符段,Substitution Result是通过规则匹配后的结果,Applied Rules是指在匹配过程中使用到的规则。
2、规则使用
在Tools→Recording Options对话框中选中Enable correlation during recording复选框,启用自动关联。在录制过程中,当VuGen检查到符合关联规则的数据时,会依照设定建立关联,产生与图6-61类似的一段脚本。
图6-61 录制中关联
Web_reg_save_param即为关联函数,LoadRunner通过该函数将匹配到的内容保存在一个变量中,该实例保存到的变量名为CSRule_1_UID2。
三、录制后关联
当录制前内建关联规则和新建规则都不能满足需要时,或者是不知道哪个地方需要关联时,只能采取录制后进行关联。
录制后关联与内建关联还是有点区别的,录制后关联是在执行脚本后才会建立关联,也就是说,当录制完脚本后,脚本至少要执行一次,录制后关联才会产生效果。录制后会尝试找到录制与执行时服务器响应的差异部分,找到需要关联的数据,并建立关联。
在脚本回放报错时,如图6-62所示,点击菜单Vuser→Scan Script for Correlations或按快捷键Ctrl+F8,如图6-63所示。
图6-62 未关联报错
图6-63 扫描脚本并关联
弹出关联信息结果,如图6-64所示。
图6-64 关联结果信息
检查扫描的结果,选择需要关联的数据,点击Correlate按钮,创建一个关联,这时被关联的数据前面会多出一个绿色的勾,如图6-65所示。
图6-65 创建关联
再点击Create Rule按钮为关联创建规则,弹出WebStudioViews对话框,提示规则的左边界与右边界信息,点击“是”按钮即可,如图6-66所示。
图6-66 创建规则
这样关联就已经创建完成,在Tools→Recording Options→HTTP Properties→Correlation中可以看到刚才创建的规则,如图6-67所示。
图6-67 新添加的规则
图6-67中规则的左右边界与图6-66中弹出的提示信息左右边界信息一致。
四、手动关联
录制前关联与录制后关联都属于自动关联的范畴,正常情况下,自动关联就能解决脚本录制中大多数关联问题,但是如果出现使用上面两种方法都不能解决的情况,那么只能使用手动关联的方法进行关联了。手动关联和自动关联的原理是一样的,手动关联需要先找到需求关联的量,然后使用LoadRunner提供的关联函数进行关联。
手动关联的一般步骤如下:
1)录制两份脚本,保证业务流程和使用的数据相同。
简单的说,就是在录制的过程中使用相同的录制动作,录制两份脚本。
2)使用WinDiff工具比较两份脚本,找到需要关联的数据。
WinDiff是LoadRunner自带的文件比较工具,用于比较两个文件的内容,找出两者之间不同的地方,对两份脚本中不同的地方进行判断,进而找到需要关联的数据。这里为什么需要比较,是因为需要关联的数据都是从服务器端返回的数据,如果在比较中发现,对于同一个参数,服务器返回的值不一致,那么说明这个数据是动态的,需要进行关联。
在Tool菜单下选择Compare with Vuser选项,如图6-68所示。
图6-68 Compare with Vuser选项
在弹出的对话框中选择要和当前脚本进行比较的脚本,如图6-69所示。
图6-69 选择比较脚本
接着WinDiff启动,同时显示两份脚本,并显示有差异的地方,WinDiff会以一整行黄色标示有差异的脚本,如图6-70所示。
图6-70 脚本比较
然后检查两份脚本中存在差异的地方,每个差异的地方都有可能是需要关联的地方。注意:lr_think_time的差异部分不需要分析,因为lr_think_time是用来模拟每个步骤之间使用者思考延迟的时间。
3)找到左边界和右边界字符串。在插入关联函数之前一定要先找到左边界和右边界字符串,选择将WinDiff比较中不同的字符拷贝出来,在Generation Log中找到其对应的位置,如图6-71所示。
图6-71 查找左边界与右边界
图中清楚地显示了关联数据的左边界与右边界信息,左边界为“userSession value=”,右边界为“>”,当然这里的左边界与右边界写得越长越好。这样关联函数就可以写出来了,如下。
4)使用web_reg_save_param函数手动建立关联。规则的左边界与右边界信息找到后,需要插入web_reg_save_param函数来手动建立关联,首先找到关联函数插入的位置,点击Vuser→Run-Time
Settings→General→Log→Extended log将下面所有选项都选中。在Replay
Log中找到WinDiff中比较不同的字符串,如图6-72所示,这段代码前面就是插入关联函数的位置。
图6-72 关联函数插入位置
5)将脚本中该关联数据以参数取代。当使用web_reg_save_param建立参数后,接下来就是用CSRule_1_UID2参数去取代脚
最后参数的结果如图6-73所示。
图6-73 参数取代常量
五、关联函数介绍
LoadRunner最新版本中,使用的关联函数为web_reg_save_param_ex,以前的版本使用的关联函数为web_reg_save_param,但这两个函数实质差别不大,本章节主要介绍关联函数web_reg_save_param_ex,当然在新的版本中关联函数web_reg_save_param还是可用的。
在测试过程中可以通过插入步骤的方式来插入关联函数,在树模式下选中需要插入步骤的位置,单击右键在弹出菜单中选择Insert Before菜单,弹出Add Step对话框,如图6-74所示。
图6-74 添加步骤对话框
在Find Function下拉列表框中输入关联函数web_reg_save_param_ex,单击OK按钮弹出web_reg_save_param_ex对话框,如图6-75所示。
今天关于“LoadRunner的关联技术”的第一部分就和大家讲解到这里了,大家喜欢的话记得每天来这里和小编一起学习涨薪技能哦。
附:川石信息全国校区最新开班时间,课程资料获取13691729932(微信同号)。