loadrunner报告

2024-07-05

loadrunner报告(精选6篇)

篇1:loadrunner报告

loadRunner预研报告(一)预研目的 掌握如何使用LoadRunner进行压力测试;

 掌握如何通过LoadRunner的测试结果和分析报告来指导代码优化工作; 2 预研内容

 LoadRunner概况;

 LoadRunner的使用;

 LoadRunner使用的实例分析;

2.1 loadRunner概况

LoadRunner 是一种预测系统行为和性能的工业标准级负载测试工具。通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。

LoadRunner 通过模拟一个多用户并行工作的环境来对应用程序进行负载测试。通过使用最少的硬件资源,这些虚拟用户提供一致的、可重复并可度量的负载,像实际用户一样使用所要测试的应用程序。LoadRunner 深入的报告和图提供了评估应用程序性能所需的信息。

2.1.1 LoadRunner主要部件组成Virtual User Generator(VuGen):虚拟用户生成器。

作用:通过录制应用程序中典型最终用户执行的操作来生成虚拟用户(Vuser)。VuGen 将这些操作录制到自动虚拟用户脚本中,以便作为负载测试的基础。

Controller:负载测试控制台

作用:它是用来创建、管理和监控负载测试的中央控制台。使用 Controller 可以运行用来模拟真实用户执行的操作的脚本,并可以通过让多个 Vuser(虚拟用户)同时执行这些操作来在系统中创建负载。

Analysis:测试结果分析平台

作用:提供包含深入的性能分析信息的图和报告。使用这些图和 报告,可以标识和确定应用程序中的瓶颈,并确定需要对系统进行哪些更改来提高系统性能。

2.1.2 LoadRunner术语

Vusers(虚拟用户):在场境中,LoadRunner用虚拟用户(virtual users or Vusers)来代替真实用户的操作。虚拟用户模拟真实用户的动作从而与你的应用程序进行交互。一个场境可以包括数

十、数百,甚至数千个虚拟用户。

Vuser Scripts(虚拟用户脚本):是场境中用来描述虚拟用户动作行为的脚本。

Transaction(事务):任意一个你想测量的终端用户操作的粒度。通过插入事务开始点和结束点来定义事务。

Rendezvous(集合点):为保证n个虚拟用户同时并发操作,需在并发操作前插入Rendezvous。

contents check(文本检查点):在进行压力测试时,为了检查Web 服务器返回的网页是否正确,这些检查点验证网页上是否存在指定的Text 或者Image,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。

Parameter(参数化):用参数替换已录制的值。

Think time(思考时间):用户在执行两个连续操作期间等待的时间。

Scenarios(场景):基于性能需求定义在每次测试会话中发生的事件。

篇2:loadrunner报告

今年十月份我到北京跟张坤学习性能测试知识,共花了三个星期学习LoadRunner。以下是我的学习小结。

一. 什么是LoadRunner LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟多个用户实施并发负载测试及实时性能检测的方式来确认和查找问题,能对整个企业架构进行测试。

二. LoadRunner的优点

1.轻松创建虚拟用户:通过记录下业务流程转为测试脚本,在机器上产生多个用户访问,减少负载测试需要的硬件和人力资源。

2.创建真实的负载:可以通过Controller设定负载方案,如定义用户在什么时候访问系统以产生负载,所有用户同时执行一个动作来模拟峰值负载情况等。3.实时监测器:可以实时显示交易性能数据(如响应时间)和其他系统组件如数据库,网络等的实时性能。

4.分析结果以精确定位问题所在:LoadRunner能收集汇总所有测试数据,提供高级的分析和报告工具。

三. LoadRunner的安装与使用

1.安装过程详见上传的LoadRunner使用手册,在此不再详细介绍。2.具体使用:

点击File新建录制文件,也可以点击下面的NEW快捷键进行新建。使用File新建,会弹出协议选择窗口,选择新的单协议脚本(New Single Protocol Script)的Web(HTTP/HTML)项,确定即可(选择Web项是因为我们测试的是Web应用)。接着会弹出开始录制的设置项,需要写入录入系统的地址,点击确定后就会根据录入地址展现系统页面,开始录制脚本,出现小工具条:

第一个按钮为录制键 第二个为回放脚本键 第三个为停止录制键 第四个为暂停录制键 第五个为编译脚本键

第六个为创建新的Action键。LR的录制脚本分为三个部分,vuser_init、vuser_end和 Action。脚本循环执行时,只执行一次vuser_init和vuser_end,而多次循环Action部分。比如录制投保业务时,登陆系统部分放入vuser_init,退出登陆放到vuser_end,中间的投保操作放到Action中,则循环执行时就会登陆一次投保系统开始反复执行投保操作直到结束退出系统。

第七个为用来改变录制的options设置按钮

第八个和第九个为插入事务的起始点和结束点键,结合起来构成一个完整事物,用来衡量服务器的性能。比如录制脚本过程中,投保系统的查询投保单号操作,可以在输入完查询信息后点击查询按钮前插入事务的起始点,查询出数据后插入事务的结束点,这样在运行测试脚本时,Loadrunner在运行到该事务时,便会计算出这个查询操作所花时间,便于衡量服务器执行查询操作的性能。

第十个为插入集合点键,可用于衡量在加重负载的情况下服务器的性能。比如要验证系统是否能承受100人同时进行报案操作,便可在脚本录入过程中,点击报案确认键操作前插入集合点,这样当脚本运行到集合点时,Loadrunner会让100个虚拟用户同时点击报案确认按钮(如果有的用户还没运行到集合点,先到用户要等未到用户一起操作)进行报案,从而达到测试目的。

最后一个为设置验证点键,在创建事物后,设置一个验证点可以用来确认事物执行是否成功。比如进行查询事务操作时,LR只要检测到网页的响应,就认为事务pass,而不管显示页面内容是否正确。因此为了检查Web服务器返回的网页是否正确,可以插入Text/Image检查点,验证网页上是否存在指定的Text或Image。

设置验证点时,如果我们验证的文本内容是中文,有时会返回无法找到验证内容的报错信息,而页面显示又是正确的,出现问题的原因可能是因为LR对中文的支持部好,尽量选择验证信息为数字或字母;也可能是设置问题,可以尝试将Tools->Recording Options->HTTP Properties下的Advanced选项里设置支持UTF-8,再检查开发人员有没有设置支持中文。

录制结束后,先点击保存脚本,同时为脚本命名。然后编译脚本,看是否存在语法错误,编译成功后,即可回放,看录制脚本是否成功。

LoadRunner录制得到的脚本基本没有错误,不像robot会有录入数据的缺失,只是会录入一些非录入系统的网页信息,根据地址可以识别并删除掉。

四. LoadRunner脚本录制学习小结

1.LoadRunner录制脚本,主要是为了进行压力测试,所以跑流程时,跑了主要流程即可,也就是系统必须的信息录入就可以了。2.LoadRunner的脚本运行过程中,只能用于一次业务办理的数据需要做参数化,如车辆车架号,车牌,报案号等,以免出现重复投保或报案无法立案现象,不能继续进行下去。参数化步骤:

