LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)

上期讲到LoadRunner性能测试脚本编写之参数化技术,这期咱们一块儿来学习脚本编写之关联技术。html

关联技术

首先准备一个场景,录制这样一个脚本,登陆LoadRunner自带的机票预订系统,检查登陆的用户名是否正确,如图所示。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)
git

录制结束以后,为登陆的用户名作一个检查点,而后回放脚本,发现ReplayLog中报错,如图所示。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)
web

这时首先可能想到的第一个缘由就是关联。关联是LoadRunner中一个很重要的应用,对于初学者来讲也是最容易犯错的地方,可是很遗憾的是,并无任何特定的错误与关联有关系。 安全

那么什么叫关联呢?关联(Correlation)是把脚本中某些写死的(hard-coded)数据,转变成取自服务器所送的、动态的、每次都不同的数据。 服务器

经常使用的关联技术有三种:录制中关联、录制后关联和手动关联。cookie

关联的原理

在学习关联以前必须清楚两个问题,一是:什么状况下须要关联?二是:LoadRunner使用关联函数进行关联时,关联函数是如何得到这些动态数据的,即关联函数的工做原理? ide

第一个问题,什么状况下须要关联,以飞机订票系统登陆过程为例,其登陆过程如图所示。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)
函数

第一个问题,什么状况下须要关联,以飞机订票系统登陆过程为例,其登陆过程如图所示。性能

第一步:进入登陆界面,输入用户名和密码进行登陆。学习

第二步:服务器向客户端返回一个Session ID值。

第三步:客户端向服务发送请求,在发送请求给服务器时,同时会向服务器发送一个Session ID,这个Session ID就是第二步从服务器返回到客户端的Session ID值,而且第二步和第三步的Session ID必须彻底同样,不然发送到服务器端的请求将失败。

第四步:服务器返回数据给客户端。

在脚本录制过程当中能够正确的登陆,没有任何问题,但在回放脚本时发现并无被正确的登陆,那么这是什么缘由呢?

再仔细分析整个登陆过程,注意第三步,第三步要求提交的HTTP请求中必须包括Session ID值,而且这个Session ID值必定是服务器返回给客户端的。在录制时,LoadRunner会将服务器返回的Session ID值保存在脚本中,脚本内容以下:

web_submit_data("login.pl","Action=http://127.0.0.1:1080/WebTours/login.pl","Method=POST","RecContentType=text/html","Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home","Snapshot=t9.inf","Mode=HTTP", ITEMDATA, "Name=userSession","Value=108993.054434994fzAzDDApcDHfDDzDHpQiVtcf", ENDITEM,"Name=username","Value=test1", ENDITEM,"Name=password","Value=1", ENDITEM,"Name=JSFormSubmit","Value=off", ENDITEM,"Name=login.x","Value=51", ENDITEM,"Name=login.y","Value=8", ENDITEM, LAST);

从服务器端返回的

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中能够看到,如图所示。在录制前能够启动须要的规则,这样在录制时,VuGen会在脚本中自动创建关联。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)

(2)用户自定义关联规则(User-defined Rules Correlation)

若是在录制前发现默认的内建规则并不能知足录制须要,而且在录制前就已经知道规则的左右边界时,此时能够本身动手新建一个规则,如图6-59所示。点击New Application按钮先新建一个应用,再点击New Rule按钮为该应用新建一个规则,新建规则时只要正确填好左右边界信息便可。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)

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】对话框,如图所示。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)

在Source string for substitution输入框中输入待匹配的字符段,Substitution Result是经过规则匹配后的结果,Applied Rules是指在匹配过程当中使用到的规则。

2.规则使用

在Tools→Recording Options对话框中选中Enable correlation during recording复选框,启用自动关联。在录制过程当中,当VuGen检查到符合关联规则的数据时,会依照设定创建关联,产生与图相似的一段脚本。
LoadRunner性能测试系统学习教程:脚本编写之关联技术(5)

Web_reg_save_param即为关联函数,LoadRunner经过该函数将匹配到的内容保存在一个变量中,该实例保存到的变量名为CSRule_1_UID2。