admin 管理员组

文章数量: 887021

测试工具

LoadRunner的介绍

1.介绍

LoadRunner是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,而且使用LoadRunner能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner可适用于各种体系架构的自动负载测试,能预测系统行为并评估系统性能。

2.功能说明:

LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,从用户关注的响应时间、吞吐量,并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。

3.LoadRunner运行原理

LoadRunner启动以后,在任务栏会有一个Agent进程,通过Agent进程,监视各种协议的Client与Server端的通信。用LoadRunner的一套C语言函数来录制脚本,所以只要LoadRunner支持的协议,就不会存在录制不到的,然后LoadRunner调用这些脚本向服务器端发出请求,接受服务器的响应。至于服务器内部如何处理,它不关心。

LoadRunner通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,优化性能和加速应用系统的发布周期。

4.LoadRunner组成
Virtual User Generator(脚本生成器):

Virtual User Generator是脚本的录制,增强和调试的工具。

作用:主要用于捕捉用户业务流程,并且自动生成脚本;

VuGen (分别为VuGen(虚拟用户脚本生成器))是录制与便携脚本的地方。通过录制或编写脚本来模拟用户的行为。系统会自动调用后台功能组件LG(负载生成器)和Proxy(用户代理)来完成性能测试工作。

Controller(测试控制器):

他主要包括设计场景,场景的执行,测试用例的执行以及各项指标的监控都在这里进行。
作用:它主要包括设置不同脚本的虚拟用户数量、迭代次数、执行时间等;

它是执行负载测试管理和监控的中心。在这里指定具体的性能测试方案,执行性能测试,收集测试数据,监控测试指标。监控工具将测试过程中收集到的客户机、服务器和网络性能指标数据显示在监控页面上,便于测试人员对系统表现进行随时掌握。

Load Generator(模拟器):模拟用户向服务器发送请求;
LG是模拟多用户并发访问被测试系统的组件。模拟多用户访问系统的前提是已经具备了虚拟用户脚本,VuGen是录制和编
辑虚拟用户脚本的工具,录制好的脚本是不同语言表达的文本文件,在LG执行时被解析和执行。脚本录制和回放过程是
在Proxy支持下完成的。

Analysis(结果生成器):

他是分析测试结果,辅助测试人员进行测试分析
在测试完成后,对测试过程中收集到的各种性能数据进行计算、汇总和处理,生成各种图表和报告,为系统性能测试结果分析提供支持。

注意其中Virtual User Generator使用在创建VU脚本阶段,Controller用在定义场景阶段和运 行场景阶段,Analysis用在分析结果阶段

参数说明:

Scenario:场景。所谓场景,是指在每一个测试过程中发生的事件。
Vusers:虚拟用户。LoadRunner使用多线程或多进程来模拟用户对应用程序操作时产生的压力。一个场景可能包括多个虚拟用户,甚至成千上万个虚拟用户。
Vuser Script:脚本。用脚本来描述Vuser在场景中执行的动作。
Transactions:事务。一组相关操作的集合。事务代表了用户的某个业务过程,需要衡量这些业务过程的性能。
rendezvous :集合。相当于一个时间点,当所有的用户都到达该时间点后才进行下一步。当我们测试多个用户并发时,每个用户执行到该事务脚本的先后顺序是不确定的,所以得到的测试结果也并不是一个完全 并发的极限测试结果。在开始事务之前 ,插入一个“集合点”,那么在多用户执行时,就可以将用户请求停下来,直到用户数量达到满足的条件(默认是100%的用户都到达集合点)。那么,所有的用户都将同时发出接下来的请求。(班车发车)

Loadrunner的性能测试过程:

制定性能测试计划

主要实现:分析应用程序、确定测试目标、计划执行的方式

开发测试脚本

LoadRunner 使用虚拟用户的活动来模拟真实用户来操作Web 应用程序,而虚拟用户的活动就包含在测试脚本中,所以说测试脚本对于测试来说是非常重要的。

开发测试脚本要使用 VuGen 组件。

测试脚本要完成的内容有:

  • 每一个虚拟用户的活动
  • 参数化
  • 定义事物
  • 定义检查点
设计运行场景

运行场景描述在测试活动中发生的各种事件。一个运行场景包括一个运行虚拟用户活动的Load Generator 机器列
表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。

运行、监视测试

一切配置妥当,开始运行测试。在运行过程中,需要监视各个服务器的运行情况(DataBase Server、Web Server等)。

分析测试结果

