loadrunner脚本调试过程及动态参数的的解决方法

大刘sir 0

鉴于目前loadrunner的使用现状,有些同事还不会熟练的调试脚本,脚本回放通不过就束手无策,以及碰到动态参数需要做关联的时候也无从下手,所以针对目前的使用现状,结合甘肃门户SSO的性能测试案例,编写该文档,希望对LR的脚本调试和参数关联方面有所帮助。

脚本调试的一般过程:

使用Vgen录制脚本–>回放–>处理关联(如果需要)–>再次回放–>验证脚本的正确性。

  • 脚本录制完毕以后,点击工具栏上的run 按钮或按F5快捷键,运行一下脚本,如果弹出pass页面,则脚本正确,无需做其他处理;
  • 如果弹出 fail页面,说明脚本回放失败,则查看回放日志,分析是什么原因引起的;

问题1如何查看回放日志?

答:点击这个图标就可以看到回放的日志信息;

如果图标找不着,可点击【View】>【Output Window】,或直接点击工具栏上的按钮,在屏幕的下方就能看到

3、如果回放日志信息中有红色的错误信息存在:比如,Continuing after Error -26612: HTTP Status-Code=500 (Internal Server Error) for ……   [MsgId: MERR-26612],或出现HTTP 404的提示信息,具体会出现什么错误信息,与系统实际做的错误处理机制有关。不管是什么错误信息,回放时只要有错误信息存在,往往预示着脚本中存在动态参数,需要对动态参数进行关联处理;

4、如果对动态参数进行处理:需要用到关联技术;

问题2何谓关联:

答:关联(correlation)的含义:在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法称作关联。通俗点说,就是把脚本中某些写死的(hard-coded)数据,转变成撷取自服务器所送的、动态的、每次都不一样的数据。

 

关联的一般操作过程

关联有两种:自动关联和手动关联。

在大部分情况下,使用自动关联可以完全实现;但是自动关联也不是万能的,有时候自动关联的也有错,需要调整ord的位置以及web_reg_save_param函数所放的位置,该函数需要放在使用该动态参数的请求页面之前,否则也会报错。

1、自动关联:

自动关联包含两种机制:

一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如:自动关联所检测到的关联点不一定真的需要进行关联,这要我们根据实际情况进行判断;有些需要关联的动态数据自动关联无法找到,这是就需要做手动关联

另一种是loadrunner自带的自动关联规则,在录制脚本时,会根据这些规则自动创建关联

自动关联的步骤如下:

如果要使用自动关联,需要开启自动关联选项。

刚才提到的两种关联机制,如果用户想使用loadrunner自带的关联规则创建关联,那么需要在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,选中“Enable correlation during recording”,当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。也可以在【Recording Options】>【Internet Protocol】>【Correlation】中添加关联规则,达到自动关联的目的。

2、手动关联:

手动关联的过程大致如下:

第一步:录制测试脚本,录制二遍

第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联

第三步:确定插入关联的位置

第四步:在VIEW TREE中使用web_reg_save_param函数手动建立关联

第五步:将脚本中有用到关联的数据,用参数代替

第六步:验证关联的正确性

 

关联函数web_reg_save_param函数用法介绍

语法:

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。属性值不分大小写

Notfound: 当在返回信息中找不到要找的内容时应该怎么处理

Notfound=error: 当在返回信息中找不到要找的内容时,发出一个错误讯息。这是缺省值。

Notfound=warning: 当在返回信息中找不到要找的内容时,只发出警告,脚本也会继续执行下去不会中断。

LB( Left Boundary ) : 返回信息的左边界字串。该属性必须有,并且区分大小写。

RB( Right Boundary ): 返回信息的右边界字串。该属性必须有,并且区分大小写。

RelFrameID: 相对于URL而言,欲查找的网页的Frame。此属性质可以是All或是数字,该属性可有可无。

Search : 返回信息的查找范围。可以是Headers,Body,Noresource,All(缺省)。该属性质可有可无。

ORD : 说明第几次出现的左边界子串的匹配项才是需要的内容。该属性可有可无,缺省值是1。如为All,则将所有找到的内容储存起来。

SaveOffset : 当找到匹配项后,从第几个字元开始存储到参数中。该属性不能为负数,缺省值为0。

SaveLen :当找到匹配项后,偏移量之后的几个字元存储到参数中。缺省值是-1,表示一直到结尾的整个字串都存入参数。

Convert : 可取的值有以下两种:

HTML_TO_URL : 将 HTML-encoded 资料转成 URL-encoded 资料格式

HTML_TO_TEXT : 将 HTML-encoded 资料转成纯文字资料格式

 

 