1)将需要做参数化的数据右键点击,选择Replace with a parameter,进行设置。2)在弹出编辑框里,设置易懂的参数名称,再点击Properties进行属性设置。3)点击Create Table 按钮,生成参数表格,再点击Edit with Notepad按钮,即可在记事本里添加新的参数,添加完后再次回车(不回车可能最后条数据读取不到)关闭,参数化操作完成。

4)使用Ctrl +H键可以找到替换同样的需要参数化的数据。

3.脚本跑流程过程中,因为业务运转,前面生成的投保单要接着进行提交核保业务,而每次生成的投保单号不一样,用于进行提交核保的单号也要与之前的保持一致,因此需要做关联处理,读取到生成的新投保单号给提交核保流程。关联步骤:

1).查找关联数据第一次出现的位置,判断该数据是由什么函数返回的。

2).在树形结构里点击返回该数据值的函数,看它的Server Response信息,用复制的关联数据进行查找它的返回语句,找到区分度明显的语句(不一定要是第一个返回语句),然后使用web_reg_save_param函数进行关联。

注:关联函数一定要写在第一个返回该数据值的函数前。

3).web_reg_save_param(const char *ParamName, , LAST);

函数的第一个参数是用来对关联数据进行定义的,取名最好可读性强;第二个参数是用来标识关联数据在返回语句里的具体位置的,写出该数据的左右边界,程序才能识别;LAST表示属性列的结束。比如办理理赔业务的流程号,在服务器的返回语句里是:

做关联为:

web_reg_save_param(“LogFlowID”,“LB=name=flowID type=”hidden“ value=”,“RB=>”,LAST);定义的参数名就叫LogFlowID,表示流程号,易于明白;左边界从name取就可以标识了,也可取长点或短点,只要能区分;右边界只有>,写上就好;最后写上LAST。

在定义的左右边界中,如果有双引号,在脚本中是需要转义的,因为双引号在C中是有意义的,这里只要表示语句信息,加上右斜杠。尖括号直写。

左右边界也需要用双引号括起来。定义好的参数写在程序中,需要在加上单尖括号:swfLogFlowID={LogFlowID} 五. 脚本执行过程中的报错处理

1.vuser_init.c(3051): Error-26377: No match found for the requested parameter “proposalNo”.Check whether the requested boundaries exist in the response data.Also, if the data you want to save exceeds 256 bytes, use web_set_max_html_param_len to increase the parameter size [MsgId: MERR-26377] 2.vuser_init.c(3051): web_submit_data(“UIPrPoEnInputNext.jsp”)highest severity level was “ERROR”, 4312 body bytes, 258 header bytes [MsgId: MMSG-26388]

两个错误一起出现,出错语句都是在关联函数下的提交数据函数位置,但是具体出错有可能是:

1).关联函数左右边界没写对,所有信息都要用字符输入,不能是中文或其他。

2).在关联函数确认写对的情况下,看提交数据函数中的业务设置,比如有可能是因为保单查询语句,设置的查询时间是过去的时间,新生成的投保单当然查不到,这样程序也会报这样的错。

3.loadrunner 执行理赔的立案处理,录制好脚本后,回放,报错:

脚本日志信息提示:

1.Action.c(400): Error-26366: “Text=立案信息提交成功” not found for web_reg_find [MsgId: MERR-26366] 2.Action.c(400): web_submit_data(“claimSave.do”)highest severity level was “ERROR”, 4424 body bytes, 258 header bytes [MsgId: MMSG-26388] 脚本执行过程停止在立案信息提交页面,错误原因:数据问题,可能是有的应该变化的信息没有变。

在该流程中,一个报案号只能做一次立案,而初始脚本没有设置参数、关联,使用保单号进行查询,错误被掩盖。在立案系统中,一个保单号可以重复报案,但是一个报案号只能一次立案,要跑通流程,需要先将这一保单再重复报案,得到新的报案号。

六. 性能测试的场景设置

脚本录制完毕后,接着准备测试场景。1.首先准备测试数据。比如车险投保,需要投保人和车架号信息来唯一标识一辆被保车,因此就需要将投保人和车架号做参数化处理,编辑文本框录入大量数据让脚本唯一读取:

1).录入投保人参数,车架号参数,过程同脚本录制的参数化处理

2).因为投保人和车架号一起生成一条投保数据,可设置车架号随投保人参数一起读取,设置步骤为:

投保人文件存放路径--File path

投保人参数数据读取方式

脚本按列名读取参数,每行数据读取一次,每次循环取一次新值。接着设置车架号参数信息:

车架号参数读取文件路径设为和投保人文件路径一样

脚本按列名读取参数,行号选择和读取的投保人数据同一行

这样得到所需的投保单生成参数数据

2.设置测试场景

点击Tools->Create Controller Scenarios,弹出场景类型选择框:

录入需要的虚拟用户数,选择生成结果存放路径和组名。确定后进入具体设置页面:

Quantity表示虚拟用户个数,group name为组名。

1).设置运行时间选项Run – time Settings

选择循环次数Run Logic->Iteration Count,设置循环10次,虚拟用户数为之前设置的5人,则预计一共可生成50张投保单。

设置思考时间,思考时间通常是录制脚本过程中,填写页面信息花费的时间,选择忽略项,节省跑脚本的时间。

设置网络连接时间,点击网络协议项Internet Protocol 的Options键,将弹出页面里的HTTP-request connect timeout和 HTTP-request receive timeout的数值改为1000。使得能在网络状况不太好的情况下向服务器发送接收数据。

2).设置Edit Schedule

选择虚拟用户加载方式:

可以一次加载所有用户,也可以按需要设置,一秒加载一个用户或其他。

选择结束方式:

当选择一秒加载一个用户时,结束设置为直到跑完所有脚本停止执行。如果选择选择一次加载所有用户可以选择运行多少时间后停止和不停止选项。

这些设置完成后,一次测试场景布置完成。可以进行基线检查或单点并发测试。

七. 性能测试步骤

一).除测试工具外性能测试必备的系统及业务知识

1、熟悉保险行业业务特点,有助于与开发和客户讨论需求,制定测试用例;

2、熟悉系统的实现特点,开发实现方式,有助于选择程序处理复杂、消耗系统资源的用例点;

3、熟悉数据结构,了解数据存储规则,对脚本调试、数据准备、测试执行和监视都有帮助;

4、熟悉系统所使用的数据库、操作系统、中间件的监视和性能问题查看,有助于测试监视和发现问题;

5、熟悉系统架构及系统集成方式,有助于分析及明确定位性能问题。

二)性能测试执行过程 1.基线检查

1).目的:验证环境是否可用;

验证脚本是否能在场景正常执行。

2).方法:1个人单独循环5次--没有其他人干扰,干净的环境

3).结果:一般一个事物的响应时间超过3秒就可能存在问题,要提报开发人

2.单点并发

