loadrunner--应用

Loaderrunner自动化测试工具

一、基本介绍

LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且由不同供应商提供软件和硬件产品。难以预知的用户负载和愈来愈复杂的应用环境使公司时时担心会发生用户响应速度过慢,系统崩溃等问题。这些都不可避免地导致公司收益的损失。MercuryInteractiveLoadRunner能让企业保护自己的收入来源,无需购置额外硬件而最大限度地利用现有的IT资源,并确保终端用户在应用系统的各个环节中对其测试应用的质量,可靠性和可扩展性都有良好的评价。LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快的查找和发现问题。此外,LoadRunner能支持广范的协议和技术,为您的特殊环境提供特殊的解决方案。

二、测试对象

LoadRunner的测试对象是整个企业的系统,它通过模拟实际用户的操作行为和实行实时性能监测,来帮助您更快地查找和发现问题。此外,LoadRunner能支持广泛的协议和技术,为您的特殊环境提供特殊的解决方案

三、主要功能

虚拟用户

使用LoadRunnerVirtualUserGenerator,您能很简便地创立起系统负载。该引擎能够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。它先记录下业务流程(如下订单或机票预定),然后将其转化为测试脚本。利用虚拟用户,您可以在WindowsUNⅨ或Linux机器上同时产生成千上万个用户访问。所以LoadRunner能极大的减少负载测试所需的硬件和人力资源。

 

VirtualUserGenerator建立测试脚本后,您可以对其进行参数化操作,这一操作能让您利用几套不同的实际发生数据来测试您的应用程序,从而反映出本系统的负载能力。以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客户名称,由可变值来代替。在这些变量内随意输入可能的订单号和客户名,来匹配多个实际用户的操作行为。

 

真实负载

Virtualusers建立起后,您需要设定您的负载方案,业务流程组合和虚拟用户数量。用LoadRunnerController,您能很快组织起多用户的测试方案。ControllerRendezvous功能提供一个互动的环境,在其中您既能建立起持续且循环的负载,又能管理和驱动负载测试方案。

 

而且,您可以利用它的日程计划服务来定义用户在什么时候访问系统以产生负载。这样,您就能将测试过程自动化。同样您还可以用Controller来限定您的负载方案,在这个方案中所有的用户同时执行一个动作---如登陆到一个库存应用程序----来模拟峰值负载的情况。另外,您还能监测系统架构中各个组件的性能----包括服务器,数据库,网络设备等----来帮助客户决定系统的配置。

 

定位性能

LoadRunner内含集成的实时监测器,在负载测试过程的任何时候,您都可以观察到应用系统的运行性能。这些性能监测器为您实时显示交易性能数据(如响应时间)和其它系统组件包括applicationserver,webserver,网路设备和数据库等的实时性能。这样,您就可以在测试过程中从客户和服务器的双方面评估这些系统组件的运行性能,从而更快地发现问题。

 

利用LoadRunnerContentCheckTM,您可以判断负载下的应用程序功能正常与否。ContentCheckVirtualusers运行时,检测应用程序的网络数据包内容,从中确定是否有错误内容传送出去。它的实时浏览器帮助您从终端用户角度观察程序性能状况。

 

分析结果

一旦测试完毕后,LoadRunner收集汇总所有的测试数据,并提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。使用LoadRunnerWeb交易细节监测器,您可以了解到将所有的图象、框架和文本下载到每一网页上所需的时间。例如,这个交易细节分析机制能够分析是否因为一个大尺寸的图形文件或是第三方的数据组件造成应用系统运行速度减慢。另外,Web交易细节监测器分解用于客户端、网络和服务器上端到端的反应时间,便于确认问题,定位查找真正出错的组件。例如,您可以将网络延时进行分解,以判断DNS解析时间,连接服务器或SSL认证所花费的时间。通过使用LoadRunner的分析工具,您能很快地查找到出错的位置和原因并作出相应的调整。

 

重复测试

负载测试是一个重复过程。每次处理完一个出错情况,您都需要对您的应用程序在相同的方案下,再进行一次负载测试。以此检验您所做的修正是否改善了运行性能。

 

LoadRunner完全支持EJB的负载测试。这些基于Java的组件运行在应用服务器上,提供广泛的应用服务。通过测试这些组件,您可以在应用程序开发的早期就确认并解决可能产生的问题。

 

