【精品】LR培训心得.doc_第1页
【精品】LR培训心得.doc_第2页
【精品】LR培训心得.doc_第3页
【精品】LR培训心得.doc_第4页
【精品】LR培训心得.doc_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【精品】LR培训心得 LoadRunner培训心得1)准备培训环境安装LR脚本编译器VUGen,安装的过程很简单将VUGen的安装包COPY到需要安装的机器上,根据安装想到就可以安装成功,同时安装一个补丁;注意如果使用的机器上已经安装了LR,则不需要这个步骤;安装LR的一个测试实例网站,这是LR用来做培训的一个网站程序,安装后会提供一个JAVA script写的网站同时提供一个Apache的Web服务器;在安装的过程也很简单只需要根据安装向导安装就可以,安装完成后将APPL-MToursPatch-58目录下的5个class文件覆盖到安装目MercuryToursservletsmercurytoursservlet;然后将D:Program FilesMercury InteractiveMercuryToursJavaSoftJRE1.2下的bin目录和Lib目录备份更新为新版本的相同信息;将APPL-MToursPatch-58的CascadeMenu.js文件覆盖到安装目录MercuryTourspublic_htmljscript;简单测试.mercurytours.servlet.WeleServlet;如果显示正确的页面说明安装成功;2)录制脚本启动VUGen;选择“单协议脚本”“web(/HTML)”,如下图所示启动服务,启动浏览器输入localhost/servlets/点击确定,选择应用程序,输入录制的URL,如下图所示点击确定后开始录制脚本;录制脚本的过程中需要注意录制脚本的规范化,比如在开始一个事务的时候直接插入事务,对于不同的交易定义不同的Action,脚本录制完成如下图所示上图中红框标识出来的就是需要注意规范的地方,在这次培训中收益不小;完成这个步骤我们的脚本就录制完成了。 3)脚本修改及优化;录制完成脚本后我们先运行一下,这个脚本可以运行,但是在运行到删除机票的时候出错,这是因为我们录制的脚本在没有做任何修改的时候是应用是很不灵活的,这个错误是因为我们选择删除的机票已经删除,所以再次运行的时候会找不到表单,所以我们需要对脚本进行修改成为可用的测试脚本,那么下面我们就对脚本进行修改和优化;参数化脚本中的参数化就是将其中固定的值(或者录制的值)通过参数修改为可变的值,这个过程就是参数化;更详细的参数化,请参与LR的用户手册;在这个脚本中我们可以对登录的用户名和密码进行参数化,脚本如下所示lr_start_transaction(login);web_submit_form(.mercurytours.servlet.SignonServlet,Snapshot=t2.inf,ITEMDATA,Name=userName,Value=test1,ENDITEM,Name=password,Value=111111,ENDITEM,Name=login.x,Value=23,ENDITEM,Name=login.y,Value=6,ENDITEM,LAST);lr_end_transaction(login,LR_AUTO);在上述的一段脚本中标红的部分是需要参数化的部分,选择红色部分,点击右键,选择“替换为新参数”,如下图所示在弹出的对话框中,输入参数名name,如下图所示下面我们重点介绍一下参数的类型。 ?DateTime很简单,在需要输入日期/时间的地方,可以用DateTime类型来替代。 其属性设置也很简单,选择一种格式即可。 当然也可以定制格式。 ?Group Name暂时不知道何处能用到,但设置比较简单。 在实际运行中,LoadRunner使用该虚拟用户所在的Vuser Group来代替。 但是在VuGen中运行时,Group Name将会是None?Load GeneratorName在实际运行中,LoadRunner使用该虚拟用户所在Load Generator的机器名来代替。 ?Iteration Number在实际运行中,LoadRunner使用该测试脚本当前循环的次数来代替。 ?Random Number随机数。 很简单。 在属性设置中可以设置产生随机数的范围?Unique Number唯一的数。 在属性设置中可以设置第一个数以及递增的数的大小。 注意使用该参数类型必须注意可以接受的最大数。 例如某个文本框能接受的最大数为99。 当使用该参数类型时,设置第一个数为1,递增的数为1,但100个虚拟用户同时运行时,第100个虚拟用户输入的将是100,这样脚本运行将会出错。 注意这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为1。 举例说明假如起始数为1,递增为5,那么第一个用户第一次循环取值1,第二次循环取值2;第二个用户第一次循环取值为6,第二次为7;依次类推。 ?Vuser ID设置比较简单。 在实际运行中,LoadRunner使用该虚拟用户的ID来代替,该ID是由Controller来控制的。 但是在VuGen中运行时,Vuser ID将会是1。 ?File需要在属性设置中文件,添加内容,也可以从现成的数据库中取数据(下面我们将会介绍)?User DefinedFunction从用户开发的dll文件提取数据。 就目前我认为,这种方式没有必要。 VuGen支持C语言的语法,在VuGen中重新编写类似的函数应该不难。 ?(以上内容LR使用手册.pdf)点击确定,这样就设置了一个参数,同样的我们对密码进行参数化;完成后脚本如下所示lr_start_transaction(login);web_submit_form(.mercurytours.servlet.SignonServlet,Snapshot=t2.inf,ITEMDATA,Name=userName,Value=name,ENDITEM,Name=password,Value=password,ENDITEM,Name=login.x,Value=23,ENDITEM,Name=login.y,Value=6,ENDITEM,LAST);lr_end_transaction(login,LR_AUTO);由上述的脚本可以看出用户名和密码由两个用括起来的参数代替,上述脚本中标红的就是参数化的参数。 这样只是初步的参数化,然后我们选择“Vuser”“参数列表”,如下图所示选择name,“添加列”,然后选择“按名称”选择name,选择password,选择“按名称”选择password,如下图所示通过Web网站注册新的用户,test 2、test3,用户注册如下图所示然后修改参数,使用记事本修改,如下图所示这样保存后参数化就完成了。 然后我们看一下参数选择的策略;选择下一行的策略有四种Sequential(顺序选择)、Random(随机选择)Unique(选择唯一值),Same lineas name(这个是在有两行关联的数据时,可以有一个参数选择这种方式),重点说一下前面三个选择方式?Sequential按照顺序一行行的读取。 每一个虚拟用户都会按照相同的顺序读取?Random在每次循环里随机的读取一个,但是在循环中一直保持不变?Unique唯一的数。 注意使用该类型必须注意数据表有足够多的数。 比如Controller中设定20个虚拟用户进行5次循环,那么编号为1的虚拟用户取前5个数,编号为2的虚拟用户取6-10的数,依次类推,这样数据表中至少要有100个数据,否则Controller运行过程中会返回一个错误。 ?Same LineAs某个参数(比如Name)和前面定义的参数Name取同行的记录。 通常用在有关联性的数据上面。 更新值的时间?Each Ourrence在运行时,每遇到一次该参数,便会取一个新的值?Each iteration运行时,在每一次循环中都取相同的值?Once运行时,在每次循环中,该参数只取一次值?(以上内容LR用户使用手册.pdf)完成上面的步骤我们对于用户和密码的参数化就完成了,运行一下脚本,这里注意一个小技巧就是打开“运行设置”-“日志”,选择扩展日志,然后选中“参数替换”,如下图所示通过上图设置,在运行脚本的时候,可以在脚本运行日志中看到参数替换的情况,运行日志如下所示vuser_init.c (22):通知:Transaction首页ended withPassstatus(Duration:7.8871).vuser_init.c (26):通知:Transactionloginstarted.vuser_init.c (28):通知:参数替换:参数“name”=“test1”vuser_init.c (28):通知:参数替换:参数“password”=“111111”上述日志说明我们的参数化成功了。 那我们看看这个脚本是不是其他地方方还可以参数化,是的,比如我们预订机票的城市,信用卡的卡号等等;只要是可以变化的基本上都可以参数化;关联关联是脚本修改过程中重要的步骤,我们先看下面一段脚本代码lr_start_transaction(bookflight);lr_think_time (103);web_submit_data(.mercurytours.servlet.ReservationServlet,Action=localhost/servlets/.mercurytours.servlet.ReservationServlet?procSub=1&pg=1,Method=POST,RecContentType=text/html,Referer=localhost/servlets/.mercurytours.servlet.ReservationServlet,Snapshot=t3.inf,Mode=HTML,ITEMDATA,Name=tripType,Value=roundtrip,ENDITEM,Name=passCount,Value=1,ENDITEM,Name=fromPort,Value=Acapulco,ENDITEM,Name=fromMonth,Value=06,ENDITEM,Name=fromDay,Value=13,ENDITEM,Name=toPort,Value=Zurich,ENDITEM,Name=toMonth,Value=06,ENDITEM,Name=toDay,Value=14,ENDITEM,Name=servClass,Value=First,ENDITEM,Name=airline,Value=No Preference,ENDITEM,Name=findFlights.x,Value=29,ENDITEM,Name=findFlights.y,Value=7,ENDITEM,LAST);web_submit_form(.mercurytours.servlet.PurchaseServlet,Snapshot=t4.inf,ITEMDATA,Name=outFlight,Value=Blue SkiesAirlines$190$706$5:03$,ENDITEM,Name=inFlight,Value=Blue SkiesAirlines$910$706$12:23$,ENDITEM,Name=reserveFlights.x,Value=46,ENDITEM,Name=reserveFlights.y,Value=12,ENDITEM,LAST);lr_think_time (31);web_submit_form(.mercurytours.servlet.PurchaseServlet_2,Snapshot=t5.inf,ITEMDATA,Name=passFirst0,Value=li,ENDITEM,Name=passLast0,Value=gang,ENDITEM,Name=pass.1.meal,Value=No preference,ENDITEM,Name=creditCard,Value=American Express,ENDITEM,Name=creditnumber,Value=111111111,ENDITEM,Name=_exp_dt_mn,Value=None,ENDITEM,Name=_exp_dt_yr,Value=None,ENDITEM,Name=_frst_name,Value=,ENDITEM,Name=_mid_name,Value=,ENDITEM,Name=_last_name,Value=,ENDITEM,Name=billAddress1,Value=1325Borregas Ave.,ENDITEM,Name=billAddress2,Value=,ENDITEM,Name=billCity,Value=Sunnyvale,ENDITEM,Name=billState,Value=CA,ENDITEM,Name=billZip,Value=94089,ENDITEM,Name=billCountry,Value=UNITED STATES,ENDITEM,Name=delAddress1,Value=1325Borregas Ave.,ENDITEM,Name=delAddress2,Value=,ENDITEM,Name=delCity,Value=Sunnyvale,ENDITEM,Name=delState,Value=CA,ENDITEM,Name=delZip,Value=94089,ENDITEM,Name=delCountry,Value=UNITED STATES,ENDITEM,Name=buyFlights.x,Value=84,ENDITEM,Name=buyFlights.y,Value=7,ENDITEM,LAST);lr_end_transaction(bookflight,LR_AUTO);?以上这段代码是定制机票时的信息,我们注意一下上面标红的地方,做一个这样的操作,在脚本中,将标红的城市修改为London和New York,然后运行一下脚本,看看会出现什么情况ookflight.c (30):错误-27979:找不到请求的表单MsgId:MERR-27979bookflight.c (30):web_submit_form(.mercurytours.servlet.PurchaseServlet)最高严重级别为“ERROR”,0个正文字节,0个标头字节MsgId:MMSG-26388bookflight.c (30):通知:Transactionbookflightended withFailstatus(Duration:0.5445).脚本运行后有如上错误,为什么会这样呢,大家看脚本中的Name=outFlight,Value=Blue SkiesAirlines$190$706$5:03$,ENDITEM,Name=inFlight,Value=Blue SkiesAirlines$910$706$12:23$,ENDITEM,这两句话,其实被测系统为每个定制的航班生成了一个序列号,就是标红的部分,但是我们修改两个城市后,系列号就不对应了,所以出现上述错误,那么我们如何解决这个问题呢,这就需要用到关联,那么什么是关联呢,所谓的关联就是通过查找上下问中的信息,取出变化的信息来替代脚本中的信息,比如系列号,随机数等一般需要关联。 我们来分析一下上面的例子,在这个定制机票的例子中,填写好信息后提交的过程中生成了这个序列号,我们只需要在生成序列号的页面中找到这个序列号并且保存到一个变量中,然后替换Value的值就可以了;这个过程如何实现呢,我们将脚本先切换到树形结构,然后选择web_submit_data(.mercurytours.servlet.ReservationServlet,点击右键“在之前插入”在查找函数中输入web_reg_sava_param然后点击确定,如下图所示在上图中输入参数名、左边界、右边界;参数名我们定义为inflight;左边界,我们需要打开网站,找到录制的页面查找如下图所示我们可以看到左边界我们可以定义为,在这里需要注意一个小细节,就是通过“”的C语言转义字符将“”进行转义,因为在LR中认为是一个标识符;点击确定,完成操作,通过同样的方式将Outflight的参数,查看脚本,我们得到如下函数web_reg_save_param(inflight,LB=,LAST);web_reg_save_param(outflight,LB=,LAST);运行一下脚本bookflight.c (16):通知:正在保存参数“inflight=Blue SkiesAirlines$300$358$12:23$”bookflight.c (16):通知:正在保存参数“outflight=Blue SkiesAirlines$300$358$12:23$”将这个参数的值替换到脚本中如下web_submit_form(.mercurytours.servlet.PurchaseServlet,Snapshot=t4.inf,ITEMDATA,Name=outFlight,Value=outflight,ENDITEM,Name=inFlight,Value=inflight,ENDITEM,Name=reserveFlights.x,Value=46,ENDITEM,Name=reserveFlights.y,Value=12,ENDITEM,在运行一次脚本bookflight.c (16):通知:正在保存参数“outflight=Blue SkiesAirlines$30$358$5:03$”bookflight.c (16):通知:正在保存参数“inflight=Blue SkiesAirlines$300$358$12:23$”LAST);bookflight.c (16):资源“localhost/images/forms/continue.gif”已在缓存中,不会再次下载MsgId:MMSG-26655bookflight.c (16):资源“localhost/images/caribbean_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655bookflight.c (16):资源“localhost/images/member_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655bookflight.c (16):资源“localhost/images/guest_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655bookflight.c (16):资源“localhost/images/alaska_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655bookflight.c (16):web_submit_data(.mercurytours.servlet.ReservationServlet)已成功,21653个正文字节,533个标头字节,47个成块开销字节MsgId:MMSG-26385bookflight.c (39):通知:参数替换:参数“outflight”=“Blue SkiesAirlines$30$358$5:03$”bookflight.c (39):通知:参数替换:参数“inflight”=“Blue SkiesAirlines$300$358$12:23$”bookflight.c (39):将表“localhost/servlets/.mercurytours.servlet.PurchaseServlet”,MsgId:MMSG-27978单提交到目标帧=“”bookflight.c (39):资源“localhost/jscript/CascadeMenu.js”已在缓存中,不会再次下载MsgId:MMSG-26655从上述的日志可以看到运行成功了,这就是一个比较简单的关联。 我们在看另外一个问题,在删除航班过程中,由于录制的过程中航班已经被删除,所以下次回放脚本是就会出现表单找不到的错误,那么这个问题我们如何来解决呢,我们来看一下系统运行的机制,我们可以看到,删除航班的过程就是选择一个航班然后点击删除就可以了,那么我们只要找到所有的航班然后从中随机选择一个删除就可以了,我们来看一下我们的脚本lr_start_transaction(delflight);lr_think_time (46);web_submit_data(.mercurytours.servlet.IteneraryServlet_2,Action=localhost/servlets/.mercurytours.servlet.IteneraryServlet?procSub=1,Method=POST,RecContentType=text/html,Referer=localhost/servlets/.mercurytours.servlet.IteneraryServlet,Snapshot=t7.inf,Mode=HTML,ITEMDATA,Name=flight_83,Value=on,ENDITEM,Name=removeSelected.x,Value=141,ENDITEM,Name=removeSelected.y,Value=5,ENDITEM,LAST);lr_end_transaction(delflight,LR_AUTO);脚本中标红的部分来负责删除航班,我们只需要将其中flight_83;进行关联就可以了首先我们通过函数web_reg_save_param函数在这个页面中找出所有的航班;web_reg_save_param(FLIGHT,LB= (14):通知:正在保存参数“FLIGHT_1=flight_84”delflight.c (14):资源“localhost/images/nav/html.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/nav/boxad1.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/banner2.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/masts/mast_itinerary.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/spacer.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/forms/details.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):通知:正在保存参数“FLIGHT_2=flight_85”delflight.c (14):通知:正在保存参数“FLIGHT_3=flight_86”delflight.c (14):通知:正在保存参数“FLIGHT_4=flight_87”delflight.c (14):通知:正在保存参数“FLIGHT_5=flight_88”delflight.c (14):通知:正在保存参数“FLIGHT_6=flight_89”delflight.c (14):通知:正在保存参数“FLIGHT_7=flight_90”delflight.c (14):通知:正在保存参数“FLIGHT_8=flight_91”delflight.c (14):通知:正在保存参数“FLIGHT_9=flight_93”delflight.c (14):通知:正在保存参数“FLIGHT_10=flight_95”delflight.c (14):通知:正在保存参数“FLIGHT_11=flight_96”delflight.c (14):通知:正在保存参数“FLIGHT_12=flight_98”delflight.c (14):通知:正在保存参数“FLIGHT_13=flight_107”delflight.c (14):通知:正在保存参数“FLIGHT_14=flight_108”delflight.c (14):通知:正在保存参数“FLIGHT_15=flight_113”delflight.c (14):通知:正在保存参数“FLIGHT_16=flight_101”delflight.c (14):通知:正在保存参数“FLIGHT_17=flight_102”delflight.c (14):通知:正在保存参数“FLIGHT_18=flight_103”delflight.c (14):通知:正在保存参数“FLIGHT_19=flight_105”delflight.c (14):通知:正在保存参数“FLIGHT_20=flight_109”delflight.c (14):通知:正在保存参数“FLIGHT_21=flight_110”delflight.c (14):通知:正在保存参数“FLIGHT_22=flight_111”delflight.c (14):通知:正在保存参数“FLIGHT_23=flight_112”delflight.c (14):通知:正在保存参数“FLIGHT_24=flight_114”delflight.c (14):通知:正在保存参数“FLIGHT_25=flight_115”delflight.c (14):通知:正在保存参数“FLIGHT_26=flight_116”delflight.c (14):通知:正在保存参数“FLIGHT_27=flight_117”delflight.c (14):通知:正在保存参数“FLIGHT_28=flight_118”delflight.c (14):通知:正在保存参数“FLIGHT_29=flight_119”delflight.c (14):资源“localhost/images/forms/cancel_checked.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/forms/cancelall.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/caribbean_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/member_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/guest_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):资源“localhost/images/alaska_menu.gif”已在缓存中,不会再次下载MsgId:MMSG-26655delflight.c (14):通知:正在保存参数“FLIGHT_count=29”我们从上述的日志中可以看到,找出了所有的航班,并且“FLIGHT_count=29”;然后我们增加一下代码,从上述的29个航班中随机的选择一个int flight_count,rnd_number;/loadrunner内部变量需要变成C语言变量char flight_to_cancel128;lr_start_transaction(delflight);flight_count=atoi(lr_eval_string(FLIGHT_count);/将Loadrunner内部变量转换为C语言变量,保存到变量flight_count中;lr_output_message(flight_count:%dn,flight_count);/将flight_count的值打印出来dosrand(time(NULL);rnd_number=rand()%(flight_count+1);while(rnd_number=0);/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论