所有前面的准备都是为了这一步。我们需要分析大量的图表,生成各种不同的报告,最后会得出结论。

测试脚本的开发

以Loadrunner安装时附带的样例程序Web Tours进行。
路径在安装LoadRunner的文件加下边的\LoadRunner\WebTours,选择StartServer.bat启动服务器。

1、录制脚本

启动 Visual User Generator 后,选择新建脚本,因为要测试的是web项目,所以选择协议为WebHTTP/HTML,点击创建


WebTours的默认的用户名为jojo,密码为bean

如果LoadRunner的代理proxy没有关的话,会报错

所以要选择 No proxy,这样才不会保错


修改之后

2.脚本分析和日志分析

脚本分析

Action()
{//打开浏览器进入登录页面web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t1.inf", "Mode=HTML", LAST);
//思考时间lr_think_time(8);//事务的开始时间	lr_start_transaction("login");//集合lr_rendezvous("login");//登录操作组合web_submit_form("login.pl", "Snapshot=t2.inf", ITEMDATA, "Name=username", "Value=jojo", ENDITEM, "Name=password", "Value=bean", ENDITEM, "Name=login.x", "Value=67", ENDITEM, "Name=login.y", "Value=8", ENDITEM, LAST);web_image("Search Flights Button", "Alt=Search Flights Button", "Snapshot=t3.inf", LAST);web_set_sockets_option("SSL_VERSION", "TLS1.1");web_add_cookie("SRCHUID=V=2&GUID=3234E78488D340B29AEAA96E5099602D&dmnchg=1; DOMAIN=ieonline.microsoft");web_add_cookie("SRCHD=AF=NOFORM; DOMAIN=ieonline.microsoft");web_add_cookie("SRCHUSR=DOB=20190618; DOMAIN=ieonline.microsoft");web_url("suggestions.zh-CN", "URL=.zh-CN", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t4.inf", "Mode=HTML", LAST);lr_think_time(6);   //思考时间web_url("welcome.pl", "URL=http://127.0.0.1:1080/cgi-bin/welcome.pl?signOff=1", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/cgi-bin/nav.pl?page=menu&in=flights", "Snapshot=t5.inf", "Mode=HTML", LAST);lr_end_transaction("login", LR_AUTO);   //事务的结束时间	return 0;
}

日志分析

Virtual User Script started at : 2019/6/18 22:12:33     开始执行脚本
Starting action vuser_init.               虚拟用户初始化
Web Turbo Replay of LoadRunner 12.0.0 for Windows 8; build 2079 (Jun 17 2014 10:56:12)  	[MsgId: MMSG-27143]
Run mode: HTML  	[MsgId: MMSG-26993]              
Run-Time Settings file: "C:\Users\Z\Desktop\CTest\\default.cfg"  	[MsgId: MMSG-27141]         运行的文件
Ending action vuser_init.              用户初始化结束
Running Vuser... 
Starting iteration 1.          事务开始            
Maximum number of concurrent connections per server: 6  	[MsgId: MMSG-26989]      
Starting action Action.     
........
Action.c(5): web_url("WebTours") was successful, 10076 body bytes, 2371 header bytes, 24 chunking overhead bytes  	[MsgId: MMSG-26385]
Action.c(17): Notify: Transaction "login" started.      
Action.c(20): Rendezvous login                集合操作开始
Action.c(24): web_submit_form("login.pl") started  	[MsgId: MMSG-26355]
...........Action.c(57): web_url("welcome.pl") was successful, 2168 body bytes, 582 header bytes, 24 chunking overhead bytes  	[MsgId: MMSG-26385]
Action.c(66): Notify: Transaction "login" ended with "Pass" status (Duration: 2.5672 Wasted Time: 1.1441).
Ending action Action.
Ending iteration 1.            事务结束
Ending Vuser...         
Starting action vuser_end.
Ending action vuser_end.
Vuser Terminated.


事务的运行时间就是=持续的事务时间-浪费的事务时间

注意:如果在录制的时候忘了添加事务和集合,可以在Search里面的insert in Script里面添加事务和集合

设置检查点

打开view视图里面的snapshot,判断是否登录成功


再次播放脚本

参数的关联和替换

参数关联
同样是在view的snapshot快照里面,选中参数右击,选择添加关联


脚本里面关于关联的函数‘

函数的帮助文档

参数化

在脚本里面选中要参数化的属性,进行参数化,



因为建立的关联,所有和要替换的属性名称一样的地方都会被替换。如果没有进行关联直接进行参数化就会报错。