1).目的:为了快速的发现问题,如多进程的锁机制,看是否相互间有影响。2).方法:一般是10人或20人执行10到15分钟,执行过程忽略思考时间。

忽略思考时间可以减少客户端时间,加快向服务器传送数据速度,很大程度上增大了服务器的压力,20个人单点并发的压力就相当于200人正常执行带给服务器的压力。

3).单点测试的数据可以用来进行混发测试,但是有可能单点测试的数据不足以进行混发,需要自己再准备足够的数据。

3.方案测试--混发测试

1).目的:模拟生产环境

2).方法:执行1小时左右,加上思考时间

八.资源监控及调优

性能测试执行过程中,需要监控系统各项资源,看是否能满足用户实际需要,如内存使用,SQL SERVER等,结合LR生成的分析报告,分析系统哪里可能存在问题,需要改进,进行调优,这也是我之后要接着进行学习的地方。

1.学习使用weblogic,了解weblogic常配参数的意义。通过weblogic自身的监控台,可以了解到目前的JVM的大小、数据库连接池的使用情况以及目前连接的客户端数量以及请求状况等等。

2.学习oracle使用,熟悉它的体系结构,尤其是oracle10里 的awr,awr能采集与统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。

篇3:loadrunner报告

目前对性能测试没有明确的定义,它主要是针对系统的性能指标制定性能测试方案,执行测试用例,得出测试结果来验证系统的性能指标是否满足既定值。性能指标里可能包括系统各个方面的能力,如系统并发处理能力,批量业务处理能力,数据库机制等。

性能测试包括负载测试、压力测试和容量测试。

压力测试(Stress Test)是通过不断向被测系统施加“压力”,测试系统在压力情况下的性能表现,是一种性能测试指数据在超负荷环境中运行,程序是否能够承担。

负载测试(Load Test)是为了检验系统在给定负载下是否能达到预期性能指标。

容量测试(Capability Test)是针对数据库而言,是在数据库中有较大数量的数据记录情况下对系统进行的测试,确定系统可处理同时在线的最大用户数。

2 Load Runner介绍

Load Runner是一种预测系统行为和性能的负载测试工具。通过模拟上千万用户实施并发负载及实时性能检测来确认和查找问题,能够对整个企业架构进行测试。通过使用Load Runner,企业能够最大限度的缩短测试时间,优化性能和加速应用系统的发布周期。Load Runner能支持广泛的协议和技术,功能比较强大,可以为特殊环境提供特殊的解决方案。Load Runner由下面三部分组成:Virtual User Generator用来录制脚本、编辑脚本;Controller用来布置测试场景、执行测试场景;Analysis用来对测试结果进行分析。

用Load Runner进行负载测试的流程通常由五个阶段组成:计划、脚本创建、场景定义、场景执行、监视执行和结果分析。

1)计划负载测试:定义性能测试要求,例如并发用户数量、业务流程和所需响应时间;

2)创建Vuser脚本:将最终用户活动捕获到自动脚本中;

3)定义场景:使用Load Runner Controller设置测试环境;

4)运行场景:通过Load Runner Controller驱动、管理测试;

5)监视场景:通过Load Runner Controller监控测试;

6)分析结果:使用Load Runner Analysis创建图和报告并评估性能。

3 Vu Gen脚本开发

Load Runner可以模拟一个数千用户同时使用客户端/服务器系统的环境。为执行此操作,Load Runner用“虚拟用户(Vuser)”代替实际用户。Vuser执行的操作是用Vuser脚本描述的。Load Runner提供各种帮助来开发Vuser脚本的工具。

Load Runner提供了多种Vuser技术,通过这些技术可以在使用不同类型的客户端/服务器体系结构时生成服务器负载。每种Vuser技术都适合于特定体系结构并产生特定的Vuser类型。例如,可以使用Web Vuser模拟用户操作Web浏览器、使用Tuxedo Vuser模拟Tuxedo客户端与Tuxedo应用程序服务器之间的通信、使用RTE Vuser操作终端仿真器。各种Vuser技术既可单独使用,又可一起使用,以创建有效的负载测试方案。

Vuser脚本的结构和内容因Vuser类型的不同而不同。例如,数据库Vuser脚本总是包含三部分,是在一段类似C语言并且包括对数据库服务器的SQL调用的代码中编写的。相反,GUI Vuser脚本只有一个部分,并且是用TSL(测试脚本语言)编写的。

开发Vuser脚本的过程开始于录制一个基本的脚本。Load Runner为您提供了大量录制Vuser脚本的工具。您可以通过将控制流结构和其他Load Runner API添加到脚本中来增强该基本脚本。然后配置运行时设置。运行时设置包括迭代、日志和计时信息,以及定义Vuser在执行Vuser脚本时的行为。要验证脚本是否能正确运行,请以单独模式运行该脚本。如果脚本运行正确,则将其合并到Load Runner方案中。录制业务流程时,Vu Gen生成一个由函数构成的Vuser脚本。函数中参数的值是录制期间使用的实际值。

每个Vuser脚本都至少包含三部分:vuser_init、一个或多个Actions及vuser_end。录制前和录制期间,可以选择脚本中Vu Gen要插入已录制函数的部分。下表显示了要在每一部分录制的内容以及执行每一部分的时间。

运行多次迭代的Vuser脚本时,只有脚本的Actions部分重复,而vuser_init和vuser_end部分将不重复。可以使用Vu Gen脚本编辑器来显示并编辑每个脚本部分的内容。但一次只能显示一个部分的内容。要显示某一部分,请在左窗格中突出显示该部分的名称。

在处理使用Java类的Vuser脚本时,可以将所有代码都置于Actions类中。Actions类包含三个方法:init、action和end。这些方法对应于脚本中使用其他协议开发的部分,您可以在init方法中插入初始化例程、在action方法中插入客户端操作,并在end方法中插入注销过程。

4 Controller测试方案设计

4.1 方案开始时间

打开“延迟方案开始时间”对话框,可以在其中延迟方案的开始时间。按方案定义计划,定义整个方案的设置->“加压”选项卡->“持续时间”选项卡->“减压”选项卡->按组计划:定义各个组的设置。从左侧的框中,选择要计划的Vuser组->“开始时间”选项卡->“加压”选项卡->“持续时间”选项卡->“减压”选项卡。

4.2 计划方案,使用计划生成器,可以通过下列方式控制方案的执行

限制方案持续时间->在方案中逐渐运行Vuser->在方案中逐渐停止Vuser。要为方案设置计划选项,请执行下列操作:

1)选择“按方案计划”选项。

2)要确定方案开始的方式,请单击“加压”选项卡。选择下列选项之一:

a同时加载所有的Vuser:同时启动方案中的所有Vuser;

b启动X个Vuser,每X(时W分W秒):同时开始运行指定数目的Vuser,并在两次Vuser加压之间等待指定的时间。

注意:方案运行时,您可以在方案中添加Vuser组/脚本,然后启用它们。在逐渐加压模式下,如果在方案中的所有Vuser都加压之后添加Vuser组/脚本,则新的组/脚本将立即开始加载。