利用LoadRunner,您可以很方便地了解系统的性能。它的Controller允许您重复执行与出错修改前相同的测试方案。它的基于HTML的报告为您提供一个比较性能结果所需的基准,以此衡量在一段时间内,有多大程度的改进并确保应用成功。由于这些报告是基于HTML的文本,您可以将其公布于您公司的内部网上,便于随时查阅。

 

接下来的文章编者就将辑录一篇网上的使用LoadRunner®来测试BEA中间件产品文章来与大家分享如何使用LoadRunner进行实际的性能测试。

四、组件部分

1.VuGenLoadGenerator(虚拟用户生成器)用于捕获最终用户业务流程和创建自动性能测试脚本(也称为虚拟用户脚本)。

2.Controller(控制器)用于组织、驱动、管理和监控负载测试。

3.Analysis(分析器)有助于您查看、分析和比较性能结果。

五、性能测试

LoadRunner的虚拟用户

LoadRunner使用虚拟用户(Virtualusers)来模拟实际用户对业务系统施加压力。虚拟用户在一个中央控制器(controllerstation)的监视下工作。

在做一个测试方案时,要做的第一件事就是创建虚拟用户执行脚本。LoadRunner提供了VirtualUserGenerator来录制或编辑虚拟用户脚本。

使用Vugen创建虚拟用户执行脚本

A.从菜单中选择运行VirtualUserGenerator

B.创建一个单协议脚本,选择协议类型为"Tuxedo7"

C.在弹出的窗口中输入Tuxedo客户机程序的可执行文件名(SimpApp.exe),并选择"RecordintoAction"Action

点击"OK"开始录制脚本,这时Vugen就会启动Simpapp.exe,如下图所示,输入WSNADDR,输入字符串(Tuxedoispowerful!)之后,点击TOUPPERTUXEDO服务器完成请求后把输出字符串(TUXEDOISPOWERFUL!)写到"Outputstring"中,点击停止录制按钮。

D.编辑Vuser脚本。在C中做的所有操作都被录了下来,记录到一个脚本文件中,其内容如下,把它存为simpapp

脚本内容如下:

#include"lrt.h"

#include"replay.vdf"

Actions()

{

lrt_tuxputenv("WSNADDR=//172.22.32.25:7110");

lr_think_time⑶;

tpresult_int=lrt_tpinitialize(LRT_END_OF_PARMS);

lrt_abort_on_error();

data_0=lrt_tpalloc("STRING","",1);

lrt_strcpy(data_0,sbuf_1);

data_1=lrt_tpalloc("STRING","",1);

tpresult_int=lrt_tpcall("TOUPPER",data_0,0,&data_1,&olen,0);

lrt_abort_on_error();

lrt_tpfree(data_0);

lrt_tpfree(data_1);

lrt_tpterm();

return0;

}

代码中加粗的函数是LoadRunnerTUXEDO函数的二次包装。

E.点击工具栏中的"执行"按钮来执行我们刚才录制的脚本,确保执行无误。

使用控制器来调度虚拟用户

A.从菜单中选择运行Controller

B.创建一个新的Scenario,选择刚才录制的脚本(simpapp):

点击"OK",弹出Scenario调度界面。在"Quantity"中输入100,表示使用100个虚拟用户。(虚拟用户与购买的LICENSE有关联)

C.点击"EditSchedule"来编辑压力调度。

D.选择"Runtimesettings"来作运行时设置。

Pacing的设置中,"NumberofIterations"用于设置VusersActions被执行的次数;"Startnewiteration"用于设置调度器在什么时机迭代执行VusersActions

"ThinkTime"用于设置Vusers的反应和思考时间,以尽量做到和正常人一样来施压。"Ignorethinktime"表示忽略思考时间,这是理想状态,一般不使用。"Asrecorded"表示按照录制时的实际操作时间。"Multiplyrecordedthinktimeby"表示Vusers的思考时间是实际录制时间的若干倍。

"Miscellaneous"中设置一些杂项,如使用进程还是使用线程等。对于TUXEDO,好象只能选进程模式。

E.选择"Startscenario"来开始本次压力测试调度。

执行结果分析如下:

施压时间为541秒,Vusers数量为100,一共完成的Actions交易数量为5625笔,平均响应时间为5.561秒,TPS17.8

六、实例应用

随机函数

在软件测试工具中如何巧用LoadRunner的随机函数