然后可以在参数属性里面设置值

在LoadRunner的安装目录里面有这个系统的用户名

选择下一行


“选择下一行 ”有以下几种选择
Sequential:按照顺序一行行的读取。每一个虚拟用户都会按照相同的顺序读取
Random:在每次循环里随机的读取一个,但是在循环中一直保持不变
Unique :唯一的数。注意:使用该类型必须注意数据表有足够多的数。比如Controller 中设定20 个虚拟用户进行5 次循环,那么编号为1 的虚拟用户取前5个数,编号为2 的虚拟用户取6-10 的数,依次类推,这样数据表中至少要有100个数据,否则Controller 运行过程中会返回一个错误。

为了避免不正确的参数导致不可用,在设置后,可以选择“模拟参数”来试运行

添入随机数的取值范围为(1-50),选择一种数据格式

更新时间


在更新值的时间中有以下几个选项:
Each Occurrence:在运行时,每遇到一次该参数,便会取一个新的值
Each iteration:运行时,在每一次循环中都取相同的值
Once:运行时,在每次循环中,该参数只取一次值

举例:里面一个参数出现三次
参数值:A1 A2 A3 A4 A5 A6

Each Occurrence:
第一次: A1 A2 A3
第二次: A4 A5 A6
Each iteration
第一次:A1 A1 A1
第二次:A2 A2 A2
Once
第一次:A1 A1 A1
第二次:A1 A1 A1

对页面里面的文本进行检查

在Run-time-Setting里面,对内容检查打上勾,否则检查不到页面的内容

视频播放脚本的执行过程

在工具的tools里面选中option 里面的script 进行如下操作

插入函数

在脚本页面,通过右键-插入-新建步骤可以查看函数列表
1. 控制脚本流程(C语言代码可以直接使用)
if { } else { }
for{ }
while{ }

2. 字符串函数
由于在 VuGen 脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。具体的语法在0帮助说明里面
strcmp 比较两个字符串
strcat 连接两个字符串
strcpy 拷贝字符串

在VuGen 中,以char声明的字符串是只读的,如果试图给char类型的字符串赋值的话,编译会通过,但在运行时会产生“Access Violation”的错误。解决这类问题,就是把字符串声明为字符数组,比如char[100]

3.输出内容
在Search里面的insert in Script里面找到 log massage,选择就好了

4. LoadRunner 提供的标准函数
lr_eval_string 该函数功能是得到参数(参数化输入中)当前的值
exg: lr_output_message(“temp = %s”, lr_eval_string("{WCSParam2}"));
lr_save_string 该函数功能是把一个字符串保存到参数中

举例:
lr_save_string(“439”,“WCSParam3”);
web_reg_save_param(“BODY”,
“LB=“MESSAGE”:{”",
“RB=”:",
LAST);

执行和设置场景:

1.选择创建场景的模式

面向目标的场景:会设定一个目标,TPS为多少,CPU的占用率为多少,吞吐量为多少等去执行脚本
手动场景:最常用的,他没有设定目标,他目的是此昂要测试系统的最大极限为多少。
*

场景计划的设置


计划方式:

  • 场景:初始化,启动 Vuers,持续时间,停止Vuser


启动组,初始化,启动 Vuers,持续时间,停止Vuser

运行模式

实际计划
实际计划就是按照自己设定的那样执行脚本

基本计划
按照模式的方式执行脚本
初始化
*
设置了用户初始化的规则

启动虚拟用户
设置了虚拟用户执行时启动的规则

持续时间
在持续时间里面可以设置极脚本的运行时间


当上边都有的动作都设置好了之后,计划图就出来了

设置脚本执行的进度显示

可以数字模式也可以有百分比模式,他们是在场景里面进行设置的

IP欺骗
IP欺骗也是在场景里面设置的。
1.要有真是用户关联数据库,读取数据库里面的用户
2.需要真实模拟用户的不同IP,

脚本执行结束




Analysis



虚拟用户分析

每秒点击数

吞吐量

HTTP的响应

关联图,查看是否有性能缺陷

可以自动关联也可以手动关联


从关联图中可以看到,吞吐量,并发用户数,每秒的点击数,以及HTTP的向来看,曲线的规律性都是一直在的说明你没有性能问题,而且么一次的点击都对着着一次响应。

事务的执行

事务全部通过,其中用户事务通过5个,自己设置的事物通过10个

事务的平均响应时间

分析占用率

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)个并且%Processor Time 超过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.Disk Queue 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%

本文标签: 测试工具