3)要指示Load Runner在开始加载Vuser之前对它们进行初始化,请选中“加压之前初始化所有的Vuser”。注意,Load Runner仅在Vuser全部达到“就绪”状态后才加载它们。

4)要设置方案的持续时间,请单击“持续时间”选项卡。

选择下列选项之一:

a运行直到完成;

b在加压完成之后运行X(时W分W秒):所有Vuser都已加压之后,再运行方案一段指定的时间;

c无限期运行。

5)要确定方案停止的方式,请单击“减压”选项卡。

选择下列选项之一:

a同时停止所有的Vuser:同时停止方案中的所有Vuser;

b停止X个Vuser,每=u(时W分W秒):在指定的时间段内停止一定数目的Vuser。

6)单击“确定”关闭计划生成器并保存设置。

4.3 控制器设置

使用联机监视器可以监视Vuser状态、错误、事务、系统资源、Web资源、网络延迟、防火墙服务器资源、Web服务器资源、Web应用程序服务器资源、数据库服务器资源、流媒体资源、ERP/CRM服务器资源、Java性能、应用程序部署和中间件性能监视器。要启动联机监视器,请执行下列操作:

1)启动方案。选择要运行的Vuser组,再单击“开始方案”按钮或选择“方案”->“启动”;

2)单击“运行”选项卡。“方案组”窗格下将显示默认图;

3)双击该图,使其最大化。再次执行该操作可以还原为平铺视图;

4)如果不显示图树,请选择“视图”>“显示可用图”。单击左窗格中的“+”号以展开图树。要隐藏图树视图,请选择“视图”>“隐藏可用图”,或者单击“可用图”列表右上角的X按钮。

5)从该树中选择图并将其拖入右窗格中。还可以在窗格之间拖动图。

5 Analysis测试结果分析

5.1 分析事务性能

分析方案运行情况应从平均事务响应时间图和事务性能摘要图开始。使用“事务性能摘要”图,可以确定在方案执行期间响应时间过长的事务。使用“平均事务响应时间”图,可以查看有问题的事务在方案运行期间每一秒钟的行为。

事务性能摘要图描述了方案执行期间每个事务的最短响应时间、平均响应时间和最长响应时间的摘要。在图1的示例中,保留事务在方案执行期间的平均响应时间为44.4秒。

平均事务响应时间图描述保留事务在整个方案运行期间的响应时间很长。在方案执行期间的第六分钟和第十三分钟,此事务的响应时间过长(大约55秒钟)。

为了确定问题并了解在该方案执行期间保留事务响应时间过长的原因,需要细分事务并分析每个页面组件的性能。要细分事务,请在平均事务响应时间图或事务性能摘要图中右键单击该事务,然后选择“<事务名>的网页细分”。

5.2 使用网页细分图

使用网页细分图,可以细分平均事务响应时间图或事务性能摘要图以查看事务中每个页面组件的下载时间。注意,只有在运行方案前启用了“网页细分”功能才可以实现这一点。网页细分图显示了保留事务中每个页面组件的下载时间明细。

如果组件下载的时间过长,应查看这是由哪些度量(DNS resolution time.connection time、time to first buffer、SSL handshakingtime、receive time和FTP authentication time)引起的。要查看方案运行期间发生问题的具体时刻,请选择“页面下载细分(随时间变化)图”。有关所显示度量的详细信息,可以参阅“页面下载时间细分图”。要确定问题是否与网络或服务器相关,请选择“第一次缓冲时间细分随时间变化”。

图4描述了服务器耗时比网络耗时长很多。如果服务器耗时过长,请使用相应的服务器图确定有问题的服务器度量并查明服务器性能下降的原因。如果网络耗时过长,请使用“网络监视器”图确定导致性能瓶颈的网络问题。

5.3 使用自动关联

可以通过分析网页细分图或者使用自动关联功能确定造成服务器或网络瓶颈的原因。自动关联功能应用高级统计信息算法来确定哪些度量对事务的响应时间影响最大。平均事务响应时间图显示方案运行期间每个事务的平均响应时间。

图5描述在方案即将结束运行时Submit Data事务的响应时间相对较长。要将此事务与方案运行期间收集的所有度量关联,请右键单击Submit Data事务并选择“自动关联”。在打开的对话框中,选择要检查的时间段。

单击“关联选项”选项卡,选择要将哪些图的数据与Submit Data事务关联,然

后单击“确定”。在图7中,Analysis显示与Submit Data事务关联最为紧密的五个度量:平均事务响应时间、每秒点击数、Windows资源、Web Logic(JMX)、SQL Server。

此关联示例描述下面的数据库和Web服务器度量对Submit Data事务的影响最大:Number of Deadlocks/sec(SQL Server)、JVMHeap Size Current(Web Logic Server)、Pending Request Current Count(Web Logic Server)、Waiting For Connection Current Count(Web Logic Server)和Private Bytes(Process_Total)(SQL Server)。使用相应的服务器图,可以查看上面每一个服务器度量的数据并查明导致系统中出现瓶颈的问题。

图8描述Web Logic(JMX)应用程序服务器度量JVMHeap Size Current Private Bytes(Process_Total)随着运行的Vuser数量的增加而增加。因此,图8描述这两种度量会导致Web Logic(JMX)应用程序服务器的性能降,从而影响Submit Data事务的响应时间。

5.4 比较方案结果

每次对系统进行细微调整并解决其他性能瓶颈时,都应再次运行相同的负载测试以验证问题是否得到了解决并确认未造成新的性能瓶颈。执行几次负载测试后,可以将初始结果与最终结果进行比较。下图显示了方案的初始负载测试与最终负载测试之间的比较。

第一个负载测试描述在执行任何负载测试前应用程序处于初始状态时的性能。从图9中,可以看到当Vuser为50人时,响应时间大约是90秒,这说明应用程序出现了严重的性能问题。使用Analysis过程,可以确定缩短事务响应时间所需的体系结构更改。对这些站点体系结构进行更改后,在上次执行的负载测试中,具有相同数量用户的相同业务进程的事务响应时间少于10秒。

6 Load Runner的不足之处

Load Runner作为性能测试工具能够发现测试系统中的瓶颈,但在实际的性能测试中它仍然存在着以下的问题。

1)价格昂贵

作为商业的自动化测试工具,其价格和他的功能成正比,功能的强大也使得它价格很高。

2)缺少对自身稳定性的检验

Load Runner使用压力测试计算测试时间时,大概只有Load Runner的产品设计和开发人员才知道测试时间是如何计算的。一个性能测试工具在实施性能测试时,作为一把标尺,但其自身的稳定性又由谁来检验呢。

摘要:性能测试用来测试软件在集成系统中的运行性能的,它是相对于功能测试,并在功能测试基础上对系统进行的全面的测试。而LoadRunner正是一款能够预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。

关键词:性能测试,LoadRunner

参考文献

[1]段念.软件性能测试过程详解与案例剖析.清华大学出版社,2006.