LoadRunner有自带的随机函数,如果巧妙的加以采用,能解决一些看似很困难的实际问题。

一个项目的性能测试。与数据库直连,根据外部传入的SQLIDSQL参数,从指定数据库中读取SQL模版,拼装成真实的SQL语句、执行,并将得到的结果放入缓存中。目的是减少数据库的压力。

该系统将支撑大量的SQL操作,性能自然成为备受关注的焦点之一。

由于它跟SQL语句相关,在真实环境下,同一时间可能执行着不同类型的SQL,即便是同一类型,其参数也各式各样。那么,怎样才能模拟出最符合实际情况的性能测试场景呢?

首先设计场景,即,在LoadRunner中按照比例随机取到某一类型的SQL,再随机传入参数给它,让最终的每条SQL都是随机生成,各不相同。

从场景中,可以看到,此处涉及双重随机。只采用loadruner的参数设置是无法实现的。此时需要想办法先按设定好的比例随机取到SQL,然后在每条SQL上随机取参数列表中的参数。

于是想到了loadrunner的随机函数。先实现随机取SQLID,之后再在特定的SQL中随机取参数列表中的参数。

LoadRunner中,随机函数是rand(),它用来产生0rand_max之间的随机整数。函数原型是

intrand(void);

然而调用rand之前,必须给随机数产生一个随机种子。这个种子由srand()函数产生。其原型是

intsrand(seedTime);

举例

采用上述两个函数,就能实现第一重随机了。具体脚本代码如下:

通过上面的脚本,实现了性能测试设计的场景。调试通过后,放入Controller中执行。实际执行过程中,Vuser将会按比例随机取到不同类型的SQL,并随机取到SQL中的参数,执行特定的SQL语句。注:sqlid_nameSQLID名称;random_para是通过file方式实现的随机参数;tnweb_url函数的快照名称。

巧用LoadRunner的随机函数,能解决不少实际问题。[3]

分析占用率

1.平均事务响应时间

AverageTransationResponseTime优秀:<2s

良好:2-5s

及格:6-10s

不及格:>10s

2.每秒点击率

HitsperSecond

当增大系统的压力(或增加并发用户数)时,吞吐率和TPS的变化曲线呈大体一致,则系统基本稳定。若压力增大时,吞吐率的曲线增加到一定程度后出现变化缓慢,甚至平坦,很可能是网络出现带宽瓶颈,同理若点击率/TPS曲线出现变化缓慢或者平坦,很可能是服务器响应时间增加,观察服务器资源使用情况,确定是否是服务器问题。

3.请求响应时间

TimetoLastByte

4.每秒系统处理事务数

Transactionpersecond

5.吞吐量

Throughout

6.CPU利用率

Processor/%ProcessorTime好:70%

坏:85%

很差:90%+

7.数据库操作消耗的CPU时间

Processor/%UserTime如果该值较大,可以考虑是否能通过友好算法等方法降低这个值。如果该服务器是数据库服务器,Processor\%UserTime值大的原因很可能是数据库的排序或是函数操作消耗了过多的CPU时间,此时可以考虑对数据库系统进行优化。

8.核心态CPU平均利用率

Processor/%PrivilegedTime如果该参数值和"PhysicalDisk"参数值一直很高,表明I/O有问题。可考虑更换更快的硬盘系统

9.处理队列中的线程数

Processor/ProcessorQueueLength如果该值保持不变(>=2)个并且%ProcessorTime超过90%,那么可能存在处理器瓶颈。如果发现超过2,而处理器的利用率却一直很低,那么或许更应该去解决处理器阻塞问题,这里处理器一般不是瓶颈。

10.文件系统缓存

 

Memory/CacheBytes50%的可用物理内存

11.剩余的可用内存

Memory/AvaiableMbytes至少要有10%的物理内存值

12.每秒下载页数

Memory/pages/sec好:无页交换

坏:CPU每秒10个页交换

很差:更多的页交换

13.页面读取操作速率

Memory/pageread/sec如果页面读取操作速率很低,同时%DiskTimeAvg.DiskQueueLength的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

14.物理磁盘利用率

PhysicalDisk/%DiskTime好:<30%

坏:<40%

很差:<50%+

15.物理磁盘平均磁盘I/O队列长度

PhysicalDisk/Avg.DiskQueueLength该值应不超过磁盘数的1.5~2倍。要提高性能,可增加磁盘

