LoadRunner测试经典案例

news/2024/11/8 17:04:12/

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

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

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

A.菜单中选择运行Virtual User Generator:

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

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

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

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();

return 0;

}

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

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

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

A.从菜单中选择运行Controller:

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

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

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

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

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

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

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

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

执行结果分析如下:

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

(一)      测试实例:

1.   折叠测试组件

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

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

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

2.   折叠随机函数

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

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

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

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

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

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

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

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

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

int rand (void);

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

int srand (seedTime);

示例:

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

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

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

3.   折叠分析占用率

LoadRunner分析页面

1. 平均事务响应时间

Average Transaction Response Time 优秀:<2s

良好:2-5s

及格:6-10s

不及格:>10s

2. 每秒点击率

Hits per Second

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

3. 请求响应时间

Time to Last Byte

4. 每秒系统处理事务数

Transaction per second

5. 吞吐量

Throughout

6. CPU利用率

Processor / %Processor Time :70%

:85%

很差:90%+

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

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

8. 核心态CPU平均利用率

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

9. 处理队列中的线程数

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

10. 文件系统缓存

Memory / Cache Bytes 50%的可用物理内存

11. 剩余的可用内存

Memory / Avaiable Mbytes 至少要有10% 物理内存

12. 每秒下载页数

Memory / pages/sec :无页交换

:CPU每秒10个页交换

很差:更多的页交换

13. 页面读取操作速率

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

14. 物理磁盘利用率

Physical Disk / %Disk Time :<30%

:<40%

很差:<50%+

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

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

16. 网络吞吐量

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

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

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

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

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

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

应该小于1%

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

●  版本要求:

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

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

●  系统要求:

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

●  参数对照:

a)      LR函数:

 

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

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

lr_rendezvous Vuser 脚本中设置集合点

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记录用户定义的数据示例

 

b)       脚本

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

lr_get_host_name 返回执行 Vuser 脚本的主机名

lr_get_master_host_name 返回运行 LoadRunner Controller 的计算机名

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_rendezvous Vuser 脚本中设置集合点

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

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

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

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

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

c)        WEB函数列表:

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

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

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

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

web_submit_form 模拟表单的提交

web_url 加载由"URL"属性指定的 URL

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

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

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

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

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

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

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

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

web_disable_keep_alive 禁用 Keep-Alive HTTP 连接

web_enable_keep_alive 启用 Keep-Alive HTTP 连接

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_param HTML 页上的动态信息保存到参数中。(LR 6.5 及更低版本)

web_create_html_param_ex 基于包含在 HTML 页内的动态信息创建参数(使用嵌入边界)(LR 6.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_param HTML 参数转换成 URL 或纯文本

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

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

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

web_set_sockets_option 设置套接字的选项


http://www.ppmy.cn/news/241090.html

相关文章

高可用性oracle配置步骤(HP-Unix环境)

硬件环境&#xff1a; 两台HP Server rp5470小型机&#xff0c;7110磁盘阵列 软件环境&#xff1a; HP-UX B.11.11、MirrorDisk/UX B.11.11、MC / Service Guard A.11.14、Oracle 9i for HP-UX。 3.1准备系统3.1.1编辑安全文件&#xff1a;[/machine01]vi .rhosts文件machin…

如设置oracle在Hp-unix上的自动启动

经常有人会需要Oracle数据库随着操作系统一起启动和关闭&#xff0c;而修改/etc/oratab,设置了oracle SID行启动为Y时实际上是不好用的。本文以一个例子来示范如何去做。[more] 如下给的是一个example&#xff0c;注意部分内容可能要改&#xff0c;比如oracle的用户名。 1、在/…

Hp unix rm文件空间不释放问题解决

1 引言 很多人会遇到在操作系统上rm掉一个大的文件&#xff0c;以解决文件系统超标的问题&#xff0c;可是有的时侯文件删除掉了&#xff0c;而空间却未释放出来。论坛上也常常见这样贴子&#xff0c;为什么会这样&#xff0c;如何解决呢&#xff1f;本文只局限于Hp unix的操作…

Hp-unix下为Oracle配置异步IO

本文给出了hp-unix下为Oracle配置异步IO(AIO)的具体的流程。[more] 源自Metalink Note:139272.1PURPOSE ------- The purpose of this document is to discuss the implementation of asynchronous i/o (aio) on HP-UX, specifically to enable aio for the Oracle RDBMS Serve…

计算机无法发现网络共享打印机,网络打印机,无法被其它电脑识别

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 网络打印机&#xff0c;无法被其它电脑识别&#xff1a;(本文由“浪子海风”经验组编) 我电脑重装过后&#xff0c;其它电脑就识别不了我的网络打印机了。未重装之前都是可以的&#xff0c;每台电脑都能保证正常上网。(大侠们&…

HP FC60 RAID级别更改方案

1 背景 xx用户智能网SDP业务为数据核心部分&#xff0c;现在以一套RP4440双机加一台VA7110和DS2405存储&#xff0c;为了确保SDP业务的在双机同时出现故障时&#xff0c;能向200用户提供业务&#xff0c;特此做一台个SDP业务应急处理机。 2 可行性分析 2.1 现有应急环境硬件配置…

hp-ux UDP 优化

官方文档未有这方面设置&#xff0c;本设置取自于最佳实践[more] 1、永久生效 请将如下几行添加到/etc/rc.config.d/nddconf文件中TRANSPORT_NAME[0]socketsNDD_NAME[0]socket_udp_rcvbuf_defaultNDD_VALUE[0]1048576TRANSPORT_NAME[1]socketsNDD_NAME[1]socket_udp_sndbuf_def…

思科c220 m3服务器准系统,HP DL380G9服务器准系统 P440AR+电池

HDS USP-V P/K ASSY (CACHE) WP641-A HP XP24000 5529251-A 5529220-A HDS USP-V DKC 主电源 HP XP24000 PPD0720 HITACHI AMS 1000 DF700-RKH电源3274575-A HDS USP-V Shared Memory Adapter (U) WP651-A 5529257-A HDS USP-V P/K ASSY (CSW) WP630-A 5529247-A HDS USP-V D…