篇4:loadrunner报告

关键词 LoadRunner 并发用户 集合点

中图分类号:TP391.4 文献标识码:A

1关于并发用户和集合点的定义

并发用户:通俗意义上讲就是同时操作的用户,当然这个“同时”可以理解为同一时间段,还可以理解为同一时间点。如果说并发就是同一时间点上同时操作的用户,这样理解没有错误,但对于实际情况来讲,是没有严格意义上的并发执行的,就如同进程和线程关系一样,在某一个点严格上讲就只有一个人得到执行的权利。集合点:用以同步虚拟用户,以便恰好在同一时刻执行任务。这个从概念上来讲,其实也是比较模糊,正因为模糊,使用才值得去深入探讨。对于LoadRunner来说,集合点只是一种策略,而这个策略也会有很多规则,因为实际情况中并非所有用户都会同时到达集合点,因为从客户端发出到网络、中间件、应用层再到数据库,这其中的每一个环节都有延时,也就是说不可能所有的用户都能到达所谓的集合点,才开始同时执行操作。

2关于并发用户和集合点的个人理解

从上面两个概念的理解来讲,有人就会思考,并发用户和集合点到底有没有关系,这才是关键。当然这个就要看需求是什么了,所以说很多时候人们误用集合点和并发用户,其实根本原因在于对需求的理解,需求本身都没有搞清楚想实现的场景,得到什么样的结果。当然需求并不是专业的技术人员,至少大多数人碰到的需求都不一定是技术出身,所以他们不明白,我们就不能装忽悠,不然结果就肯定不符合实际了。通常情况下,我们会得到用户这样的需求“本系统要达到并发用户200”,这种需求从严格意义上来讲是不合格的,因为对于一个系统来说有很多个功能,比如系统登录、注册、查询、删除等等,是要求登录达到200,还是所有功能总共达到200,因为当用户进入系统之后,有些用户在执行注册,有些用户在执行查询,是否可以并行操作,也是所谓的并发,所以说要理解集合点和并发数,从根本上就应该更清晰的理解业务流程,只有把业务分析清楚了,方才可以合理的使用集合点,正确的理解并发用户数。通过对LoadRunner的理解,LoadRunner本身就已经在模拟实现一个并发的过程,而增加集合点设置只是为了并实现严格意义上的所谓的并发,而实际是这个集合点的设置也并非绝对达到了这个目的,结构中的过程就可以证明。

3设置脚本集合点和不设置检查点的对比

在相同场景实际中执行两个脚本之后,发现其响应时间误差很小。在其他项目中包括C/S和B/S都有的,很多项目都实践过,并不是集合点在我们的性能测试中没有作用,如果没有作用相信设计LoadRunner的公司也不会给出来,而是要理解如何选择去用它,这才是关键。之前就讲到过,在一些业务流程比较复杂的应用程序测试中,就必须要使用集合点,比如一个企业系统中业务是这样的:用户登录进入之后,一部分人在完善个人资料,一部分人在查询数据,另一部分人在执行删除操作,还有一部分来发送消息等等。就这样的一个业务中,在模拟执行性能测試时,就必须明确并发用户跟集合点的关系,在实际录制脚本的时候,就需要把这个业务分割成多个事务,然后分别对各个不同的事务设置集合点,为什么此时要使用集合点呢,因为我们必须分析出每一个事务的并发情况,加入200个用户进去之后,就这样放任去这200个用户自由去操作,就不能判断出查询并发数多少、删除并发数多少、发送消息的并发又是多少,因为进入系统之后,没办法确定200个用户都同时干了些什么,所以此处才是集合点使用最合理的地方。至于使用集合点,也源于此,因为通常情况我们主要是对单一业务进行压力测试,比如登录或者是注册,单一功能就如同上面的那个访问web页面一样,脚本只有一个操作,此时对于LoadRunner来讲,其实有没有设置集合点效果不大,而且为了模拟能更加接近实际情况,也是需要做实际分析的。

4结论

总之,性能测试的执行应该是有目的的,通常是为了调优,也有的是为了评测,在以评测为目的的性能测试中,用户更关心的是业务上的并发,其实是真实业务场景的并发情况,这种情况下就不需要设置集合点了。集合点是一种特殊情况下的并发,通常是在以调优为目的的性能测试中才会用得到,主要是为了有针对性地进行施压,以便找到性能瓶颈。

篇5:loadrunner报告

做负载或者压力测试时,很多人选择使用了Loadrunner测试工具。该工具的基本流程是先将用户的实际操作录制成脚本,然后产生数千个虚拟用户运行脚本(虚拟用户可以分布在局域网中不同的PC机上),最后生成相关的报告以及分析图。但是在录制脚本的过程中会遇到很多实际的问题,比如不同的用户有不同的使用数据,这就牵涉到参数的设置问题。本文就Loadrunner中参数的设置进行说明,希望对大家有所帮助。

在录制程序运行的过程中,VuGen(脚本生成器)自动生成了包含录制过程中实际用到的数值的脚本。如果你企图在录制的脚本中使用不同的数值执行脚本的活动(如查询、提交等等),那么你必须用参数值取代录制的数值。这个过程称为参数化脚本。

本文主要包括如下内容:理解参数的局限性、建立参数、定义参数的属性、理解参数的类型、为局部数据类型设置参数的属性、为数据文件设置参数的属性、从已经存在的数据库中引入数据。

除了GUI,以下的内容适合于各种类型的用户脚本。

一、关于参数的定义

在你录制程序运行的过程中,脚本生成器自动生成由函数组成的用户脚本。函数中参数的值就是在录制过程中输入的实际值。

例如,你录制了一个Web应用程序的脚本。脚本生成器生成了一个声明,该声明搜索名称为“UNIX”的图书的数据库。当你用多个虚拟用户和迭代回放脚本时,也许你不想重复使用相同的值“UNIX”。那么,你就可以用参数来取代这个常量。结果就是你可以用指定的数据源的数值来取代参数值。数据源可以是一个文件,也可以是内部产生的变量。

用参数表示用户的脚本有两个优点: ① 可以使脚本的长度变短。

② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

参数化包含以下两项任务:

① 在脚本中用参数取代常量值。② 设置参数的属性以及数据源。

参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。另外,不是所有的函数都可以参数化的。

二、参数的创建

可以指定名称和类型来创建参数。不存在对脚本中参数个数的限制。在Web程序的用户脚本中,你可以使用如下过程在基于文本的脚本视图中创建参数。或者,也可以在基于图标的树形视图中创建参数。

在基于文本的脚本视图中创建一个参数:

1、将光标定位在要参数化的字符上,点击右键。打开弹出菜单。

2、在弹出菜单中,选择“Replace with a Parameter”。选择或者创建参数的对话框弹出。

3、在“Parameter name”中输入参数的名称,或者选择一个在参数列表中已经存在的参数。

4、在“Parameter type”下拉列表中选择参数类型。

5、点击“OK”,关闭该对话框。脚本生成器便会用参数中的值来取代脚本中被参数化的字符,参数用一对“{}”括住。

