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

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

关联技术

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

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

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

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

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

关联的原理

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

第一个问题,什么情况下需要关联,以飞机订票系统登录过程为例,其登录过程如图所示。
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。