LoadRunner关联简介
loadrunner 详细解释
LoadRunner2010-10-29 10:24事务TRANSACTION所谓事务(TRANSACTION),就是在脚本定义中定义的某段操作(ACTION),更确切的说,就是一段脚本语句.定义事务时,首先在脚本中找到事务的开始和结束位置,然后分别插入一个事务起始标记,这样,当脚本运行的时候,LOADRUNER会自动在事务的起始点计时,脚本在运行到事务结束点时计时结束,系统会自动记录这段操作的运行时间等性能数据;在脚本运行完毕后,系统会在结果信息中单独反映每个事务运行结果.LR_START_TRANSACTION(“事务名称”)LR_END_TRANSACTION(“事务名称“)集合点RENDEZVOUS多用户同时加载并发,并发过程仅仅体现在开始执行的那一刹那,随着服务器对请求的响应时间的不一致或系统环境条件的限制,在运行过程中能集合到一点的可能性微乎其微,所以将一定数量的用户同时加载并不是真正意义上的并发.系统压力最大的情况是:所有用户都集中到系统瓶颈的某个点上进行操作,从脚本的角度来讲,这个点就是执行脚本的某一条或一段语句,为了真实模拟这个最坏的情况,查看系统在最坏情况下的反映,LOADRUNNER 提供了集合点的功能,帮助测试人员实现真正意义上的并发.LR_RENDEZVOUS(“集合点名称”)参数化PARAMETERS让所有用户都使用相同的数据来运行,对系统造成的压力与实际情况会有所不同.而对于那些禁止一个用户多次登陆的系统,也就严重到无法测试的地步了.为了解决这个问题,让系统更加真实的模拟多用户使用的实际环境,LOADRUNNER提供了对脚本进行参数化输入的功能.所谓的脚本参数化,就是针对脚本中的某些常量,定义一个或多个包含数据源的参数来取代,让场景中不同的虚拟用户在执行相同的脚本时,分别使用参数数据源中的不同数据代替这些常量,从而达到模拟多用户真实使用系统的目的.注:参数化输入只能用于函数中的参数,不能用参数代替非函数中的常量参数.检查点CHECKPOINTLOADRUNNER检查点的功能主要用来验证某个界面上是否存在指定的TEXT或IMAGE等对象,在使用LOADRUNNER测试WEB应用时,可以检查压力较大时WEB服务器能否返回正常的页面。
LR 关联
loadrunner 关联有三个函数:web_reg_save_param、web_create_html_param、web_create_html_param_exweb_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。
语法:web_reg_save_param ( “Parameter Name” , < list of Attributes >, LAST );web_create_html_param、web_create_html_param_ex:这二个函数主要是保留作为向前兼容的目的的。
建议使用web_reg_save_param函数。
手动关联的执行过程大致如下:1、使用相同的业务流程与数据,录制二份脚本2、使用loadrunner:Tools-->Compare with Script可找出需要关联的数据。
脚本如下:Action(){web_set_max_html_param_len("1024");web_reg_save_param("JSESSIONID4","LB/IC=jsessionid=","RB/IC="","Ord=1","RelFrameId=1","Search=body",LAST);web_create_html_param("lt","name="lt" value="",""");web_url("login","URL=https://cas:8338/cas/login","Resource=0","RecContentType=text/html","Referer=","Snapshot=t10.inf","Mode=HTML",EXTRARES,"URL=theme/red/css/cssreset/reset-min.css", ENDITEM,"URL=theme/red/jq/accordion/gh.accordion.css", ENDITEM,"URL=theme/red/css/cssfonts/fonts-min.css", ENDITEM,"URL=theme/red/css/cssbase/base-min.css", ENDITEM,"URL=theme/red/jq/keypad.1.2.2/jquery.keypad.css", ENDITEM,"URL=theme/red/img/sprite_bd_btn.png", ENDITEM,"URL=theme/red/img/sprite_pay_icon.png", ENDITEM,"URL=https:///ga.js", ENDITEM,"URL=theme/red/jq/tabs/tab.png", ENDITEM,"URL=theme/red/jq/keypad.1.2.2/keypad.png", ENDITEM,LAST);web_custom_request("urs.asmx","URL=https:///urs.asmx?MSPRU-Client-Key=q92TLcWWCOrCs2KtbnL AVg==&MSPRU-Patented-Lock=US5/Mh+o8nQ=","Method=POST","Resource=0","RecContentType=text/xml","Referer=","Snapshot=t11.inf","Mode=HTML","EncType=text/xml; charset=utf-8","Body=<soap:Envelope xmlns:soap="/soap/envelope/" xmlns:xsi="/2001/XMLSchema-instance"xmlns:xsd="/2001/XMLSchema"xmlns:soapenc="/soap/encoding/"><soap:Body><Lookupxmlns="http://Microsoft.STS.STSWeb/"><rsoapenc:arrayType="xsd:string[1]"><string>https://cas/cas/login;jsessionid=ac6396fd77ea9b2074 281d3072bb659a</string></r><ID>{A0AB7674-8D67-4F4D-B5E1-96FAEADFB79D}</ID><v soapenc:arrayType="xsd:string[5]"><string>7.0.6004.6</string><string>7.00.6000.16730</string ><string>7.0.5730.13</string><string>5.1.2600.3.0</string><string>zh-cn</string></v></Looku p></soap:Body></soap:Envelope>",LAST);web_submit_data("login;jsessionid=D0C07C450E041F4EB71C9290570E05B3", "Action=https://cas:8338/cas/login;jsessionid={JSESSIONID4}","Method=POST","RecContentType=text/html","Referer=https://cas:8338/cas/login","Snapshot=t12.inf","Mode=HTML",ITEMDATA,"Name=username", "Value=a@", ENDITEM,"Name=password", "Value=a", ENDITEM,"Name=imageCode", "Value=", ENDITEM,"Name=submit", "Value=", ENDITEM,"Name=warn", "Value=false", ENDITEM,"Name=lt", "Value={lt}", ENDITEM,"Name=_eventId", "Value=submit", ENDITEM,LAST);web_find("web_find","What=您已经成功登录了!",LAST);web_url("LogAccessInfo.html","URL=/LogAccessInfo.html?fromUrl=https://cas:8338/cas/login &keyword=&sourceUrl=https://cas:8338/cas/login&uuid=E561D54B-4FBF-4915-A2A0-9E8A5 DA2A8B6&linkId=-1","Resource=0","RecContentType=text/html","Referer=","Snapshot=t13.inf","Mode=HTML",LAST);return 0;}这里要注意关联函数存放的位置,它不是直接放在web_submit_data的前面,而是放在了整个文件的最前面,如果直接放到web_submit_data前面的话,会报500的错误,还有web_submit_data("login;jsessionid=D0C07C450E041F4EB71C9290570E05B3", "Action=https://cas:8338/cas/login;jsessionid={JSESSIONID4}",第一个jsessionid和第二个jsessionid的处理方法不一样:(也不太清楚为什么,可能是第一个的位置无法从关联中取得值吧,因为如果第一个jsessionid也用关联的话,从log中看,它还是jsessionid=JSESSIONID4}的形式)从log中可以看到关联的值为多少,下面是Replay log:Virtual User Script startedStarting action vuser_init.Web Turbo Replay of LoadRunner 9.0.0 for WINXP; WebReplay82 build 5727 [MsgId: MMSG-27143]Run-Time Settings file: "C:\Documents andSettings\Administrator\×ÀÃæ\c\\default.cfg" [MsgId: MMSG-27141]Ending action vuser_init.Running Vuser...Starting iteration 1.Starting action Action.Action.c(4): web_set_max_html_param_len was successful [MsgId: MMSG-26392] Action.c(10): Registering web_reg_save_param was successful [MsgId: MMSG-26390] Action.c(18): Registering web_create_html_param was successful [MsgId: MMSG-26390] Action.c(22): Notify: Saving Parameter "JSESSIONID4 =93116597F9263946ADCFD7AA3BA34555"Action.c(22): Notify: Saving Parameter "lt =_c68864BC7-FF33-9B55-CEC2-180473614BB9_k6BAF7C2C-AAE9-649E-1A1B-014BD23D3 D94"Action.c(22): Found resource "https://cas:8338/cas/theme/red/css/userpage_import.css" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/jq/jquery-1.3.2.min.js" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/jq/tabs/ui.tabs.css" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/jq/tabs/ui.tabs.pack.js" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/jq/keypad.1.2.2/jquery.keypad.js" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/css/userpage_spec.css" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/css/layout.css" in HTML"https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/theme/red/img/logo.gif" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/imageCode" in HTML"https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Detected non-resource"https:///LoginFrame.asp?returnURL=https://cas:8338/cas/sdoUserCheck.html?ser vice=null&appDomain=cas&curURL=https://cas:8338/?service=null&CSSURL=https://cas:8338/ cas/theme/red/css/login_iframe_cas.css" in "https://cas:8338/cas/login" [MsgId:MMSG-26574]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/css/cssreset/reset-min.css" (specified by argument number 9) [MsgId: MMSG-26577]Action.c(22): Downloading resource"https://cas:8338/cas/theme/red/jq/accordion/gh.accordion.css" (specified by argument number 11) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/css/cssfonts/fonts-min.css" (specified by argument number 13) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/css/cssbase/base-min.css" (specified by argument number 15) [MsgId: MMSG-26577]Action.c(22): Downloading resource"https://cas:8338/cas/theme/red/jq/keypad.1.2.2/jquery.keypad.css" (specified by argument number 17) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/img/sprite_bd_btn.png" (specified by argument number 19) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/img/sprite_pay_icon.png" (specified by argument number 21) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https:///ga.js" (specified by argument number 23) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/jq/tabs/tab.png" (specified by argument number 25) [MsgId: MMSG-26577]Action.c(22): Downloading resource "https://cas:8338/cas/theme/red/jq/keypad.1.2.2/keypad.png" (specified by argument number 27) [MsgId: MMSG-26577]Action.c(22): Found resource "https://cas:8338/cas/js/adaliance.js" in HTML"https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Found resource "https://cas:8338/cas/js/googleNewGaJsHost.js" in HTML "https://cas:8338/cas/login" [MsgId: MMSG-26659]Action.c(22): Continuing after Error -27796: Failed to connect to server ":443": [10061] Connection refused [MsgId: MERR-27796]Action.c(22): Warning -26000: Empty or no response forURL="https:///LoginFrame.asp?returnURL=https://cas:8338/cas/sdoUserCheck.ht ml?service=null&appDomain=cas&curURL=https://cas:8338/?service=null&CSSURL=https://cas :8338/cas/theme/red/css/login_iframe_cas.css" [MsgId: MWAR-26000]Action.c(22): web_url("login") highest severity level was "continue on error", 358981 body bytes, 4868 header bytes, 32 chunking overhead bytes [MsgId: MMSG-26387]Action.c(22): Continuing after error in Vuser script.Action.c(42): Warning: The string 'A0AB7674-8D67-4F4D-B5E1-96FAEADFB79D' with parameter delimiters is not a parameter.Action.c(42): web_custom_request("urs.asmx") was successful, 1128 body bytes, 279 header bytes [MsgId: MMSG-26386]Action.c(55): Notify: Parameter Substitution: parameter "JSESSIONID4"= "93116597F9263946ADCFD7AA3BA34555"Action.c(55): Notify: Parameter Substitution: parameter "lt"= "_c68864BC7-FF33-9B55-CEC2-180473614BB9_k6BAF7C2C-AAE9-649E-1A1B-014BD23 D3D94"Action.c(55): Found resource "https://cas:8338/cas/css/main.css" in HTML"https://cas:8338/cas/login;jsessionid=93116597F9263946ADCFD7AA3BA34555" [MsgId: MMSG-26659]Action.c(55): Resource "https://cas:8338/cas/theme/red/css/userpage_spec.css" is in the cache already and will not be downloaded again [MsgId: MMSG-26655]Action.c(55): Resource "https://cas:8338/cas/theme/red/css/layout.css" is in the cache already andwill not be downloaded again [MsgId: MMSG-26655]Action.c(55): Resource "https://cas:8338/cas/theme/red/img/logo.gif" is in the cache already and will not be downloaded again [MsgId: MMSG-26655]Action.c(55): Resource "https://cas:8338/cas/js/adaliance.js" is in the cache already and will not be downloaded again [MsgId: MMSG-26655]Action.c(55): Resource "https://cas:8338/cas/js/googleNewGaJsHost.js" is in the cache already and will not be downloaded again [MsgId: MMSG-26655]Action.c(55): web_submit_data("login;jsessionid=D0C07C450E041F4EB71C9290570E05B3") was successful, 8205 body bytes, 627 header bytes [MsgId: MMSG-26386]Action.c(71): "web_find" successful. 1 occurrence(s) of "ÄúÒѾ³É¹¦µÇ¼ÁË£¡" found (RightOf="", LeftOf="") [MsgId: MMSG-27196]Action.c(71): web_find was successful [MsgId: MMSG-26392]Action.c(75): Found resource "/css/style.css" in HTML"/LogAccessInfo.html?fromUrl=https://cas:8338/cas/login&keyword= &sourceUrl=https://cas:8338/cas/login&uuid=E561D54B-4FBF-4915-A2A0-9E8A5DA2A8B6&l inkId=-1" [MsgId: MMSG-26659]Action.c(75): web_url("LogAccessInfo.html") was successful, 9435 body bytes, 414 headerbytes [MsgId: MMSG-26386]Ending action Action.Ending iteration 1.Ending Vuser...Starting action vuser_end.Ending action vuser_end.Vuser Terminated.-------------------------------------------------------------------------------------------------另外一种关联函数的用法:web_create_html_param_ex (“ItemValue”,“value=”, “>Ski Jacket”, “3”);用这个函数是因为:Find Unpredictable Data When Boundaries Are NOT Unique(值可能是没有边界)这里的3表示第三个,就是左右边界条件的第三个参数(也就是满足左右条件的参数不只一个,就可以用空上函数来取值)。
Loadrunner11 脚本关联
Loadrunner11 脚本关联关联:服务器返回给客户端一些动态变化的值,客户端使用这些值去访问服务器的时候,不能把这些值写死在脚本里面,而应该存放在一个变量里面。
在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,以变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。
以loadrunner自带的示例进行。
启动loadrunner自带的服务器,Start Web Server点击“HP Web Tours Application”,启动浏览器。
点击“administration”,设置服务器选项。
勾选第三项,“Set LOGIN form's action tag to an error page”。
再拉动滚动条到下方,点击“Update”。
点击“Virtual User Generator”,打开脚本录制器。
点击“新建”按钮。
弹出“新建虚拟用户”窗口,选择“新建单协议脚本”,选择协议中的“Web (HTTP/HTML)”,点击“创建”按钮。
弹出“开始录制”窗口,填写“URL”地址。
点击“选项”按钮,弹出“录制选项”窗口,选择“常规”下“录制”,选择“基于HTML 脚本”。
选择“HTTP属性”下“关联”,确保勾选“在录制期间启用关联”,点击确定按钮。
开始录制窗口点击“确定”按钮,开始录制。
填写用户名“jojo”,密码“bean”。
点击登录。
点击“Sign Off”退出登录。
点击“停止”录制按钮,可以查看录制脚本。
点击“F5”或者回放按钮。
查看“回放脚本”,显示错误。
点击“运行时设置”弹出“运行时设置”窗口,勾选“扩展日志”下的“参数替换”和“服务器返回的数据”。
右键选择“插入”,“新建步骤”。
在“添加步骤”的“查找函数”中输入“web_reg_save_param”,点击“确定”按钮。
loadrunner 关联函数 正则
loadrunner 关联函数正则LoadRunner关联函数-正则表达式正文:一、概述在性能测试领域中,HP LoadRunner是一个被广泛使用的工具。
它可以模拟大量用户对系统进行负载测试,以评估系统在不同压力下的性能表现。
然而,在测试中,往往需要从前一个请求中提取出特定的数据,并将其作为后续请求的输入参数。
这时,关联函数就发挥了重要作用。
二、关联函数的作用关联函数可以用于从服务器响应中提取出特定的数据,并将其保存到参数中,以供后续请求使用。
它可以提取出HTML页面、XML文档中的数据,甚至可以提取出请求头中的某个字段值。
在LoadRunner中,关联函数有多种类型,包括关联函数-正则表达式、关联函数-左右边界、关联函数-XML等。
三、关联函数-正则表达式正则表达式是一种强大的文本匹配工具,它可以根据模式匹配出需要的文本。
在LoadRunner中,关联函数-正则表达式可以使用正则表达式语法,从服务器响应中提取出指定的字符串。
具体步骤如下:1. 使用web_reg_save_param_regexp函数对需要提取的响应进行配置。
其中,参数列表包括关联名称、待提取的正则表达式、匹配的目标范围等。
2. 在后续请求中使用{关联名称}的形式引用关联的值。
关联名称是在web_reg_save_param_regexp函数中定义的。
例如,我们需要从服务器响应中提取出一个名为"username"的参数值,它的正则表达式为"username=(.*?)&"。
配置如下:web_reg_save_param_regexp("ParamName=username","RegExp=username=(.*?)&","Ordinal=1","NotFound=WARNING","Search=Body",LAST);在后续请求中,可以使用{username}来引用这个提取出的参数值。
Loadrunner脚本优化-关联解析
2019/2/22
27
四、使用WinDiff手动关联
• 手动关联详细介绍:
– 第四步:在View Script中使用web_reg_save_param函数手动 建立关联 1、在找到的代码行的上方点击鼠标右键,选择【insert】> 【New step…】 2、在【Add Step】 窗口的【Find Function】中输入 Web_reg_save_param 函数并选中后点击【OK】 3、Parameter Name处输入参数名称,建议有意义的名字。 4、在【Left Boundary】中输入左边界字符串 5、在【Right Boundary】中输入右边界字符串 6、点击【OK】按钮
2019/2/22
9
二、自动关联
单击Vusons选项 (使用自动关联前,脚本需运行一次)运行后会看到 以下内容,VuGen已识别出脚本中动态内容
2019/2/22
10
二、自动关联
单击Correlate按钮后,便生成了一个关联。关联前后 的内容以及所属的Action也被列了出来。
2019/2/22 28
四、使用WinDiff手动关联
• 手动关联详细介绍:
– 第五步:将脚本中有用到关联的数据,用参数代替 1、当使用web_reg_save_param建立参数后,接下 来就是用“之前定义的参数名”参数去取代脚本中写死 的(hard-coded)资料。 – 第六步:验证关联的正确性 1、执行脚本,是否能成功运行,假如还是有问题, 就要检查看看是否还需要再做另一个关联。
三、 手工关联
第一步:设置运行时刻
该选项可以把从 web服务器返回的 数据显示在执行日 志里面,你可以在 里面分析确定动态 内容的左右边界
loadRunner基本概念说明
loadRunner基本概念说明1、事务(Transaction)是这样一个点,我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个 transaction,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。
这个事务的运行时间在结果中会有反映。
所以 LR 的事务添加操作就是把测试所需要关注的操作定义成事务告诉 LR,这个是我想要重点检测性能的操作。
LR就会在运行过程中记录事务内操作的响应事件等性能数据。
并在Analysis中以报告的形式给出统计结果。
lr_start_transaction(”SubmitBookData”);/*中间代码部分*/lr_end_transaction(”SubmitBookData”, LR_AUTO);2、集合点(Rendezvous)集合点:是一个并发访问的点,在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LoadRunner中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000人,LoadRunner就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,并发访问的目的。
注意:集合点经常和事务结合起来使用,常放在事务的前面,集合点只能插入到Action 部分,vuser_init和vuser_end 中不能插入集合点。
集合点函数如下,参数不能加空格:lr_rendezvous(”SumitQueryData”); 加入集合点之后,在后面运行过程中可以看到VU的状态,会等待集合。
3、IP Spoofer(IP 欺骗)LoadRunner允许运行的虚拟用户使用不同的IP 访问同一网站,这种技术称为“IP 欺骗”。
loadrunner关联参数的问题
loadrunner关联参数的问题loadrunner关联分为两种一种是自动关联,一种是手动关联其实网上也有很多的实例供大家参考,自动关联可以从Recording Options设置Correlation可以把你要关联的规则设置好,当录制之前选择就你设置的这个规则,然后录制就行了第二种是手动关联,当你录制玩脚本的时候,没有设置关联,那么你需要手动就行关联手动关联的函数:Web_reg_save_parm参数的详细内容下表列出可用的属性。
注意,属性值字符串(例如Search=all)不区分大小写。
NotFound找不到边界并且生成了空字符串时的处理方法。
默认值“ERROR”表示找不到边界时LoadRunner应发出错误消息。
如果设置为“EMPTY”,则不会发出错误消息,并且脚本的执行将继续进行。
注意,如果为脚本启用了“出现错误时仍继续”,则即使将NOTFOUND 设置为“ERROR”,在找不到边界时脚本将仍然会继续执行,但会将错误消息写入扩展日志文件中LB参数或动态数据的左边界。
此参数必须为非空的、以null 结尾的字符串。
边界参数区分大小写;要忽略大小写,请在边界之后添加“/IC”。
如果在边界之后指定“/BIN”,则指定为二进制数据RB参数或动态数据的右边界。
此参数必须为非空的、以null 结尾的字符串。
边界参数区分大小写;要忽略大小写,请在边界之后添加“/IC”。
如果在边界之后指定“/BIN”,则指定为二进制数据.LB/RB赋值的是你要抓取文本的左/右边的内容,例如你要从"abcdefghijk"中抓取"de"保存在变量中,那么LB="abc"和RB="fghijk"就可以抓到你要的东西了RelFrameID与请求的URL 相关的HTML 页的层次结构级别。
LoadRunner自带程序登录功能_关联详解
LoadRunner自带程序登录功能关联演示本文主要讲解一下LoadRunner的关联技术,我们以LoadRunner自带的WEB订票程序为范例,首先录制一段LoadRunner自带的飞机订票程序,录制登录功能即可。
为了让自带程序登录时验证Session,在录制登录脚本前,需要对订票程序做一些设置,启用隐藏字段标记(Session)1)打开订票程序WEB网站,点击Administrator链接:2)进入管理页面,选中Set LOGIN form's action tag to an error page3)点击管理页面最下方的update按钮,保存并更新配置。
好,做完设置之后,我们开始录制一个登录操作脚本,录制登录操作后,产生的一段代码为:Action(){web_url("WebTours","URL=http://127.0.0.1:1080/WebTours/","Resource=0","RecContentType=text/html","Referer=","Snapshot=t1.inf","Mode=HTML",LAST);lr_think_time(20);lr_start_transaction("login");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=t2.inf","Mode=HTML",ITEMDATA,"Name=userSession", "Value=109939.233211827fzftQQQpDAiDDDDDDDQcQpQQfif", ENDITEM,"Name=username", "Value=jojo", ENDITEM,"Name=password", "Value=bean", ENDITEM,"Name=JSFormSubmit", "Value=on", ENDITEM,"Name=login.x", "Value=43", ENDITEM,"Name=login.y", "Value=7", ENDITEM,LAST);lr_end_transaction("login",LR_AUTO);return 0;}直接进行回放,在Replay Log中,可以看到,没有任何报错,呵呵,脚本运行成功了:),我可以开始准备设计场景运行该脚本了。
LoadRunner参数化关联
LoadRunner参数化关联我们⽤ HTTP 协议做脚本,要注意的是,不同协议的函数是不⼀样的,假如换 websocket 协议,关联函数就要⽤其他的参数化原理1、什么叫参数化 把脚本内⼀个写死的值,去⼀个数组内取值,进⾏替换2、为什么要参数化 烂⼤街的回答:模拟真实场景,模拟真实情况 真实原因:应⽤程序/数据库对数据有唯⼀性要求(应⽤程序内就是单点登录;数据库内就是该字段为 Unique ,唯⼀)避免查询缓存对结果造成失真(重复查询同⼀条数据,如果该数据的表内开启了查询缓存,则会命中。
那么响应时间会⽐市价值偏⼩)3、可不可以不⽤参数化 查询缓存的开关是⽤query_cache_size = 20M和query_cache_type = ON 打开查询缓存,程序校验就得修改代码了,数据库唯⼀要求,把 Unique 的限制给拿掉就ok如何参数化(参数化会变紫)1、选中需要参数化的内容,右键,选择"Replace with a Parameter",2、为参数命名,并且制定参数取值的⽂件格式 Parameter name,就是我么那要设定的参数名,这个是不能重复的 Parameter type 是参数取值的⽅式,这个 file 是从 .bat ⽂件中取值,这个⽂件会⾃动⽣成在项⽬路径下结果:例如:web_submit_data("提交","Action=http://192.168.66.129/bbs/member.php?mod=register&inajax=1","Method=POST","TargetFrame=","Referer=http://192.168.66.129/bbs/member.php?mod=register",ITEMDATA,"Name=regsubmit", "Value=yes", ENDITEM,"Name=formhash", "Value={formhash}", ENDITEM,"Name=referer", "Value=http://192.168.66.129/bbs/forum.php", ENDITEM,"Name=activationauth", "Value=", ENDITEM,"Name={Name}", "Value=hua00{username}", ENDITEM,"Name={pass}", "Value=123456", ENDITEM,"Name={conpass}", "Value=123456", ENDITEM,"Name={mail}", "Value=hua00{username}@", ENDITEM,LAST);另⼀种情况,我们要把另⼀个数值也运⽤之前同⼀个参数咋办?另外,我们的参数化还有种⽅式:可以先建好,然后再脚本内⽤,这种情况适⽤于只给了脚本,但是没有给参数化⽂件的情况打开变量列表,填写变量值参数化变量和值是怎样对应的根据脚本中的参数名({username})去找参数列表中的的参数username,再去找参数列表中的username对应的bat⽂件注意,我们 loadrunner 的参数化默认是以 {} 为边界的,我们也可以修改这个参数化的边界类型:在 Tools-->General Options-->Parameterization的Paramrter Braces 内可以设置,我们可以看到默认是 {}参数化策略 最常⽤的取值⽅式:唯⼀(Unique+XX)我们写⼀个脚本来执⾏不同的参数化策略:Action(){int i; //申明变量for (i = 0;i<2;i++) { //循环char *a = "{p1}"; //获取参数值传给 achar *b = "{p2}"; //获取参数值传给 bchar *c = "{p1}"; //获取参数值传给 clr_output_message("%s,\t%s,\t%s",lr_eval_string(a),lr_eval_string(b),lr_eval_string(c)); //分贝演⽰ 9 种不同的参数化策略组合结果}return0;}如下Loadrunner参数化取值策略由[select next row]、[update value on]两部分组成。
loadrunner关联函数
loadrunner关联函数LoadRunner是一款性能测试工具,可以模拟多种协议的用户行为,通过对系统进行压力测试、负载测试、并发测试等多种测试方式进行性能评估。
在LoadRunner中,关联函数是非常重要的一种函数类型,它可以将服务器返回的数据提取出来并赋值给变量,以便后续脚本中使用。
一、关联函数概述1.1 关联函数定义关联函数是LoadRunner中的一种特殊函数类型,用于从服务器返回的响应中提取数据,并将其赋值给变量。
关联函数通常用于需要使用服务器返回数据作为后续请求参数的情况。
1.2 关联函数分类在LoadRunner中,关联函数可以分为以下几类:(1)web_reg_save_param:用于从Web应用程序返回的HTML或XML响应中提取数据。
(2)web_reg_save_param_ex:与web_reg_save_param类似,但支持更灵活的参数化选项。
(3)lr_save_string:用于从任何类型的响应中提取数据。
(4)lr_xml_find:用于从XML响应中提取数据。
二、web_reg_save_param关联函数详解2.1 web_reg_save_param语法格式web_reg_save_param("ParamName", "LB=LeftBoundary", "RB=RightBoundary", "Ordinal=All", "Search=Body", LAST);其中各参数含义如下:(1)ParamName:被保存参数的名称。
(2)LB:左边界,用于标识被保存参数的起始位置。
(3)RB:右边界,用于标识被保存参数的结束位置。
(4)Ordinal:指定哪一个匹配项被保存,可以是All、First或Last,默认为All。
(5)Search:指定从响应体中搜索还是从响应头中搜索,可以是Body或Header,默认为Body。
LoadRunner简介LoadRunner特性LoadRunner
五、LoadRunner的测试举例
点击观看一个录制的测试过程。
六、VuGen使用的介绍
1、VuGen的介绍
LoadRunner拥有各种虚拟用户类型,每一类型都适合于特定的 负载测试环境。这样就能够使用Vuser精确模拟真实世界的情形。 Vuser在方案中执行的操作是用Vuser脚本描述的;
四、LoadRunner的测试过程
监视方案:
使用LoadRunner联机运行时、事务、系统资源、Web 服务器资源、 数据库服务器资源、网络延时、流媒体资源、防火墙服务器资源、 Java 性能等、应用程序部署和中间件性能监视器来监视方案的执行;
分析测试结果:
在方案执行期间,LoadRunner将记录不同负载下的应用程序性能。 可以使用LoadRunner的图和报告来分析应用程序的性能;
五、LoadRunner的测试举例
下面以测试二期积分网站http://132、77、119、162:8001/为例来讲 解LoadRunner的测试过程
1、启动LoadRunner 选择:开始->程序->Mercury LoadRunner->LoadRunner
五、LoadRunner的测试举例
六、VuGen使用的介绍
• 具体的操作方法如下:
在需要插入集合点的前面,点击菜单插入->集合点,也可在 录制时按插入集合点按钮
注意:集合点经常和事务结合起来使用。集合点只能插入 到Action 部分,vuser_init和vuser_end中不能插入集合 点!!!
六、VuGen使用的介绍
loadrunner参数传递
loadrunner参数传递摘要:一、LoadRunner简介1.LoadRunner背景2.LoadRunner的作用二、LoadRunner参数传递1.参数传递的概念2.参数传递的方式a.方法一:通过关联参数b.方法二:通过参数文件c.方法三:通过代码直接设置三、参数传递的注意事项1.参数类型与数据格式2.参数命名规范3.参数传递顺序四、LoadRunner参数传递的实际应用1.实际案例一2.实际案例二正文:LoadRunner是一款功能强大的负载测试工具,广泛应用于软件性能测试领域。
它能够模拟大量用户同时访问系统,以测试系统在高负载下的稳定性和性能。
为了更好地完成负载测试任务,LoadRunner提供了丰富的参数传递功能,让用户能够灵活地控制和调整测试过程。
本文将详细介绍LoadRunner参数传递的相关知识。
首先,我们需要了解LoadRunner参数传递的概念。
参数传递是指在LoadRunner脚本中,将需要变化的值或者数据通过一定的方式传递给被测试程序,以便在测试过程中根据需求动态调整测试参数。
LoadRunner提供了多种参数传递方式,包括关联参数、参数文件和代码直接设置。
接下来,我们将详细介绍这三种参数传递方式。
1.关联参数:这是一种最常用的参数传递方式。
在LoadRunner中,用户可以创建关联参数集,并将需要传递的参数与其关联。
在脚本执行过程中,可以根据需要动态选择关联参数集中的参数值。
这种方式的优点是简单易用,但需要注意的是,关联参数需要在脚本中手动设置和修改。
2.参数文件:LoadRunner支持将参数存储在文本文件中,通过读取文件内容来实现参数传递。
这种方式的优点是可以方便地管理和修改参数,同时避免了在脚本中直接修改参数的繁琐。
需要注意的是,参数文件的格式和内容需要遵循LoadRunner的规定。
3.代码直接设置:LoadRunner允许用户通过编程方式直接设置参数。
这种方式的优点是可以实现更复杂、更灵活的参数控制,但需要一定的编程基础。
第七章 LoadRunner 自动关联
第Hale Waihona Puke 七 章本节的内容提纲• 学习在录制以后进行关联的方法。 • 学习在录制脚本过程中进行关联的方法。
录制后自动关联的七大步骤
1. 回放脚本 2. 脚本回放失败,分析确定是否需要关联。如果是,则选中General Options中的“Save correlation information during replay”选项。 3. 重新回放脚本。
在录制过程中进行关联
1. LoadRunner可以基于Recording Options中事先定义好的规则,进行自动关 联。 2. 在录制之前,设置Recording Options中的关联选项。 3. 在录制过程中,如果服务器端产生的数据,重新被客户端发往服务器端, LoadRunner根据规则捕获到这样需要关联的信息,则根据你设置的关联选 项进行自动关联,或者弹处一个对话框,提供用户进行选择。
演示 – 如何在录制完毕后进行自动关联
进行自动关联的要点
录制的脚本必须至少回放一遍。 回放的结果和录制时的结果进行比较。 回放脚本完毕后,使用内嵌的“Scan Action for Correlations”进行自动关联
什么情况适合录制过程中进行关联
• 录制的Web应用的服务器是在Recording Options 列表中的成熟的服务器(它们需要关联的动态信息 都是确定的)。
演示 – 创建规则的第二种方法
小结
在本节中,我们学习了如何在录制过程中和录制完毕后 进行自动关联。 • 由于关联是调整脚本过程中非常烦琐的一个工作,VuGen 提供了两种自动关联的方法。它们的本质都是使用 web_reg_save_param函数对脚本进行修改,修改的方法 和手动关联是一致的,所以深刻理解手工关联是重点。 • LoadRunner目前只提供对Web协议脚本的自动关联功能 。对于其它协议的脚本,则没有自动关联功能。
LoadRunner运行设置及关联
LoadRunner运行设置(Run-Time Settings) Run LogicPacingLogThink TimeMiscellaneousBrowser Emulation其它设置选择默认值关联LoadRunner脚本关联动态数据的最简单方法百度或Google一下“如何在LoadRunner脚本中做关联(Correlation)”,你会搜索到在网上相互转载的很经典的一篇文章。
洋洋洒洒近6000汉字,像个小百科全书。
对于关联Correlation的概念,对web_reg_save_param()方法的参数的解释,你还可以参考那篇文章学习一下。
对于如何手动关联动态数据,如果按那篇文档做,你可能需要2小时才能完成一个复杂测试场景的动态数据关联,使用本文档下面介绍的方法,不管多么复杂只需2分钟就能完成关联动态数据。
为什么要关联动态数据呢?举个例子,在对我们平台的工作流性能测试时,在待办任务里面选择一条记录执行发送操作,LoadRunner VuGen会详细记录下来流程发送操作的细节,但在回放脚本的时候会有问题。
待办任务里面找不到那条记录了,已经发送到下一个环节了。
另一个更易理解的例子,在初始化查询页面,选择一条记录进行删除,录下脚本进行回放的时候会出错,记录已经删除了,回放脚本的时候服务器返回的记录不再包含那条记录,再向服务器发送删除那条记录的请求,就报错了。
关联动态数据需要我们在脚本中设置一个变量,保存从服务器返回的起标识作用的数据,发送请求的时候使用该变量代替动态数据,这样再回放、反复测试就不会报错了。
需要关联的标识性数据一般是各种主键,工作流的发送的例子很复杂,需要对流程编码、环节编码、参与者编码、表单编码等进行关联,下面使用复杂的工作流发送的例子进行演示。
手动关联动态数据的复杂做法是,回放脚本,在Execution Log和Recoding Log打出的信息中找需要关联的动态数据及动态数据的左右边界。
第六章 LoadRunner 手工关联
关联函数web_reg_save_param的参数 的参数 关联函数
web_reg_save_param 具有如下参数 具有如下参数:
用户定义的参数名称 表明后面没有参数
("param_name", <List of Attributes>*, LAST); "LB=", "RB=", "ORD=",
第五步: 第五步:用参数替换脚本,验证关联正确
总结
在本章中,我们学习了如下内容: 在本章中,我们学习了如下内容:
• 了解了关联的基本概念和重要性。 了解了关联的基本概念和重要性。 • 学习了手工关联的步骤。 学习了手工关联的步骤。 • 重点内容是 重点内容是web_reg_save_param函数的用法。 函数的用法。 函数的用法
2
录制
3
增强 • 事务 •检查点 检查点 •参数化 参数化 • 关联
4
测试
收集相关的 测试信息
录制一个虚拟 用户脚本
回放脚本来验证 脚本的正确性
手工关联的步骤
1. 设置“ 中的日志选项“ 设置“Runtime Setting”中的日志选项“Data return by 中的日志选项 server”,回放脚本,分析脚本运行失败的原因是否是因为关 回放脚本, 回放脚本 联造成的。 联造成的。 在脚本中分析确定需要关联的动态内容。 在脚本中分析确定需要关联的动态内容。 确定要关联的动态内容的“左边界”、 “右边界”和发生次 右边界” 确定要关联的动态内容的“左边界” 数。 在脚本适当的位置插入“ 关联函数。 在脚本适当的位置插入“web_reg_save_param”关联函数。 关联函数 在脚本中动态内容出现的地方,使用参数替换“写死” 在脚本中动态内容出现的地方,使用参数替换“写死”的动 态内容。 态内容。 重新运行脚本,确保关联后的脚本能够运行成功。 重新运行脚本,确保关联后的脚本能够运行成功。
loadrunner关联函数
loadrunner关联函数(WRSP)使用-案例(1)关联函数的使用关联的用途:用于处理请求间依赖关系,只要从服务端返回的数据中获得下一步要使用的数据。
Web_reg_save_param()(WRSP)图1是WRSP的使用的图形界面,根据自己的需要填写相关的内容,就会生成相关的脚本。
我来看看界面中相关的内容有Parameter Name、Left Boundary、Right Boundary、Instance、Relative Frame ID、Not Found、Search in、Sava length、Save offset等等的设置。
我们以下通过例子来说他们的作用现在我们打开百度网站看到里面然后查看该页的源码。
以下就是百度网页源码的一部分代码现在我们想在百度页面中《新闻》两个字出来,下一步进行搜索做为关键词去使用。
代码中的红色的字体的以上的脚本是用《新 闻》来做关键字的不适合我们的需求,下面我们优化一下关联把我们要的《新闻》取出来。
累了-案例一就到这结束loadrunner中的关联(z)录制:web登录邮箱,发送一封带有附件的邮件.但是,每次执行的时候服务器的返回值-附件变量"AttFilles"是不一样的,所以需要将这个变量"AttFilles"做一下关联!关联的方法大体上可以分为手工关联和自动关联.这两种方法各有所长,手工的比较保险,但是需要自己去找关联函数的位置和需要关联的参数,然后一一替代,自动关联就比较简单了,找到关联参数的特征,运行的时候自动关联就是了,但是,有时候自动关联不是很完整,可能有的参数找不全!因为我录的脚本是比较简单的,需要关联的参数只有一个,所以,自动关联还是比较可靠的!我知道的自动关联方式也有两种,我把它们分别定义为:变量名关联和变量值关联!下面大概说一下录制到关联的过程。
一般情况下都是先录制两份相同的脚本,这里的相同是指录制时执行的业务流程,然后用工具比较两个脚本中变化的变量我个人比较喜欢用ultraedit,loadrunner自身也有一个比较的工具,但是感觉这个用起来比较快!好了,找到变量就该关联了,下面是我采用的几种关联方法:变量名关联:前提条件,我已经知道整个脚本中需要关联的变量名是:"AttFiles".那么,需要:RecordOption-Correlation,新建一个"aaa"的关联名,规则为:Action:parameterizeformfiled value;Field name:AttFiles;ParameterPrefix:AttFiles;然后重新录制该脚本,录制的过程中,自然会有关联的提示,只需OK就可以了!变量值关联:前提条件,我已经知道整个脚本中需要关联的变量名是"AttFiles".RecordOption-Correlation,新建一个"bbb"的关联名,规则为:Action: Search for parameters in all of the body text Left bounday:还有一点就是,这个左右边界值,一定要是服务器的返回值(response from server),而不是用户发出的请求值(user request),这个值可以在recording log里找,然后重新录制该脚本,录制的过程中,自然会有关联的提示,只需OK就可以了!手工关联:在脚本中输入函数:web_reg_save_param("ATT","LB="input type="hidden" name="AttFiles" value=","RB=>",LAST,);手工关联的关键在于这个函数位置怎么放,之前有看过一个台湾作者的笔记,但是自己实在是笨,怎么也找不到。
loadrunner 常见的关联函数
LoadRunner是一个功能强大的性能测试工具,常用于对软件和网络应用进行压力测试,以评估它们在不同负载下的性能表现。
在LoadRunner中,关联函数是至关重要的,因为它们能够帮助测试人员捕获并处理动态参数,确保测试脚本的准确性和可重复性。
1. 简介LoadRunner中的关联函数是用来处理动态参数的,因为大多数Web 应用是动态生成内容的。
在录制脚本时,很多参数是动态生成的,比如会话ID、时间戳、随机数等。
如果这些参数不被正确地捕获和处理,测试脚本就无法达到预期的效果。
2. 常见的关联函数在实际的测试工作中,有一些常见的关联函数经常被用到,比如:- web_reg_save_param:用于捕获服务器返回的参数,并将其保存在参数列表中以备后续使用。
- web_reg_save_param_ex:与web_reg_save_param类似,但它允许用户提供更多的选项和参数。
- web_reg_save_param_regexp:用于从服务器响应中提取特定模式的参数。
- web_reg_save_param_json:专门用于从JSON格式的响应中提取参数。
3. 如何使用关联函数在脚本录制完成后,测试人员需要对录制的脚本进行一些修改和优化,其中就包括对动态参数的处理。
通常的步骤如下:- 需要分析录制的脚本,找出其中需要处理的动态参数。
- 在对应的请求中加入适当的关联函数,以捕获并保存动态参数。
- 需要对关联函数进行参数化设置,确保它们在每次运行时都能正确地捕获和处理参数。
4. 个人观点关联函数在LoadRunner中扮演着非常重要的角色,它们直接影响着测试脚本的准确性和可重复性。
在实际的测试工作中,熟练掌握各种关联函数的用法是非常必要的。
对于一些特殊的应用和协议,测试人员可能还需要自行开发定制的关联函数来满足测试需求。
关联函数在LoadRunner性能测试中扮演着不可或缺的角色。
通过正确地使用和参数化关联函数,测试人员能够有效地应对各种动态参数,确保测试脚本的有效性和可靠性。
Loadrunner中的关联
器,这些服务器在每个浏览器第一次跟它要数据时, 都会在数据中夹带一个唯一的辨识码,接下来就会利 用这个辨识码来辨识跟它要数据的是不是同一个浏览 器。一般称这个辨识码为Session ID。对于每个新的交 易,服务器都会产生新的Session ID给浏览器。这也就 是为什么执行脚本会失败的原因,因为VuGen还是用 旧的Session ID向服务器要数据,服务器会发现这个 Session ID是失效的或是它根本不认识这个Session ID ,当然就不会传送正确的网页数据给VuGen了。
当执行脚本时,您可以把VuGen想象成是一个演员,它伪装成浏 览器,然后根据脚本,把当初真的浏览器所说过的话,再对网站 伺服器重新说一遍,VuGen企图骗过服务器,让服务器以为它就 是当初的浏览器,然后把网站内容传送给VuGen。 所以纪录在脚本中要跟服务器所说的话,完全与当初录制时所说 的一样,是写死的(hard-coded)。这样的作法在遇到有些比较 聪明的服务器时,还是会失效。这时就需要透过「关联( correlation)」的做法来让VuGen可以再次成功地骗过服务器。
Correlation Studio
注意:由于Correlation Studio会找出所有有变 动的数据,但是并不是所有的数据都需要做关 联
如果没有弹出询问窗口,则点击scan script for correlation按钮
手动关联
手动关联的执行过程大致如下: 1、录制两份脚本业务过程与数据(过程与数据
Rules Correlation
内建(Built-in Correlation):
针对一些常用的应用系统进行内建关联,如: AribaBuyer、BlueMartini、BroadVision、 InterStage、mySAP、NetDynamics、Oracle 、PeopleSoft、Siebel、SilverJRunner
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是关联所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。
举一个常见的例子,刚刚提到有些比较聪明的服务器,这些服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。
一般称这个辨识码为Session ID。
对于每个新的交易,服务器都会产生新的Session ID给浏览器。
这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要数据,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页数据给VuGen了。
要如何做关联(correlation)?关联(correlation)函数关联(correlation)会用到下列的函数:∙web_reg_save_param:这是最新版,也是最常用来做关联(correlation)的函数。
语法:web_reg_save_param ( “Parameter Name” , < list of Att ributes >, LAST );∙web_create_html_param、web_create_html_param_ex:这二个函数主要是保留作为向前兼容的目的的。
建议使用web_reg_save_param 函数。
详细用法请参考使用手册。
在VuGen中点选【Help】>【Function reference】>【Contexts】>【Web and Wireless Vuser Functions】>【Correlation Functions】。
如何找出要关联(correlation)数据简单的说,每一次执行时都会变动的值,就有可能需要做关联(correlation)。
VuGen提供二种方式帮助您找出需要做关联(correlation)的值:1. 自动关联2. 手动关联自动关联VuGen内建自动关联引擎(auto-correlation engine),可以自动找出需要关联的值,并且自动使用关联函数建立关联。
自动关联提供下列二种机制:∙Rules Correlation:在录制过程中VuGen会根据订定的规则,实时自动找出要关联的值。
规则来源有两种:o内建(Built-in Correlation):VuGen已经针对常用的一些应用系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,内建关联规则,这些应用系统可能会有一种以上的关联规则。
您可以在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。
您也可以在【Recording Options】>【Internet Protocol】>【Correlation】检视每个关联规则的定义。
o使用者自订(User-defined Rules Correlation):除了内建的关联规则之外,使用者也可以自订关联规则。
您可以在【Recording Options】>【Internet Protocol】>【Correlation】建立新的关联规则。
Correlation Studio:有别于Rules Correlation,Correlation Studio则是在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。
Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
Rule Correlation请依照以下步骤使用Rule Correlation:1. 启用auto-correlation1. 点选VuGen的【Tools】>【Recording Options】,开启【Recording Options】对话窗口,选取【Internet Protocol】>【Correlation】,勾选【Enable correlationduring recording】,以启用自动关联。
2. 假如录制的应用系统属于内建关联规则的系统,如AribaBuyer、BlueMartini、BroadVision、InterStage、mySAP、NetDynamics、Oracle、PeopleSoft、Siebel、SilverJRunner等,请勾选相对应的应用系统。
3. 或者也可以针对录制的应用系统加入新的关联规则,此即为使用者自订的关联规则。
4. 设定当VuGen侦测到符合关联规则的数据时,要如何处理:▪【Issue a pop-up message and let me decide online】:跳出一个讯息对话窗口,询问您是否要建立关联。
▪【Perform correlation in sceipt】:直接自动建立关联2. 录制脚本开始录制脚本,在录制过程中,当VuGen侦测到符合关联规则的数据时,会依照设定建立关联,您会在脚本中看到类似以下的脚本,此为BroadVision应用系统建立关联的例子,在脚本批注部分可以看到关联前的数据为何。
3. 执行脚本验证关联是OK的。
Correlation Studio当录制的应用系统不属于VuGen预设支持的应用系统时,Rule Correlation可能既无法发挥作用,这时可以利用Correlation Studio来做关联。
Correlation Studio会尝试找出录制时与执行时,服务器响应内容的差异部分,藉以找出需要关联的数据,并建立关联。
使用Correlation Studio的步骤如下:1. 录制脚本并执行2. 执行完毕后,VuGen会跳出下面的【Scan Action for Correlation】窗口,询问您是否要扫描脚本并建立关联,按下【Yes】按钮。
3. 扫描完后,可以在脚本下方的【Correlation Results】中看到扫描的结果。
4. 检查一下扫瞄的结果后,选择要做关联的数据,然后按下【Correlate】按钮,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。
注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。
5. 一般来说,您必须一直重复步骤1~4直到所有需要做关联的数据都找出来为止。
因为有时前面的关联还没做好之前,将无法执行到后面需要做关联的部份。
有可能有些需要做关联的动态数据,连Correlation Studio都无法侦测出来,这时您就需要自行做手动关联了。
手动关联手动关联的执行过程大致如下:1.使用相同的业务流程与数据,录制二份脚本2.使用WinDiff工具协助找出需要关联的数据3.使用web_reg_save_param函数手动建立关联4.将脚本中有用到关联的数据,以参数取代接下来将详细的说明如何执行每个步骤使用相同的业务流程与数据,录制二份脚本1.先录制一份脚本并存档。
2.依照相同的操作步骤与数据录制第二份脚本并存盘。
注意,所有的步骤和输入的数据一定都要一样,这样才能找出由服务器端产生的动态数据。
有时候会遇到真的无法使用相同的输入数据,那您也要记住您使用的输入数据,到时才能判断是您输入的数据,还是变动的数据。
使用WinDiff工具协助找出需要关联的数据1.在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
2.接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。
WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。
(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。
3.逐一检视二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。
选取差异的脚本,然后复制。
在复制时,有时并不需要取整行脚本,可能只会选取脚本中的一部分。
注意:请忽略lr_thik_time的差异部份,因为lr_thik_time是用来模拟每个步骤之间使用者思考延迟的时间。
4.接着要在Recording Log(单一protocol)或是Generation Log(多重protocol)中找这个值。
将鼠标光标点到Recording Log的第一行开头,按下Ctrl+F,开启【Find】窗口,贴上刚刚复制的脚本,找出在Recording Log第一次出现的位置。
结果会有二种:o在Recording Log中找不到要找的数据,这时请先确认您找对了脚本,毕竟现在开启了二个几乎一样的脚本,很容易弄错。
o在Recording Log中找到了要找的数据,这时要确认数据是从服务器端传送过来的。
首先可以先检查数据的标头,从标头的Receiving response可以知道数据是从服务器端传送到client端的。
假如此数据第一次出现是在Sending request中,则表示此数据是由client端产生,不需要做关联,但是有可能需要做参数化(parameterized)。
您要找的标头格式如下:*** [tid=b9 Action1 2] Receiving response from host:80 ( 25/11/2002 12:04:00 )5.现在您已经找到录制二次都不一样,而且是由服务器所产生的动态数据了,而此数据极有可能需要做关联。
使用web_reg_save_param函数手动建立关联在找到是由服务器所产生的动态数据之后,接下来要做的就是找出适当的位置,使用web_reg_save_param函数,将这个动态数据撷取到某个参数中。
1.要在哪里使用web_reg_save_param函数?在之前的步骤,我们已经在Execution Log找到可能需要关联的动态数据。
在Execution Log中选取动态数据前的文字然后复制,我们将会利用这段文字,来帮助我们找出要关联的动态数据。
不过在这之前我们要先找出使用web_reg_save_param函数的正确位置,所以我们要再重新执行一遍脚本,而且这次会开启所有的Log。