注意:在参数化CORBA或者General-Java 用户脚本的时候,必须参数化整个字符串,而不是其中的部分。另外注意:除了Web或者WAP,缺省的参数括号对于任何脚本都是“ {}”。你可以在“General Options”对话框中的“Parameterization”标签(Tools>General Options)中定义参数括号种类。

6、用同样的参数替换字符的其余情况,选中参数,点击右键,弹出菜单。从弹出的菜单中,选择“Replace More Occurrences”。搜索和替换对话框弹出。“Find What”中显示了你企图替换的值。“Replace With”中显示了括号中参数的名称。选择适当的检验框来匹配整个字符或者大小写。如果要搜索规则的表达式(.,!,?等等),选中“Regular Expression”检验框,然后点击“Replace”或者“Replace All”。

注意:小心使用“Replace All”,尤其替换数字字符串的时候。脚本生成器将会替换字符出现的所有情况。

7、如果想用以前定义过的参数来替换常量字符串的话,选中该字符串,点击右键,然后选择“Use Existing Parameter”,子菜单“Use Existing Parameters”弹出。从子菜单“Use Existing Parameters”选择参数,或者用“Select from Parameter List”来打开参数列表对话框。

注意:如果用以前定义过的参数来替换常量字符串的话,那么,使用“Parameter List”非常方便。同时,还可以查看和修改该参数的属性。

8、对于已经用参数替换过的地方,如果想取回原来的值,那么,就在参数上点击右键,然后选择“Restore Original value”。

在Web用户脚本的树形视图中创建参数:

1、将光标定位在企图参数化的地方,点击右键,从弹出的菜单中选择“Properties”。则相关的属性对话框打开。

2、点击在要参数化的参量的旁边的“ABC”形状的图标。“Select or Create Parameter”对话框打开。

3、在“Parameter name”中输入参数的名称,或者从列表中选择一个已经存在的参数。

4、在“Parameter type”中输入参数的类型。

5、点击“OK”关闭该对话框。用户脚本生成器会用参数来替换最初的字符串常量,并用一个表格形状的图标替换“ABC”形状的图标。

6、要恢复参数化以前的值,点击图标,然后从弹出的菜单中选择“Undo Parameter”,则以前的值便会重现。

三、定义参数的属性

创建参数完成后,就可以定义其属性了。参数的属性定义就是定义在脚本执行过程中,参数使用的数据源。在Web用户脚本中,你既可以在基于文本的脚本视图中定义参数属性,也可以在基于图标的树形视图中定义参数属性。下面的过程将教你如何在基于本文的脚本视图中定义参数属性。

在基于文本的脚本视图中定义参数属性步骤:

1、在参数上点击右键,有菜单弹出。

2、在弹出的菜单中,选择“Parameter Properties”。参数属性对话框打开,显示和当前参数类型相关的属性。

3、输入参数的属性值。

4、点击“Close”关闭参数属性对话框。

在Web用户脚本的树形视图中定义参数的属性:

1、将关标定位在参数上,然后点击右键,选择“Properties”。属性对话框打开。

2、点击要定义属性的参数旁边的表格形状按钮,点击右键,选择“Parameter Properties”。参数属性对话框打开,和参数类型相关的属性显示出来。

3、输入参数的属性。

4、点击“Close”关闭参数属性对话框。

使用参数列表:

使用参数列表可以在任意时刻查看所有的参数,创建新的参数、删除参数,或者修改已经存在参数的属性。

1、点击参数列表按钮或者用“Vuser>Parameter List”。参数列表对话框打开。

2、要创建新的参数,点击“New”按钮。新的参数则被添加在参数树中,该参数有一个临时的名字,你可以给它重新命名,然后回车。设置参数的类型和属性,点击“OK”,关闭参数列表对话框。

注意:不要将一个参数命名为“unique”,因为这个名称是用户脚本生成器本身的。用户脚本生成器创建新的参数,但是不会自动用该参数在脚本中替换任意选中的字符串。

3、要删除已有的参数,那么,要先从参数树中选择该参数,点击“Delete”,然后确认你的行为即可。

4、要修改已有参数,那么,要先从参数树中选择该参数,然后编辑参数的类型和属性。

四、理解参数的类型

在你定义参数属性的时候,要指定参数值的数据源。你可以指定下列数据源类型的任何一种:

Internal Data―― 虚拟用户内部产生的数据。

Data Files ――存在于文件中的数据。可能是已存在的文件或者是用脚本生成器新创建的。User-Defined Functions―― 调用外部DLL函数生成的数据

Internal Data包括以下几种:

1、Date/Time

Date/Time用当前的日期/时间替换参数。要指定一个Date/Time格式,你可以从菜单列表中选择格式,或者指定你自己的格式。这个格式应该和你脚本中录制的Date/Time格式保持一致。

2、Group Name

Group Name 用虚拟用户组名称替换参数。在创建scenario的时候,你可以指定虚拟用户组的名称。当从用户脚本生成器运行脚本的时候,虚拟用户组名称总是None。

3、Load Generator Name

Load Generator Name用脚本负载生成器的名称替换参数。负载生成器是虚拟用户在运行的计算机。

4.Iteration Number

Iteration Number用当前的迭代数目替换参数。

5、Random Number

Random Number用一个随机数替换参数。通过指定最大值和最小值来设置随机数的范围。

6、Unique Number

Unique Number用一个唯一的数字来替换参数。你可以指定一个起始数字和一个块的大小。

7、Vuser ID

Vuser ID用分配给虚拟用户的ID替换参数,ID是由Loadrunner的控制器在scenario运行时生成的。如果你从脚本生成器运行脚本的话,虚拟用户的ID总是-1。

五、数据文件

数据文件包含着脚本执行过程中虚拟用户访问的数据。局部和全局文件中都可以存储数据。可以指定现有的ASCII文件、用脚本生成器创建一个新的文件或者引入一个数据库。在参数有很多已知值的时候数据文件非常有用。数据文件中的数据是以表的形式存储的。一个文件中可以包含很多参数值。每一列包含一个参数的数据。列之间用分隔符隔开,比如说,用逗号。

对数据文件设置参数属性

如果使用文件作为参数的数据源,必须指定以下内容:文件的名称和位置、包含数据的列、文件格式,包括列的分隔符、更新方法。

如果参数的类型是“File”,打开参数属性(Parameter Properties)对话框,设置文件属性如下:

1、在“File path”中输入文件的位置,或者点击“Browse”指定一个已有文件的位置。缺省情况下,所有新的数据文件名都是“parameter_name.dat”,注意,已有的数据文件的后缀必须是.dat。

2、点击“Edit”。记事本打开,里面第一行是参数的名称,第二行是参数的初始值。使用诸如逗号之类的分隔符将列隔开。对于每一新的表行开始一行新的数据。

注意:在没有启动记事本的情况下如果想添加列,就在参数属性对话框中点击“Add Col”,那么“Add new column”对话框就会弹出。输入新列的名称,点击“OK”。脚本生成器就会添加该列到表中,并显示该列的初始值。