16.网络吞吐量

NetworkInterface/BytesTotal/sec判断网络连接速度是否是瓶颈,可以用该计数器的值和当前网络的带宽,结果应该小于50%

17.数据高速缓存区命中率命中率应大于0.90最好

18.共享区库缓存区命中率命中率应大于0.99

19.监控SGA中字典缓冲区的命中率命中率应大于0.85

20.检测回滚段的争用小于1%

21.监控SGA中重做日志缓存区的命中率

应该小于1%

22.监控内存和硬盘的排序比率最好使它小于10%[4]安装

版本要求

LoadRunner分为Windows版本和Unix版本。如果所有测试环境基于Windows平台,那么只要安装Windows版本即可。

LoadRunnerUnix版本仅提供LoadGenerator组件的安装(即LoadRunner中的负载生成器)。也就是说,这个负载生成器可以在Unix环境下安装和运行,并提供给Controller进行远程管理。但是,脚本的录制和场景的设计必须在Windows平台完成。

系统要求

运行LoadRunner,内存最好在128M以上,LoadRunner7.8的最低要求。内存最好在512M以上,安装LoadRunner的磁盘空间至少剩余500M。操作系统最好为Windows2000

七、最新版本

目前(20127月)可用的最新版本为:HPLoadRunner11.50

八、参数对照

LR函数:

lr_start_transaction性能分析标记事务的开始

lr_end_transaction为性能分析标记事务的结束

lr_rendezvousVuser脚本中设置集合点

lr_think_time暂停Vuser脚本中命令之间的执行

lr_end_sub_transaction标记子事务的结束以便进行性能分析

lr_end_transaction标记LoadRunner事务的结束

Lr_end_transaction("trans1",Lr_auto);

lr_end_transaction_instance标记事务实例的结束以便进行性能分析

lr_fail_trans_with_error将打开事务的状态设置为LR_FAIL并发送错误消息

lr_get_trans_instance_duration获取事务实例的持续时间(由它的句柄指定)

lr_get_trans_instance_wasted_time获取事务实例浪费的时间(由它的句柄指定)

lr_get_transaction_duration获取事务的持续时间(按事务的名称)

lr_get_transaction_think_time获取事务的思考时间(按事务的名称)

lr_get_transaction_wasted_time获取事务浪费的时间(按事务的名称)

lr_resume_transaction继续收集事务数据以便进行性能分析

lr_resume_transaction_instance继续收集事务实例数据以便进行性能分析

lr_set_transaction_instance_status设置事务实例的状态

lr_set_transaction_status设置打开事务的状态

lr_set_transaction_status_by_name设置事务的状态

lr_start_sub_transaction标记子事务的开始

lr_start_transaction标记事务的开始

Lr_start_transaction("trans1");

lr_start_transaction_instance启动嵌套事务(由它的父事务的句柄指定)

lr_stop_transaction停止事务数据的收集

lr_stop_transaction_instance停止事务(由它的句柄指定)数据的收集

lr_wasted_time消除所有打开事务浪费的时间

lr_get_attrib_double检索脚本命令行中使用的double类型变量

lr_get_attrib_long检索脚本命令行中使用的long类型变量

lr_get_attrib_string检索脚本命令行中使用的字符串

lr_user_data_point记录用户定义的数据示例

脚本

lr_whoami将有关Vuser脚本的信息返回给Vuser脚本

lr_get_host_name返回执行Vuser脚本主机名

lr_get_master_host_name返回运行LoadRunnerController的计算机名

lr_eval_string用参数的当前值替换参数

lr_save_string将以NULL结尾的字符串保存到参数中

lr_save_var变长字符串保存到参数中

lr_save_datetime将当前日期和时间保存到参数中

lr_advance_param前进到下一个可用参数

lr_decrypt解密已编码的字符串

lr_eval_string_ext检索指向包含参数数据的缓冲区的指针

lr_eval_string_ext_free释放由lr_eval_string_ext分配的指针

lr_save_searched_string缓冲区中搜索字符串实例,并相对于该字符串实例,将该缓冲区的一部分保存到参数中

lr_debug_message将调试信息发送到输出窗口

lr_error_message将错误消息发送到输出窗口

lr_get_debug_message检索当前消息类

lr_log_message将消息发送到日志文件

lr_output_message将消息发送到输出窗口

