性能测试工具LoadRunner简介蔚少旭2012.4.1性能测试相关术语、概念性能(performance):计算机系统或子系统实现其功能的能力。对计算机系统或子系统执行其功能的能力的度量。(例如:响应时间、吞吐量、事务数等)性能测试(Performancetesting):是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试(LoadTesting):通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。压力测试(StressTesting):是对系统不断施加压力的测试,是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个Web站点在大量的负荷下,何时系统的响应会退化或失败。容量测试(VolumeTesting):确定系统可处理同时在线的最大用户数。性能测试相关术语、概念并发测试(Concurrencytesting):主要指当测试多个用户并同时访问同一个应用程序、同一个模块数据记录时是否存在死锁或其他性能问题,几乎所有的性能测试都会涉及并发测试。(*并发用户数的计算)强度测试、稳定性测试、疲劳度测试、大数据量测试、配置测试、峰谷测试、异常测试等等。事务场景集合点参数化思考时间性能测试相关术语、概念TPS吞吐量资源利用率响应时间在线用户数并发用户数性能测试的目的性能测试的目的是为了验证软件系统是否能够达到用户提出的性能指标(或通过分析获得),同时发现软件系统中存在的性能瓶颈,从而进行优化整个系统性能的目的。包括以下几个方面1、评估系统的能力2、识别系统中的弱点3、系统调优4、验证可靠性和稳定性问题LoadRunner是什么?LoadRunner能做什么?为何使用LoadRunner?如何使用LoadRunner?MercuryInteractive(MI)公司开发的一套预测系统行为和性能的工业标准级负载测试工具。用于测试应用程序的性能。在可控制的峰值负载条件下测试系统。轻松创建虚拟用户创建真实的负载大量实时监测器精确分析结果自动重复测试支持最广泛的协议Loadrunner的工作原理代理(Proxy)是客户端和服务器端之间的中介人,LoadRunner就是通过代理方式截获客户端和服务器之间交互的数据流。1)虚拟用户脚本生成器通过代理方式接收客户端发送的数据包,记录并将其转发给服务器端;接收到从服务器端返回的数据流,记录并返回给客户端。这样服务器端和客户端都以为在一个真实运行环境中,虚拟脚本生成器能通过这种方式截获数据流;虚拟用户脚本生成器在截获数据流后对其进行了协议层上的处理,最终用脚本函数将数据流交互过程体现为我们容易看懂的脚本语句。2)压力生成器则是根据脚本内容,产生实际的负载,扮演产生负载的角色。3)用户代理是运行在负载机上的进程,该进程与产生负载压力的进程或是线程协作,接受调度系统的命令,调度产生负载压力的进程或线程。4)压力调度是根据用户的场景要求,设置各种不同脚本的虚拟用户数量,设置同步点等。5)监控系统则可以对数据库、应用服务器、服务器的主要性能计数器进行监控。6)压力结果分析工具是辅助测试结果分析。性能测试的准备工作深入了解系统功能深入了解系统架构设计性能测试用例准备基础数据和测试数据•Vugen–LoadRunner用Vuser模拟实际用户的操作。–开发Vuser脚本的过程:生成脚本-增强、编辑脚本-配置运行时设置-调试、运行脚本•Vugen–增强、编辑脚本•事务(Transaction)•集合点(Rendezvous)•关联•检查点(EnableImageandtextcheck)•其它(注释、thinktime、优化等)为了衡量某个任务的性能,需要在该任务的开始和结束位置插入事务。每个事务度量服务器响应指定的Vuser请求所用的时间。LoadRunner使用Vugen调试、运行脚本参数化“Selectnextrow”有以下几种选择:多个VU如何取值Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取Random:在每次循环里随机的读取一个,但是在循环中一直保持不变Unique:每个VU取唯一的值。注意:使用该类型必须注意数据表有足够多的数。SameLineAs某个参数(比如Name):和前面定义的参数Name取同行的记录。通常用在有关联性的数据上面。“Updatevalueon”有如下几种选择:多次迭代如何取值once在所有的反复中都使用同一个值,eachiteration则每次反复都要取新值,eachoccurrence则只要发现该参数就要重新取值,也就是如果一个action中有多个该参数,每遇到一个就要重新取一个值。11LoadRunner使用Controller场景类型ManualScenario:手动设置场景,这项下面还可以设置为每一个脚本分配要运行的虚拟用户的百分比,可在Controller的Scenario菜单下设置。Goal—OrientedScenario:如果测试计划是要达到某个性能指标,比如:每秒多少点击,每秒多少transactions,能到达多少VU,某个Transaction在某个范围VU(500-1000)内的反应时间等等,那么就可以使用面向目标的场景。12LoadRunner使用Controller场景计划(Schedule)以ManualScenario为例:13LoadRunner使用Controller集合点策略14LoadRunner使用IP欺骗网卡的IP地址是怎么获取的。多机联合测试ScenarioSchedule—Generators—Add—Connect(关注:Status)小问题脚本中的Init、Action、End三个部分有什么区别?在运行时设置中设定迭代次数或在执行计划中设置了场景持续时间后,Init和End中的部分将只执行一次,不会参与迭代,只有Action中的脚本会重复执行。只有在Action中才能够添加事务和集合点,在Init和End中不能添加。通常将初始化/释放资源,或者只需要执行一次的代码放在Init和End中。如登录、退出,或打开/关闭数据库、打开/关闭文件等。16小问题一个Action是一个事务吗?在运行时—General—AutomaticTransactions中可以进行选择,第一项就是默认的,一个Action就是一个事务,选择第二项时,就是每一个步骤都是一个事务小问题如何进行带宽模拟?在运行时—NetWork—NetWorkSpeed中可以进行选择,模拟各种带宽情况下,对服务器的请求,带宽越大,对服务器的压力越大。小问题TotalThroughput(bytes):在整个测试过程中,从服务器返回给客户端的所有字节数量。吞吐率=吞吐量/测试时间TotalHits:按照客户端向后台发起了多少次请求进行计算(记住,不是点击了页面多少次,而是看页面中的引用的图片或视频有多少个,TotalHits=图片视频数量+1)。点击率=点击量/测试时间小问题如何进行手动关联手动关联的执行过程大致如下:使用相同的业务流程和数据,录制两份脚本使用WinDiff工具或者通过TreeView视图找出需要关联的部分使用web_reg_save_param函数手动建立关联将脚本中有用到关联的部分,以参数取代20小问题如何实时显示当前的正回放的操作?Tools---GeneralOptions---Display—Showbrowserduringreplay选择即可小问题为什么无法监控系统的资源情况?如果是Windows操作系统,则必须保证有系统管理员权限。先使用系统管理员身份访问该服务器(\\机器名)一次,在LoadRunner中重新添加Windows性能计数器即可。如果是Unix操作系统,则必须确保rstatd进程已启动。22小问题运行脚本后,在运行日志中显示“Pass”是否表示脚本执行成功?脚本运行状态为“Pass”,表示服务器返回的Http状态为正常,但并不能说明脚本所完成的操作一定如你所期望的那样。你还需要通过其它方式来确保脚本执行的正确性,如在脚本中添加文本检查点、图像检查点、查看应用系统的日志以及查看数据库等。23小技巧Http协议中的两种录制方式如何选择?1基于浏览器的应用程序推荐使用HTML-basedScript2不是基于浏览器的应用程序推荐使用URL-basedScript。3如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,比如DataGrid的分页按钮等,也要使用URL-based方式录制4基于浏览器的应用程序中使用了HTTPS安全协议,使用URL-based方式录制24小技巧由于在VuGen脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。具体的语法请参考帮助说明。strcmp比较两个字符串strcat连接两个字符串strcpy拷贝字符串注意:在VuGen中,以char*声明的字符串是只读的,如果试图给char*类型的字符串赋值的话,编译会通过,但在运行时会产生“AccessViolation”的错误。解决这类问题,就是把字符串声明为字符数组,比如char[100]。小技巧每次在Controller中运行一个场景时,LR都会把返回结果保存在指定的目录下,场景运行结束后,你可以在该目录中找到一个扩展名为“lrr”的文件,双击这个文件就可以在Analysis中看到在本次场景运行过程中LR收集到的各种信息。但是每次在Analysis中打开返回结果时,LR都要去ACCESS数据文件中读取数据,然后初始化图表,耗时太长。解决办法:将返回结果保存成Session——保存成Session可以将当前Analysis中的所有内容以文件的形式保存下来,下次打开Session(扩展名为“lra”的文件)时LR直接读取这些文件,并在Analysis中还原为最近一次保存的状态,比直接打开返回结果快多了。2627打开LoadRunner运行日志,帮助调试脚本。把所有响应日志都打印出来的方法(默认情况下是不打印全部日志的):RuntimeSettingsGeneralLog,将Extendedlog中的选项打勾。如果需要在controller中查看vuser的日志,同样可以在RuntimeSettings里设置。如果在录制的过程中有一些多余的操作,在实际的回放和测试时不需要,因此不需要录制的(如点击页面上的“下一页”等),可点暂停键暂停录制,跳过该操作。在录制过程中可以随时添加注释,这样做的好处是可以知道每一步操作的作用。小技巧28RuntimeSettings中的InternetProtocol-Preferences-options可以设置http请求和接收、下载等操作的超时时间(默认是120秒)。当执行场景所需参数的数量很大,使用文件类型的参数难以满足要求时,可考虑使用数字类型的参数(uniquenumber或randomnumber),让LR自动产生该参数值。小技巧谢谢!