3、在“Select Column”部分,指明包含当前参数数据的列。你可以指定列名或者列号。列号是包含你所需要数据的列的索引。列名显示在每列的第一行(row 0)。

4、在“Column delimiter”中输入列分隔符,你可以指定逗号、空格符等等。

5、在“First data line”中,在脚本执行的时候选择第一行数据使用。列标题是第0行。若从列标题后面的第一行开始的话,那就在“First data line”中输入1。如果没有列标题,就输入0。

6、在“Select next row”中输入更新方法,以说明虚拟用户在脚本执行的过程中如何选择表中的数据。方法可以是:连续的、随机的、唯一的、或者与其它参数表的相同行。

6.1、顺序(Sequential):该方法顺序地给虚拟用户分配参数值。如果正在运行的虚拟用户访问数据表的时候,它会取到下一行中可用的数据。

6.2、随机(Random):该方法在每次迭代的时候会从数据表中取随机数

6.3、使用种子取随机顺序(Use Random Sequence with Seed):如果从Loadrunner的控制器来运行scenario,你可以指定一个种子数值用于随机顺序。每一个种子数值在测试执行的时候代表了一个随机数的顺序。无论你何时使用这个种子数值,在scenario中同样的数据顺序就被分配给虚拟用户。如果在测试执行的时候发现了一个问题并且企图使用同样的随机数序列来重复测试,那么,你就可以启动这个功能(可选项)。

6.4、唯一(Unique):Unique方法分配一个唯一的有顺序的值给每个虚拟用户的参数。

6.5、与以前定义的参数取同一行(Same Line As

):该方法从和以前定义过的参数中的同样的一行分配数据。你必须指定包含有该数据的列。在下拉列表中会出现定义过的所有参数列表。注意:至少其中的一个参数必须是Sequential、Random或者Unique。如果数据表中有三列,三个参数定义在列表中:id1,name1和title1,如下:。ID Name Title 132 Kim Manager 187 Cassie Engineer 189 Jane VP 对于参数id1,你可以指示虚拟用户使用Random方法,而为参数name1和title1就可以指定方法“Same Line as id1”。所以,一旦ID“132”被使用,那么,姓名(Name)“Kim”和职位(Title)“Manager”同时被使用。

7、Updta value on数据的更新方法

7.1、Each iteration――每次反复都要取新值

7.2、Each occurrence――只要发现该参数就重新取值

7.3、Once――在所有的反复中都使用同一个值

8、When out of values超出范围:(选择数据为unique时才可用到)

8.1、Abort Vuser――中止

8.2、Continue in a cyclic manner――继续循环取值

8.3、Continue with last value――取最后一个值

9、Allocate Vuser values in the Controller在控制器中分配值:(选择数据为unique时才可用到)

9.1、Automatically allocate block size――自动分配

9.2、Allocate()values for each Vuser――指定一个值

六、从已存在的数据库中导入数据

Loadrunner允许你利用参数化从已经存在的数据库中导入数据。可以使用下列两种方式之一:

1、使用Microsoft Query(要求在系统上先安装MS Query)。

2、指定数据库连接字符串和SQL语句。

用户脚本生成器在从数据库中导入数据的过程中提供了一个向导。在向导中,你指明如何导入数据-通过MS Query创建查询语句或者直接书写SQL语句。在导入数据以后,以.dat为后缀并作为正规的参数文件保存。要开始导入数据库中数据的过程,在参数属性对话框中点击“Data Wizard”,则,数据库查询向导弹出。

要创建新的查询

1、选择“Create new query”。如果需要MS Query“Show me how to use Microsoft Query”,然后点击“Finish”。的帮助,选择如果你还没有安装Microsoft Query,Loadrunner会提示你这个功能不可用。在进行之前,从Microsoft Office中安装MS Query。

2、在Microsoft Query中遵循以下步骤,导入期望的表和列。

3、在完成数据的导入后,选择“Exit and return to Virtual User Generator”,然后点击“Finish”。在参数属性对话框中数据库记录以data文件的形式显示出来。要在MS Query中编辑并查看数据,选择“View data or edit in Microsoft Query”。若要结束,则选择“File>Exit and return to Virtual User Generator”返回到脚本生成器。

4、在“Select Column”部分,指定包含当前参数数据的列可以指定列号或者列名。注意:列标题默认为第0行(row 0)。

5、从“Select next row”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是:Sequential、Random、Unique或者Same Line As。其中每一项的含义文章前面已经讲述,就不再赘述。

6、如果选择“Advance row each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。

要指定数据库连接或者SQL语句

1、选择“Specify SQL Statement”,然后点击“Next”。

2、点击“Create”指定一个新的连接字符串。选择数据源的窗口弹出。

3、选择已有的数据源,或者点击“New”创建一个新的数据源。向导将提示你穿过创建ODBC数据源的过程。在完成后,连接字符串就会在连接字符串框中显示出来。

4、在SQL框中,输入或者粘贴SQL语句。

5、点击“Finish”继续SQL语句并导入数据。数据库记录将以data文件的形式显示在参数属性框中。

6、在“Select Column”部分中,指定包含当前参数数据的列。你可以指定列号或者列名。

7、从“Select next row”列表中选择一个更新方法来告诉虚拟用户在脚本指定的过程中如何选择表中的数据。可选项是:Sequential、Random、Unique或者Same Line As。

8、如果从Update out of values中,选择“each iteration”,虚拟用户在每次迭代的时候会使用新的一行的数据而不是重复同样的数据。

补充: 第一点:在选用Unique是,在“选择下一行”选择:”each iteration"的时候可以选择“自动分配”和“分配给每个用户”;但是选择“Each occurrence的时候,只能选择”分配给每个用户“; 第二点:each iteration和Each occurrence的区别,前者表示每次迭代,后者表示每次循环;迭代是可以在脚本中”运行设置中进行设置的,参数只有在脚本调用的时候才会更新,循环是只要脚本调用一次就会重新取一次参数,比如用for循环在脚本中实现的循环,如果选择“迭代”参数只能选择一个,而选择循环,则可以更新参数;

篇6:loadrunner报告

LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner能支持广泛的协议和技术,为您的特殊环境提供特殊的解决方案。

脚本规范

有时我们为了衡量某个action的性能,需要在action的开始和结束位置插入这样一个范围,这就定义了一个transaction,LoadRunner 运行到该事务的开始点时,LoadRunner 就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner 可以在脚本中插入不限数量的事务。脚本函数如下:

脚本详细

参数化

首先选择待参数化的内容,点击右键,选择”Replace with parameter”。在弹出的对话框中,填写参数名称、选择Parameter Type,再点击Propeties,进行参数属性设置。现选择最常用的一种参数类型,如下图所示:

点击properties后,可对该参数进行个性化设置

“Select next row ”有以下几种选择:多个VU如何取值

   Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取.Random:在每次循环里随机的读取一个,但是在循环中一直保持不变