lr_set_debug_message设置调试消息类

lr_vuser_status_message生成带格式的输出,并将其写到ControllerVuser状态区域

lr_message将消息发送到Vuser日志和输出窗口

lr_load_dll加载外部DLL

lr_peek_events指明可以暂停Vuser脚本执行的位置

lr_think_time暂停脚本的执行,以模拟思考时间(实际用户在操作之间暂停以进行思考的时间)

lr_continue_on_error指定处理错误的方法

lr_continue_on_error(0);lr_continue_on_error⑴;

lr_rendezvousVuser脚本中设置集合点

TE_wait_cursor等待光标出现在终端窗口的指定位置

TE_wait_silent等待客户端应用程序在指定秒数内处于静默状态

TE_wait_sync等待系统从X-SYSTEM或输入禁止模式返回

TE_wait_text等待字符串出现在指定位置

TE_wait_sync_transaction记录系统在最近的XSYSTEM模式下保持的时间

WEB函数列表:

web_custom_request允许您使用HTTP支持的任何方法来创建自定义HTTP请求

web_image在定义的图像上模拟鼠标单击

web_link在定义的文本链接上模拟鼠标单击

web_submit_data执行“无条件”或“无上下文”的表单

web_submit_form模拟表单的提交

web_url加载由“URL”属性指定的URL

web_set_certificate使Vuser使用在InternetExplorer注册表中列出的特定证书

web_set_certificate_ex指定证书和密钥文件的位置和格式信息

web_set_user指定Web服务器的登录字符串和密码,用于Web服务器上已验证用户身份的区域

web_cache_cleanup清除缓存模拟程序的内容

web_findHTML页内搜索指定的文本字符串

web_global_verification在所有后面的HTTP请求中搜索文本字符串

web_image_check验证指定的图像是否存在于HTML页内

web_reg_find在后面的HTTP请求中注册对HTML源或原始缓冲区中文本字符串的搜索

web_disable_keep_alive禁用Keep-AliveHTTP连接

web_enable_keep_alive启用Keep-AliveHTTP连接

web_set_connections_limit设置Vuser在运行脚本时可以同时打开连接的最大数目

web_concurrent_end标记并发组的结束

web_concurrent_start标记并发组的开始

web_add_cookie添加新的Cookie或修改现有的Cookie

web_cleanup_cookies删除当前由Vuser存储的所有Cookie

web_remove_cookie删除指定的Cookie

web_create_html_paramHTML页上的动态信息保存到参数中。(LR6.5及更低版本)

web_create_html_param_ex基于包含在HTML页内的动态信息创建参数(使用嵌入边界)(LR6.5及更低版本)。

web_reg_save_param基于包含在HTML页内的动态信息创建参数(不使用嵌入边界)

web_set_max_html_param_len设置已检索的动态HTML信息的最大长度

web_add_filter设置在下载时包括或排除URL的条件

web_add_auto_filter设置在下载时包括或排除URL的条件

web_remove_auto_filter禁用对下载内容的筛选

web_add_auto_header向所有后面的HTTP请求中添加自定义标头

web_add_header向下一个HTTP请求中添加自定义标头

web_cleanup_auto_headers停止向后面的HTTP请求中添加自定义标头

web_remove_auto_header停止向后面的HTTP请求中添加特定的标头

web_revert_auto_header停止向后面的HTTP请求中添加特定的标头,但是生成隐性标头

web_save_header将请求和响应标头保存到变量中

web_set_proxy指定将所有后面的HTTP请求定向到指定的代理服务器

web_set_proxy_bypass指定Vuser直接访问(即不通过指定的代理服务器访问)的服务器列表

web_set_proxy_bypass_local指定Vuser对于本地(Intranet)地址是否应该避开代理服务器

web_set_secure_proxy指定将所有后面的HTTP请求定向到服务器

web_set_max_retries设置操作步骤的最大重试次数

web_set_timeout指定Vuser等待执行指定任务的最长时间

web_convert_paramHTML参数转换成URL或纯文本

web_get_int_property返回有关上一个HTTP请求的特定信息

web_report_data_point指定数据点并将其添加到测试结果中

web_set_option在非HTML资源的编码、重定向和下载区域中设置Web选项

web_set_sockets_option设置套接字的选项

九、产品背景

Mercury(美科利)已于2006年被HP(惠普)收购。

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值