关于Loadrunner关联
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表示第三个,就是左右边界条件的第三个参数(也就是满足左右条件的参数不只一个,就可以用空上函数来取值)。
LoadRunner如何建立关联
LoadRunner如何建立关联关于loadrunner关联一、什么时候需要关联1.关联的含义关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。
其实关联也属一同特定的参数化,只是与通常的参数化有些相同一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值2.什么时候需要做关联必须想要弄清楚这个问题,我们首先必须晓得客户端与服务器端的命令与积极响应的过程过程表明:客户端发出获得登录页面的请求服务器端获得该命令后,回到登入页面,同时动态分解成一个sessionid当用户输入用户名密码,请求登录时,该sessionid同时被发送到服务器端如果该sessionid在当前可以话中有效率,那么回到登入顺利的页面,如果不恰当则登入失利在第一次演唱过程中loadrunner把这个值记录了下来,写道了脚本中,但再次录像时,客户端收到同样的命令,而服务器端再一次动态的分解成了sessionid,此时客户端收到的命令就是错误的,为了赢得这个动态的sessionid我们这里使用了关联。
所以我们得出结论:当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联当然我们在录制脚本时应该对测试的项目进行适当的了解,知道哪些请求需要用到服务器响应的动态值,如果我们不明确那些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析二、自动关联loadrunner参数化自动关联涵盖两种机制:一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如:自动关联所检测到的关联点不一定真的需要进行关联,这要我们更具实际情况进行判断;有些需要关联的动态数据自动关联无法找到,这是就需要做手动关联另一种就是loadrunner自带的自动关联规则,在演唱脚本时,可以根据这些规则自动建立关联自动关联的步骤如下:1.打开自动关联选项刚才提到的两种关联机制,如果用户想使用loadrunner自带的关联规则创建关联,那么需要在【recordingoptions】>【internetprotocol】>【correlation】中启用关联规则,选中“enablecorrelationduringrecording”,当录制这些应用系统的脚本时,vugen会在脚本中自动建立关联。
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关联语句1
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
"Snapshot=t5.inf",
"Mode=HTTP",
LAST);
web_url("welcome.pl",
Action()
{
web_set_max_html_param_len ("2048");
web_url("WebTours",
"URL=http://127.0.0.1:1080/WebTours/",
"Resource=0",
"RecContentType=text/html",
"Resource=1",
"RecContentType=image/gif",
"Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home",
"Snapshot=t14.inf",
LAST);
"URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true",
"Resource=0",
"RecContentType=text/html",
"Referer=http://127.0.0.1:1080/WebTours/",
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 自动关联
第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关联实例操作详解_SariyaLee
关联实例操作详解By SariyaLee 2013-01-08Contents关联实例详解 (1)一、手动关联 (3)1. 录制脚本 (3)1) 选择协议,设置录制url (3)2) 选择录制方式 (3)3) 开始录制脚本 (4)4) 脚本 (4)2. 找出服务器返回的动态数据 (10)1) 重复步骤1,再次录制相同的内容(操作步骤与步骤1一致) (10)2) 使用WinDiff找出脚本的不同 (10)注1:关联值的特点 (10)3. 插入关联函数,并将数据替换为关联函数中的参数 (10)1) 选择Tree模式,找出插入关联函数的位置 (10)注2:web_reg_save_param和web_reg_save_param_ex函数解释 (12)2) 将具体的值替换为参数 (13)注3:lr_output_message ()和lr_eval_string()语法 (13)4. 回放脚本检验关联函数设置是否正确 (14)1) 设置log (14)注4:log设置含义 (14)2) 设置编码格式 (14)注5:如何设置合适的编码格式解决replay log中的中文乱码问题 (15)3) 回放 (16)二、自动关联 (16)1. 录制脚本 (16)2. 自动搜索需关联的值 (16)1) 回放脚本 (16)2) 找出动态的值 (16)注6:自动关联的局限 (17)三、一边录制一边关联 (17)1. 设置rule Correlation (17)2. 录制脚本 (18)在回放脚本时有时会发生回放错误的问题,多数情况下是由于没有关联引起的。
关联就是将录制脚本时服务器端返回的值(该值需要再次传送给服务器端),转换成动态的值发送到服务器端,如SessionID、书名、航班号等。
本文主要介绍手动关联的使用,也是最常用的一种关联方法,另外两种自动关联和一边录制一边关联则简单介绍,有兴趣的读者可以自行研究。
一、手动关联以新浪爱问共享为例实践手动关联的功能地址为:/脚本实现的功能如下:打开新浪爱问共享资源库首页,点击资料推荐中第一个链接,进入到该资料的详细信息页面步骤如下:1.录制脚本1)选择协议,设置录制url点击New Vuser Script…,选择WEB(HTTP/HTML)协议在start recording页面中设置:url:/Record in action:action2)选择录制方式点击Options,进入到recording Options页面中,选择InternetProtocol>Recording,选择如下图:点击OK3)开始录制脚本回到start recording页面,点击OK开始录制脚本4)脚本录制的脚本如下:(已删除cookie部分和无关的资源信息)"RecContentType=text/html","Referer=/","Snapshot=t2.inf","Mode=HTML",LAST);web_url("data.html","URL=/data.html","Resource=0","RecContentType=text/html","Referer=/","Snapshot=t3.inf","Mode=HTML",EXTRARES,"Url=/data.swf", ENDITEM,LAST);lr_start_transaction("search")lr_think_time(18);web_url("35347297.html","URL=/f/35347297.html?from=ii01","Resource=0","RecContentType=text/html","Referer=/","Snapshot=t4.inf","Mode=HTML",EXTRARES,"Url=/pfp/iask/images/zhishi/close_detail.gif","Referer=/f/35347297.html?from=ii01", ENDITEM, "Url=/pfp/i/z3/hbg.gif","Referer=/f/35347297.html?from=ii01", ENDITEM, LAST);web_url("stat.html","URL=/stat.html?appkey=vdisk&type=A&card=7901d21bffcbb204e94c 0290043c58b7&address=3&rand=0.9523009497880321","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01",LAST);web_url("stat.html_2","URL=/stat.html?appkey=vdisk&type=A&card=7901d21bffcbb204e94c 0290043c58b7&address=0&rand=0.6173976200780206","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01","Mode=HTML",EXTRARES,LAST);web_url("qrcodeiask","URL=/qrcode/qrcodeiask?app_key=3713763883&data=%5B%7B%22dat a%22%3A%22http%3A%2F%%2Fdintro.php%3Fid%3D35347297%22%2C%22width%22%3A%22120 %22%2C%22height%22%3A%22120%22%2C%22hasMargin%22%3A%22false%22%2C%22id%22%3A%22123%22%7D%5D& retvar=request_1357562218078","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01","Snapshot=t5.inf","Mode=HTML",EXTRARES,LAST);web_url("alimama.php","URL=/alimama.php?i=mm_15890324_2192376_9086917&w=713&h=81&sz=11&re =1280x800&cah=770&caw=1280&ccd=32&ctz=8&chl=0&cja=1&cpl=0&cmm=0&cf=10.0&cg=e7ddf62ddf782c2bd 89a0d81cda0c3bd&ac=5678&prn=50556085&cas=prn&cbh=437&cbw=771&sx=0&sy=0&refpos=,a,null&t=2&tc =0000FF&dc=000000&bgc=FFFFFF&bdc=E6E6E6&lc=008000&bmc=FFFFFF&as=0&bgp=0&ic=0&pf=0&p4p_ai=1&d x=1&iss=0&u=http%3A%2F%%2Ff%2F35347297.html%3Ffrom%3Dii01&k=&tt=""%E9%AB%98%E6%95%88%E6%97%B6%E9%97%B4%E5%92%8C%E6%97%A5%E7%A8%8B%E7%AE%A1%E7%90%86.ppt_ %E5%85%8D%E8%B4%B9%E9%AB%98%E9%80%9F%E4%B8%8B%E8%BD%BD_%E6%96%B0%E6%B5%AA%E7%88%B1%E9%97%AE%E5%85%B1%E4%BA%AB%E8%B5%84%E6%96%99&r=http%3A%2F%%2F&fu=-1&pageid=6 376ec3fbeb8bec3f3288a77d068ac44","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01","Snapshot=t6.inf","Mode=HTML",EXTRARES,LAST);web_url("alimama.php_2","URL=/alimama.php?i=mm_15890324_2192376_8664351&w=190&h=300&sz=22&r e=1280x800&cah=770&caw=1280&ccd=32&ctz=8&chl=0&cja=1&cpl=0&cmm=0&cf=10.0&cg=2252955723460168 43f670b4bb3914c4&ac=5678&prl=50555973&cas=prl&cbh=437&cbw=771&sx=0&sy=0&refpos=,a,null&t=2&t c=0000FF&dc=000000&bgc=FFFFFF&bdc=E6E6E6&lc=008000&bmc=FFFFFF&as=0&bgp=0&ic=0&pf=1&p4p_ai=1& dx=1&iss=0&u=http%3A%2F%%2Ff%2F35347297.html%3Ffrom%3Dii01&k=&tt=""%E9%AB%98%E6%95%88%E6%97%B6%E9%97%B4%E5%92%8C%E6%97%A5%E7%A8%8B%E7%AE%A1%E7%90%86.ppt_ %E5%85%8D%E8%B4%B9%E9%AB%98%E9%80%9F%E4%B8%8B%E8%BD%BD_%E6%96%B0%E6%B5%AA%E7%88%B1%E9%97%AE% E5%85%B1%E4%BA%AB%E8%B5%84%E6%96%99&r=http%3A%2F%%2F&fu=-1&pageid=6 376ec3fbeb8bec3f3288a77d068ac44","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01","Snapshot=t7.inf","Mode=HTML",EXTRARES,"Url=/css/iaskads_v2.css","Referer=/f/35347297.html?from=ii01", ENDITEM,LAST);web_url("ishare_nominate.php","URL=/iask/ishare_nominate.php?url=http%3A%2F%2Fishare.iask.s %2Ff%2F35347297.html%3Ffrom%3Dii01&dpc=1","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01","Snapshot=t8.inf","Mode=HTML",EXTRARES,LAST);web_url("ip.js","URL=/ip.js","Resource=0","RecContentType=text/html","Referer=/f/35347297.html?from=ii01","Snapshot=t9.inf","Mode=HTML",EXTRARES,LAST);web_url("","URL=/?name=itemdsp&count=12&o=j&p4p=tbcc_p4p_fn_c2012_3_471 3_1357562222671&pid=mm_15890324_2192376_8664351&refpos=,a,null&pvid=2_1357562245_13590315_13 2372736&refpid=mm_15890324_2192376_8664351","Resource=0","RecContentType=text/html","Referer=/go/act/sale/ceshi190300.php?pid=mm_15890324_2192376_8664 351&refpos=,a,null&pid=mm_15890324_2192376_8664351&pvid=2_1357562245_13590315_132372736", "Snapshot=t10.inf","Mode=HTML",EXTRARES,LAST);web_url("r.php","URL=/display/r.php?url=7ac2bd98dc5c2b936bdc9f53d0bf4929@ ppt&appkey=7d8edb857b65c884808edfb3aca067af&key=isharerand=0.9783182572573423", "Resource=0","RecContentType=text/html","Referer=/swf/OctopusReader.swf","Snapshot=t11.inf","Mode=HTML",LAST);web_url("m.php","URL=/display/m.php?id=7ac2bd98dc5c2b936bdc9f53d0bf4929&p n=1&rn=6&key=ishare","Resource=0","RecContentType=text/html","Referer=/swf/OctopusReader.swf","Snapshot=t12.inf","Mode=HTML",EXTRARES,LAST);web_url("v.html","URL=/display/v.html?type=contentload&success=1&time=2156 &t=1357562233484","Resource=0","RecContentType=text/html","Referer=/swf/OctopusReader.swf","Snapshot=t13.inf","Mode=HTML",LAST);web_url("v.html_2","URL=/display/v.html?type=browse&docid=7ac2bd98dc5c2b936b dc9f53d0bf4929&page=1&t=1357562234390","Resource=0","RecContentType=text/html","Referer=/swf/OctopusReader.swf","Snapshot=t14.inf","Mode=HTML",EXTRARES,LAST);其中红色“35347297”为服务器返回的动态的值,需要对该值进行关联(如何确定该值为动态的方法见步骤2)2.找出服务器返回的动态数据1)重复步骤1,再次录制相同的内容(操作步骤与步骤1一致)2)使用WinDiff找出脚本的不同录制成功后,选择Tools>compare with Vuser…,选择已保存的脚本1,使用WinDiff 工具找出两次脚本的不同,判断是否需要进行关联注1:关联值的特点也可根据经验或业务熟练程度分析出哪些值是需要关联的,需要关联的值的特点是一该动态内容一定是从服务端产生并返回客户端的二该客户端在得到该动态内容后一定把它重新发送到服务器端3.插入关联函数,并将数据替换为关联函数中的参数1)选择Tree模式,找出插入关联函数的位置在如下位置插入关联函数其中选择Insert Before,打开查询函数页面,输入web_reg_save_param_ex,选择该函数,设置关联函数的左右边界如下:再次点击Script模式后能够查看到脚本中插入了web_reg_save_param_ex函数如下:注2:web_reg_save_param和web_reg_save_param_ex函数解释web_reg_save_param是一个Service function。
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脚本优化-关联解析
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服务器返回的 数据显示在执行日 志里面,你可以在 里面分析确定动态 内容的左右边界
LoadRunner11脚本关联+运行负载+分析结果
LoadRunner11脚本关联+运⾏负载+分析结果⼀、脚本创建关联和插⼊检查点脚本录制完成后,⾸先需运⾏脚本回放,验证是否可回放成功,然后找出各事务请求中的关联点!如本例⼦中,录制的场景为:打开综合窗⼝收件-->查询事项-->窗⼝登记-->选择申请⼈-->保存办件-->选择意见-->下⼀步出件!完成以上场景后,会在【综合窗⼝出件】页⾯产⽣⼀条签收结果为“未签收”的办件!运⾏脚本后,选择树结构,可查看各请求的请求数据和响应结果!经过分析得出,后续请求⽤到的controlSeq和handleSeq,是由controlSave.do这个接⼝产⽣,因此需要在这⾥将controlSeq和handleSeq参数值提取,以供后续接⼝使⽤!1、参数提取--->创建关联(1)选中对应的参数值,⿏标右键选择“创建关联”,在弹窗中点击“是”;(2)由树结构切回脚本(Script)页⾯,对应接⼝请求前有增加了⼀个提取参数的函数,需修改函数中的左、右边界,拿多⼀点参数使提取结果更精确!(PS:使⽤正则表达式进⾏参数提取,此处不过多描述)web_reg_save_param_ex("ParamName=CorrelationParameter_1","LB=\"controlSeq\":\"","RB=\"}",SEARCH_FILTERS,"Scope=All","RequestUrl=*/add.v*","NotFound=warning",LAST);以上步骤,完成了controlSeq的参数提取(handleSeq参数同操作),后续的事务请求中⽤到参数controlSeq时,其对应的值会⾃动替换为CorrelationParameter_1,如下图:2、添加⽂本检查LoadRunner中的⽂本检查,相当于Jmeter中的响应断⾔!(1)在想要检查的接⼝请求前后添加图中的查找函数、打印函数,相关代码和解释如下:1 web_reg_find("Search=Body", #Search⽤来定义查找范围2 "SaveCount=count", #SaveCount定义查找计数变量名称,该参数⽤来记录在缓存中查找内容出现的次数,可以使⽤该值,来判断要查找的内容是否被找到;3 "Text=骞夸笢鐪佺 瀛愮 鐞嗘€荤珯", #=后为查找的⽂本内容4 LAST); #本例⼦的含义:在Body中查找内容为“骞夸笢鐪佺 瀛愮 鐞嗘€荤珯”的信息,并将出现次数记录在变量count中(注意:web_reg_find()需在对应接⼝请求前定义)567 lr_output_message(lr_eval_string("{count}")); #打印变量count的值(2)将录制时产⽣的结束事务(对应接⼝请求所在的事务)的脚本屏蔽,⽤以下代码替换:1if(atoi(lr_eval_string("{count}")) >0)2 {3 lr_end_transaction("综合窗⼝收件",LR_PASS);4 lr_output_message("综合窗⼝收件事务成功!");5 }6else7 {8 lr_end_transaction("综合窗⼝收件",LR_FAIL);9 lr_output_message("综合窗⼝收件事务失败!");10 }#代码含义:将找到的要检查的字符串的个数存到count参数中。
在LoadRunner 脚本中使用关联
在LoadRunner 脚本中使用关联∙第1页:在LoadRunner 脚本中使用关联∙第2页:找到服务器包含该动态值的响应∙第3页:3) 捕获动态值∙第4页:将脚本中所有出现的动态值都替换为参数文本Tag:软件测试LoadRunner【IT168技术文档】今天我将解释 LoadRunner 中关联的概念及其使用方法。
我认为关联是 LoadRunner 中一个非常关键的概念。
对于任何测试工程师而言,如果他想成为 LoadRunner 专家或是宗师,那他必须非常了解何谓关联。
实战举例:我为某个网络服务器录制了一段 LoadRunner 脚本。
脚本中包含两个特殊的域:时标(timestamp)和校验和(checksum):每当一个客户端网络浏览器连接到服务器,服务器就会获得一个当时的时标,再计算出校验和返回至客户端。
这两个域是用来确认一次即时的会话。
换句话说,一组时标 + 校验和就是会话 ID。
以下就是这种交互的图解:问题在哪里呢?让我们再回放一次录制的脚本。
当执行已录制的脚本时,出现了问题。
网络服务器用当前时间检验客户端发来的时标。
如果客户端的日期是过期的或错误的,服务器就会返回一个错误的信息:参数“校验和”未找到或显示为无效值。
此次交互的图解:客户端不能再次使用旧的(即硬编码)的值作为时标和校验和。
而必须使用新的日期。
所以,LR 脚本应该运行服务器返回的动态数据,而非硬代码。
使用关联就能做到这一点:关联的定义:关联就是捕获服务器发送给客户端的动态值。
实现关联的方法:1、自动2、手动自动关联会在后文中讲到。
但是至今为止,我敢说自动关联并不是最好的解决方法。
因为有些时候自动关联会失效,或者错误关联。
一个真正 LoadRunner 工程师会选择使用手动关联。
所以说这是“必备”的学问!好吧,让我们来开始探究手动关联。
手动关联的使用法则如下:找到一个需要捕获的动态值。
1) 找到服务器包含该动态值的响应。
2) 捕获动态值。
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)。
关于Loadrunner关联一、什么时候需要关联1.关联的含义关联(correlation):在脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态值,从而向服务器发出正确的请求,这种动态获得服务器响应内容的方法被称作关联。
其实关联也属于一同特殊的参数化,只是与一般的参数化有些不同一般的参数化的参数来源于一个文件、一个定义的table、通过sql写的一个结果集等,但关联所获得的参数是服务器响应请求所返回的一个符合条件的、动态的值2.什么时候需要做关联要想弄清这个问题,我们首先要知道客户端与服务器端的请求与响应的过程过程说明:客户端发出获得登录页面的请求服务器端得到该请求后,返回登录页面,同时动态生成一个Session Id当用户输入用户名密码,请求登录时,该Session Id同时被发送到服务器端如果该Session Id在当前会话中有效,那么返回登录成功的页面,如果不正确则登录失败在第一次录制过程中loadrunner把这个值记录了下来,写到了脚本中,但再次回放时,客户端发出同样的请求,而服务器端再一次动态的生成了Session Id,此时客户端发出的请求就是错误的,为了获得这个动态的Session Id我们这里用到了关联。
所以我们得出结论:当客户端的某个请求是随着服务器端的相应而动态变化的时候,我们就需要用到关联当然我们在录制脚本时应该对测试的项目进行适当的了解,知道哪些请求需要用到服务器响应的动态值,如果我们不明确那些值需要做关联的话,我们也可以将脚本录制两遍,通过对比脚本的方法来查找需要关联的部分,但并不是说两次录制的所有不同点都需要关联,这个要具体情况具体分析二、自动关联loadrunner参数化自动关联包含两种机制:一种是loadrunner通过对比录制和回放时服务器响应的不同,而提示用户是否进行关联,用户可自己创建关联规则,这个功能可以方便的使我们获得需要关联的部分,但同时也存在一定的问题,如:自动关联所检测到的关联点不一定真的需要进行关联,这要我们更具实际情况进行判断;有些需要关联的动态数据自动关联无法找到,这是就需要做手动关联另一种是loadrunner自带的自动关联规则,在录制脚本时,会根据这些规则自动创建关联自动关联的步骤如下:1.开启自动关联选项刚才提到的两种关联机制,如果用户想使用loadrunner自带的关联规则创建关联,那么需要在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,选中“Enable correlation during recording”,当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。
也可以在【Recording Options】>【Internet Protocol】>【Correlation】中添加关联规则,达到自动关联的目的。
如果需要在回放脚本时,loadrunner自动检测需要关联的部分,那么需要在【Tools】>【general options】>【Correlation】中选中“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,当回放玩脚本后,会弹出Scan action for correlation窗口,进行关联点的搜索2.录制脚本录制脚本的过程在这里就不多说了3.回放脚本如果录制的脚本存在需要做关联的部分,那么在回放脚本时会出现错误4.系统自动弹出检测关联对话框,或手动启动关联检测对话框如果选择了【Tools】>【general options】>【Correlation】中的“save correlation information during replay”和“show scan for correlations popup after replay of vuser”,那么在回放脚本后会自动弹出“Scan action for correlation”窗口,点击“yes”进行自动查找如果没有选择上述设置,那么也可以按CTRL+F8启动关联自动搜索5.查看系统检测出的关联点进行关联设置如果在录制和回放中存在差异,loadrunner会在“Correlation Results”中列出需要做关联的内容,用鼠标点击一条需要做关联的内容,点击“Create Rule”,系统会显示获得当前数据的规则,点击“yes”,完成规则的创建,同时查看脚本中增加了一个web_reg_save_param 函数也可以点击【Correlate】按钮创建关联,一笔一笔做,或是按下【Correlate All】让VuGen一次就对所有的数据建立关联。
注意:由于Correlation Studio会找出所有有变动的数据,但是并不是所有的数据都需要做关联,所以不建议您直接用【Correlate All】。
6.回放脚本检查关联的正确性创建好关联后,回放脚本检查关联的正确性三、手动关联手动关联的过程大致如下:第一步:录制测试脚本,录制二遍第二步:使用WinDiff工具找出两次脚本的不同,判断是否需要进行关联第三步:确定插入关联的位置第四步:在VIEW TREE中使用web_reg_save_param函数手动建立关联第五步:将脚本中有用到关联的数据,用参数代替第六步:验证关联的正确性下面详细介绍:第一步:录制测试脚本,录制二遍这一步就不用多说了,相同的操作,录制两份,分别保存第二步:使用WinDiff工具协助找出需要关联的数据1. 在第二份脚本中,点选VuGen的【Tools】>【Compare with Vuser…】,并选择第一份脚本。
2. 接着WinDiff会开启,同时显示二份脚本,并显示有差异的地方。
WinDiff会以一整行黄色标示有差异的脚本,并且以红色的字体显示真正差异的文字。
(假如没看到红色字体,请点选【Options】>【View】>【Show Inline Differences】)。
查看二份脚本中差异的部份,每一个差异都可能是需要做关联的地方。
注意:lr_thik_time部分的差异可以忽略找到不同的部分后,复制,然后打开Recording Log或是Generation Log,按Ctrl+F,在查找窗口中粘贴差异部分的内容,点击查找找到后,查看该部分的信息,确认是客户端的请求信息还是服务器回应的信息如果出现在$$$$$$ Request Header For Transaction With Id 3 Ended $$$$$$这个部分,那证明是客户端发出的请求,这里是不需要做关联的一般做的关联都是出现在****** Response Header For Transaction With Id 7 ******和****** Response Body For Transaction With Id 7 ******中的部分。
在找到这个信息后,需要记录如下信息:a、记录这个不同数据之前的内容和之后的内容b、记录这个不同数据出现的位置,是Header还是Body第三步:确认插入关联的位置我们在日志中找到了两次脚本的不同点的位置,根据这个位置,我们再确定是在哪个请求之后产生的,也就是说要定位发生不同点的response是由哪个request产生的,找到了这个请求的函数位置,我们就知道要往哪里做关联了。
一般情况下关联函数写到发出请求的函数之前就可以了。
第四步:插入关联函数在插入关联函数前,我们先介绍关联函数web_reg_save_param一个web_reg_save_param函数的例子:web_reg_save_param ("sessionid","LB=Session_id:","RB=;","Search=Body",LAST);在这里我们只介绍几个常用参数的含义语法: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。
属性值不分大小写LB( Left Boundary ) : 返回信息的左边界字串。
该属性必须有,并且区分大小写。
RB( Right Boundary ): 返回信息的右边界字串。
该属性必须有,并且区分大小写。
Search : 返回信息的查找范围。
可以是Headers,Body,Noresource,All(缺省)。
该属性质可有可无。
那么如何插入该关联函数呢?1.将vugun切换到view tree 模式下2.在左边的列表中,找到在上一步发出请求的函数,点击“右键”选择“insert before”3.在弹出的“add step”对话框的“find function”中输入“web_reg_save_param”,点击“ok”在“parameter name”中输入,关联函数的名称,这里最好有含义,“sessionid”在“left boundary”中输入,刚才记录下的不同点字符串的左面的几个字符,定义左边界,Session_id:在“right boundary”中输入,刚才记录下的不同点字符串的右面的几个字符,定义右边界,;在“search in ”中,选择“body”点击“ok”4.回到脚本编辑模式下,查看该函数插入是否正确在发出请求的函数前应该看到:web_reg_save_param ("sessionid","LB=Session_id:","RB=;","Search=Body",LAST);第五步:将脚本中有用到关联的数据,用参数代替如发出请求的参数如下,那么将原来服务器返回的动态值使用{ sessionid } 来替换:web_submit_form("login.php_2","Snapshot=t2.inf",ITE MDA TA,"Name=login", "Value=wangjin", ENDITEM,"Name=password", "Value=wangjin", ENDITEM,"Name=Session_id","Value={ sessionid } ", ENDITEM, "Name=Submit", "Value=Login", ENDITEM, EXTRARES,"URL=/media/images/border_bg_l.gif", ENDITEM, "URL=/media/images/header_bg.gif", ENDITEM, "URL=/media/images/th.gif", ENDITEM,LAST);第六步:验证关联的正确性回放脚本,验证关联的正确性。