Unique :每个VU取唯一的值。注意:使用该类型必须注意数据表有足够多的数。比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。

Same Line As 某个参数(比如username): 和前面定义的参数username 取同行的记录。通常用在有关联性的数据上面。这个也是很有用的,比如有时候我们要求指定VU取读取指定数据,就可以这样定义:创建参数文件,共两列,假设username、passwd,username设定取数方式是unique,passwd则设成 same line as icpcode,如果参数文件第一行数据为992201,200001,则当icpcode=992201时,icpservid会取200001。“Update value on”有如下几种选择:多次迭代如何取值

   once在所有的反复中都使用同一个值,each iteration则每次反复都要取新值,并且在每次循环中读到的该参数的值都相同 each occurrence则只要发现该参数就要重新取值,即如果一个action中有多个该参数,每遇到一个就要重新取一个值。

脚本验证

调试脚本,可以在【Vuser】>【Run-Time settings】中设置循环次数及log输出,然后运行

2创建运行场景(Controller)当脚本创建好后,需要创建测试场景Scenario,一个运行场景包括一个运行虚拟用户的机器列表,一个测试脚本的列表,及大量的虚拟用户,然后利用LoadRunner的Controller来组织测试方案。

2.1虚拟用户数

虚拟用户数目会直接影响到压力的大小。在一般情况下,采用递增虚拟用户的方式来寻找系统能够承受的合理压力。比如,预估总虚拟用户数为20个,可以设置初始为2个,每5分钟增加1或2个用户。

设置好后,接下来就要对Run-Time Setting进行设置了。

2.3 Run-Time Setting

VU中也有一个run-time setting,但作用有所不同,此处的设置主要用来对整个场景运行时进行约束,此时脚本的运行时设置就会失效;若在此没有对运行时设置,则按照脚本的设置来运行。一般情况下,会按照以下方式进行设置

Run Logic:设置成1;--比如设置这里为3,有2个并发用户,相当于执行了6次脚本

Log: 将Enable logging前面勾去掉;--即不打印输出日志,避免造成loadrunner压测机器磁盘撑爆

Think Time:一般情况,为了增大对服务器的压力而选择Ignore think time;

Browser Emulation:一般情况下,不选择Smulate brower cache和 Down non-HTML resousces;--不选择Smulate brower cache 是为了最大程度模拟一个新用户打开链接时请求的都是服务器的资源而不是本地的一些浏览器中缓存的内容;不选择Down non-HTML resousces是因为在压测时,更关注后端应用本身的性能,而不去下载存放在其他机器上的静态资源

Preferences:可以将Advanced下的File and line in automatic transaction name取消掉;--目的也是为减少压测机本身资源的消耗。其它设置项:使用默认设置即可。

2.4Result设置

场景设置好后,即将要开始运行。此时一定要记得的一件事情就是在【Result】>【Result Settings】下将 directory指定到硬盘空间大一点的目录下。因为我们在压测过程中会产生大量的临时文件,如果放在默认目录C:Documents and SettingshanshanLocal SettingsTemp下的话,一般C盘空间都不会太大,会导致压测机器本身磁盘爆掉,进而影响压测结果。关于测试结果

利用loadrunner的Analysis组件可以实现对整个测试场景的结果分析,场景结束后,在controller中可以点击【Resuluts】>【Analyze Results】,即可实现。关于对测试

并发用户压力测试脚本示例: 调用localhost本地服务,进行并发用户压力测试:

Action(){

web_set_sockets_option(“OVERLAPPED_SEND”, “0”);//关闭overlapped

web_reg_save_param(“content”,“LB=”,“RB=”,“Search=Body”,LAST);

web_reg_find(“Fail=NotFound”,“Search=Body”,“SaveCount=times”,“Text=group_field”,LAST);

//lr_convert_string_encoding(lr_eval_string(“{met_2}”),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,“UnicodeString”);//此时skey是一个汉字列表的参数,把它转换为utf-8,存入UnicodeString参数中

//lr_save_string(lr_eval_string(“{UnicodeString}”),“met_2”);

//把UnicodeString参数的值又覆盖回skey参数,前2步相当于完成了skey参数的汉字到utf-8的转换

// web_convert_param(“skey”, “SourceEncoding=PLAIN”, “TargetEncoding=URL”, LAST);

//这一步把skey参数从utf-8又转换到url编码

//lr_output_message(“Url编码 = %s”,lr_eval_string(“{skey}”));

//lr_convert_string_encoding(lr_eval_string(“{key2}”),LR_ENC_SYSTEM_LOCALE,LR_ENC_UTF8,“UnicodeString”);//此时skey是一个汉字列表的参数,把它转换为utf-8,存入UnicodeString参数中

//lr_save_string(lr_eval_string(“{UnicodeString}”),“key2”);

//把UnicodeString参数的值又覆盖回skey参数,前2步相当于完成了skey参数的汉字到utf-8的转换

//web_convert_param(“key2”, “SourceEncoding=PLAIN”, “TargetEncoding=URL”, LAST);

//这一步把skey参数从utf-8又转换到url编码

//lr_output_message(“Url编码 = %s”,lr_eval_string(“{key2}”));

lr_rendezvous(“同步访问web页面”);//集合点

lr_start_transaction(“url”);

web_url(“ropapi.ashx”,“URL=http://localhost:8080/bas-bi/ropapi?method={mmm}&format=json&app_key=B3B6FEAB-4296-4190-9783-894FE11E630B&APP_SECRET=64ED1D47-C5F7-4840-9B3F-17D4C427CC57&bas_event={}”,“Resource=0”,“RecContentType=text/xml”,“Referer=”,“Snapshot=t1.inf”,“Mode=HTML”,LAST);

if(atoi(lr_eval_string(“{times}”))==1)

lr_end_transaction(“url”,LR_PASS);

else

lr_end_transaction(“url”,LR_FAIL);

//lr_convert_string_encoding(lr_eval_string(“{content}”),“utf-8”,“gb2312”,“str”);

//lr_log_message(lr_eval_string(“{str}”));

return 0;}

场景设置:

由于需要设置不同的访问用户请求参数设置,这里通过在场景中3个不同输入参数的脚本实现:

关于loadrunner 多组脚本分别设置用户数

直接设置百分比:secnario-->covert the secnario to the percentage mode

1.run-mode 设置为 basic schedule 2.设置各组脚本的用户数,此处假设有3组脚本a 分配2用户,b脚本分配3用户,c脚本分配7用户。

1.run-mode 设置为 basic schedule

2.设置各组脚本的用户数,此处假设有3组脚本a 分配2用户,b脚本分配3用户,c脚本分配7用户。

3.secnario-->covert the secnario to the percentage mode

4.run-mode 设置为real-world schedule

5.global schedule 组中的 start vusers中设置vusers的总数为 2 + 3 +7 = 12

6.secnario-->covert the secnario to the vuser group mode

递增设置用户场景

上一篇:非主流霸气的经典语录荟萃下一篇:《青铜葵花》高中读后感800字