实例操作演示――自动关联(以甘肃移动SSO登录为例,测试工具使用loadrunner11)

1、打开Vgen,录制一个SSO登录脚本;

2、回放脚本,发现脚本运行失败;

3、点击,查看回放日志信息,发现有以下报错信息出现:

Action.c(89): Continuing after Error -26612: HTTP Status-Code=500 (Internal Server Error) for “http://ac.gs.10086.cn/SSO/UI/Login”   [MsgId: MERR-26612]

4、点击【Vuser】>【Scan Script for Correlations】,或直接按ctrl+F8快捷键启动动态参数的检测;(注:如果设置了“show scan for correlations popup after replay of vuser”,当回放完脚本后,会自动弹出Scan action for correlation窗口,)

5、弹出以下对话框,点击“Yes”;

6、扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。

7、选择要关联的参数值,点击Correlation按钮,进行关联;

8、一般来说,需要回放几次直到所有需要做关联的参数都找出来为止。因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。

9、点击工具栏上的按钮,打开脚本,发现脚本中插入了三个web_reg_save_param函数,如图:

10、在脚本中加入lr_output_message函数,打印输出已关联的动态参数值,验证参数是否取到以及是否是我们想要的参数,如图:

11、再次回放一下脚本,验证脚本是否正确,如果脚本通过,会弹出以下页面:

12、点击,打开回放日志信息,发现取到的参数值如下:

经分析,发现取的参数值是正确的;

注意:不能迷信自动关联,有时候自动关联的值也不正确,需要手工调整一下Ord的值或web_reg_save_param函数放的位置,web_reg_save_param应该放在使用该参数的请求页面之前。

 

 

实例操作演示――手工关联(以甘肃移动SSO登录为例,测试工具使用loadrunner11)

1、打开Vgen,录制一个SSO登录脚本;

2、回放脚本,发现脚本运行失败;

3、点击,查看回放日志信息,发现有以下报错信息出现:

Action.c(89): Continuing after Error -26612: HTTP Status-Code=500 (Internal Server Error) for “http://ac.gs.10086.cn/SSO/UI/Login”   [MsgId: MERR-26612],出现这个信息往往提示有动态参数,需要做关联。

4、点击工具栏上的 ,切换到树型模式,

5、点击左边action的,再点击,在response页里查找“goto”,选定value的值,如下图所示:

6、在选定区域点击右键,选择Create Parameter,如图所示,

7、弹出对话框,点击“是”,

8、打开脚本发现,在fedletSSOInit.jsp之前已经插入了web_reg_save_param函数,参数名为CorrelationParameter_1,我们可以修改参数名称为goto,增强脚本的可读性;

9、在脚本中查找goto的值,即L1NTT1JlZGlyZWN0L21ldGFBbGlhcy9zcC9pZHA/UmVxSUQ9czIzMGNjMTIwMTg1YzIxODgwMGZiOTA2ODQzZWFlNGViY2M3ZTdkZjE0,然后用参数{goto}替换,如图所示:

10、用同样的方法把需要的动态参数都进行手工关联,如SunQueryParamsString,

11、所有的动态参数关联完毕,点击,进行脚本回放,发现脚本运行结果为Pass,说明脚本正确无错误。至此,脚本调试完毕。

这是一种较为便捷的手工关联的方法,当然,也可以在里查找动态参数的值,不过需要手工添加web_reg_save_param函数和确定该函数应该放的位置,相对上面的方法而言,操作过程稍显复杂一些。

注意:如果要在里查找动态参数,需要在设置【log】>【Extended log】里选择Data ruturned by server选项,这样才能在回放日志里查找到服务器返回的动态参数,如图所示:

经验总结:

1)、为了便于脚本的调试,将返回的数据都写入日志是个好办法;

2)、为了验证取得的数据是否是自己期望的,可以将取得的数据写入日志中进行验证,

例:lr_log_message(“getvalue : %s”,lr_eval_string (“{goto}”));

3)因为它是一个注册函数,必须在返回信息前使用,所以函数的位置必须正确,否则很可能得到类似如下错误:

  • c(734): Error -27190: No match found for the requested parameter “oldstate”.

Check whether the requested boundaries exist in the response data. Also, if the data you want to save exceeds 1024 bytes, use web_set_max_html_param_len to increase the parameter size [MsgId: MERR-27190]

  • c(734): Error -27187: The above “not found” ,error(s) may be explained by header and body byte counts being 0 and 0, respectively. [MsgId: MERR-27187]
  • c(734): web_concurrent_end highest severity level was “ERROR” [MsgId: MMSG-27181

(文章转载自网络)


发表回复