前言
LoadRunner
是一款开源桌面应用软件,可用来模拟用户负载完成性能测试工作,
LoadRunner
的功能在版本不断升级的过程中已经十分强大,现在很多互联网公司都在使用LoadRunner
来完成产品或者Loadrunner是业界公认的权威性能测试工具,被誉为工业级的性能测试工具,支持广泛的协议和平台
一、LoadRunner的安装
1
、双击
HP LoadRunner 12.53 Community Edition.exe
启动安装程序
2
、安装程序开始解压,选择默认路径即可,点击
install
3
、
Loadrunner
程序会使用到
Visual C++
的库,如果缺少这些库,安装程序会提示安装,这时选择
“
确定”
进行安装即可,过程中如果提示重启,按要求重启即可,重启后会继续进行安装过程。
4
、按照默认操作一步步进行安装
5
、安装过程中会有如下的提示。若无指定代理使用的证书,则去掉勾选。
6
、至此,
Loadrunner
已安装完毕。
HP network Virtualization
为可选项,可不安装。
7
、双击
HP_LoadRunner_12_Community_Edition_User_Interface_Packs_T7177-15057.exe
,安装中文包。 系统将抽取语言包安装包,可选择抽取的语言包临时存放路径。建议直接默认即可,点击【Install
】
8
、抽取安装包完成后将自动关闭窗口(注此处只是把安装包抽取出来了,要到抽取的安装包中进行安装),此时需要到上一步中选择的路径中找到语言安装包。如未修改路径则在以下路径”C:\Temp\HPLoadRunner 12.02 Community Edition\DVD“打开该文件夹。点击
”Setup“
9
、将自动打开安装目录,点击【语言】
10
、打开选择语言文件夹,选择要安装的语言。本处依次打开如下文件【
Chinese-Simplified
】
→
【
LoadRunner
】
→
【
LR_CHS
】,点击【
LR_CHS
】将进行安装。(其实可以省略掉第
8,9
步,直接找到该文件安装即可)
二、Loadrunner的基本概念
功能:LoadRunner是一种适用于许多软件体系架构的自动负载测试工具,从用户关注的响应时间、吞吐量,
并发用户和性能计数器等方面来衡量系统的性能表现,辅助用户进行系统性能的优化。
原理:LR启动以后,在任务栏会有一个Agent进程,通过Agent进程,监视各种协议的Client与Server端的
通讯,用LR的一套C语言函数来录制脚本,所以只要LR支持的协议,就不会存在录制不到的,然后LR调用这些
脚本向服务器端发出请求,接受服务器的响应。至于服务器内部如何处理,它不关心。
LoadRunner通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,优化性能和加速
应用系统的发布周期。
组成:LoadRunner主要包括三个前台功能组件,分别为VuGen(虚拟用户脚本生成器)、Controller(测
试控制器)和Analysis(结果分析器)。系统会自动调用后台功能组件LG(负载生成器)和Proxy(用户代
理)来完成性能测试工作。
VuGen 是录制与便携脚本的地方。通过录制或编写脚本来模拟用户的行为。
Controller是执行负载测试管理和监控的中心。在这里指定具体的性能测试方案,执行性能测试,收集测试
数据,监控测试指标。监控工具将测试过程中收集到的客户机、服务器和网络性能指标数据显示在监控页面
上,便于测试人员对系统表现进行随时掌握。
LG是模拟多用户并发访问被测试系统的组件。模拟多用户访问系统的前提是已经具备了虚拟用户脚本,VuGen
是录制和编辑虚拟用户脚本的工具,录制好的脚本是不同语言表达的文本文件,在LG执行时被解析和执行。脚
本录制和回放过程是在Proxy支持下完成的。
Analysis在测试完成后,对测试过程中收集到的各种性能数据进行计算、汇总和处理,生成各种图表和报
告,为系统性能测试结果分析提供支持。
在使用
loadrunner
之前,先了解一下几个概念:
Scenario
:场景。所谓场景,是指在每一个测试过程中发生的事件。
Vusers
:虚拟用户。
LoadRunner
使用多线程或多进程来模拟用户对应用程序操作时产生的压力。
一个场景可能包括多个虚拟用户,甚至成千上万个虚拟用户。
Vuser Script:
脚本。用脚本来描述
Vuser
在场景中执行的动作。
Transactions
:事务。事务代表了用户的某个业务过程,需要衡量这些业务过程的性能。
rendezvous
:集合。当我们测试多个用户并发时,每个用户执行到该事务脚本的先后顺序是不确
定的,所以得到的测试结果也并不是一个完全 并发的极限测试结果。在开始事务之前 ,插入一
个
“
集合点
”
,那么在多用户执行时,就可以将用户请求停下来,直到用户数量达到满足的条件(默
认是
100%
的用户都到达集合点)。那么,所有的用户都将同时发出接下来的请求。
Loadrunner的性能测试过程:
制定性能测试计划
主要实现以下内容: 分析应用程序、确定测试目标、计划怎样执行
开发测试脚本
LoadRunner
使用虚拟用户的活动来模拟真实用户来操作
Web
应用程序,而虚拟用户的活动就包含在测试脚本中,所以说测试脚本对于测试来说是非常重要的。
开发测试脚本要使用
VuGen
组件。测试脚本要完成的内容有:
每一个虚拟用户的活动
参数化
定义事物
定义检查点
设计运行场景
运行场景描述在测试活动中发生的各种事件。一个运行场景包括一个运行虚拟用户活动的
Load
Generator
机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。
运行、监视测试
一切配置妥当,开始运行测试。在运行过程中,需要监视各个服务器的运行情况(
DataBase Server
、Web Server 等)。
分析测试结果
所有前面的准备都是为了这一步。我们需要分析大量的图表,生成各种不同的报告,最后会得出结论。
LoadRunner
用
3
个主要功能模块来覆盖性能测试的基本流程。
Virtual User Generator
Controller
Analysis
其中
Virtual User Generator
使用在创建
VU
脚本阶段,
Controller
用在定义场景阶段和运行场景阶段,Analysis用在分析结果阶段
Virtual User Generator是进行脚本录制的,Controller是设计测试场景的,Analysis是产生测试报告的。
三、开发测试脚本
1.Virtual User Generator的使用
首先我们使用Virtual User Generator进行脚本录制:
选择New script and solution,然后选择对应的协议:
比如我们演示的是一个web项目,所以选择web http协议。
创建成功之后,我们看到左上角actions里面有3个标签:
vuser_init:? ?初始化,这个文件从始至终也就意味着脚本从开始运行到结束运行这个过程中,只允许一次。
Action:? ? 存放录制好的脚本(编写代码),这个文件可以运行一次,也可以运行多次,默认运行一次,初始化完成之后运行。
vuser_end:程序退出的时候执行的,运行时机是action运行完成之后执行
Runtime Settings:设置脚本运行参数
Parameters:参数化会用到
点击红色按钮开始录制,
在Record下面是application,主要是选择使用哪个浏览器录制。
URL_address是要录制项目的地址
启动后出现这个组件就说明脚本已经开始录制了
录制成功后就可以看到脚本了,然后我们对脚本进行删减,删除不需要的部分,比如cookies。
脚本加强
由于我们无法从脚本中看到各个性能指标,所以我们需要脚本加强。
脚本加强的方法:
1.事务插入
当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本。
事务(
Transaction
):为了衡量服务器的性能,我们需要定义事务。比如:我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的性能,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner
运行到该事务的开始点时,
LoadRunner
就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在结果中会有反映。插入事务操作可以在录制过程中进行,也可以在录制结束后进行。LoadRunner
可以在脚本中插入不限数量的事务。
通过菜单设计
---
在脚本中插入
---
开始事务、结束事务来进行事务的添加。
事务的状态默认情况下是
LR_AUTO
。一般情况下,我们也不需要修改,除非在手工编写代码时,有可能需要手动设置事务的状态。可以通过步骤导航器来查看步骤的参数选项。
函数:lr_start_transaction("login")开始事务
? ? ? ? ? ?lr_end_transaction("login",LR_AUTO);结束事务
注意事项:
事务必须有开始有结束,开始的事务和结束的事务之间的事务名称必须一致
2.插入集合点
可以测试并发的情况,比如在某个函数插入集合点,那么不管是先运行的用户还是后运行的用户都会等在集合点,等到条件满足后所有用户均开始运行。所以集合是为了达到并发的机制。
插入集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000
人同时提交数据,在
LoadRunner
中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner
就会检查同时有多少用户运行到集合点,如果不到
1000人,LoadRunner
就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到
1000
人时,LoadRunner 命令
1000
人同时去提交数据,从而达到测试计划中的需求。
注意:集合点经常和事务结合起来使用。集合点只能插入到
Action
部分,
vuser_init
和
vuser_end
中不能插入集合点。
具体的操作方法如下:在需要插入集合点的前面,通过菜单操作:菜单设计
---
在脚本中插入
---
集合
插入函数:lr_rendezvous()
3.插入检查点
函数:
web_reg_find("fail = NotFound",
? ? ? ? ? ? ? ? "search = all",
? ? ? ? ? ? ? ? "SaveCount=",
? ? ? ? ? ? ? ? "Text = welcome",
? ? ? ? ? ? ? ? LAST);
4.参数化
如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。这些操作都被记录到了脚本中。当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。为了更加真实的模拟实际环境,需要各种各样的输入。
参数化输入是一种不错的方法。
用参数表示用户的脚本有两个优点:
① 可以使脚本的长度变短。
② 可以使用不同的数值来测试你的脚本。例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。
参数化包含以下两项任务:
① 在脚本中用参数取代常量值。
② 设置参数的属性以及数据源。
参数化仅可以用于一个函数中的参量。你不能用参数表示非函数参数的字符串。
下面介绍一下参数的类型。
日期
/
时间:很简单,在需要输入日期
/
时间的地方,可以用
DateTime
类型来替代。其属性设置也很简单,选择一种格式即可。当然也可以定制格式。
组名:在实际运行中,
LoadRunner
使用该虚拟用户所在的
Vuser Group
来代替。但是在
VuGen
中运行时,Group Name
将会是
None
Load Generator Name
:在实际运行中,
LoadRunner
使用该虚拟用户所在
LoadGenerator
的机器名来代替。
迭代编号:在实际运行中,
LoadRunner
使用该测试脚本当前循环的次数来代替。
随机数字:随机数。很简单。在属性设置中可以设置产生随机数的范围
唯一编号:唯一的数。在属性设置中可以设置第一个数以及递增的数的大小(每个
Vuser
的块大小)。
注意:使用该参数类型必须注意可以接受的最大数。例如:某个文本框能接受的最大数为
99
。当使用该参数类型时,设置第一个数为1
,递增的数为
1
,但
100
个虚拟用户同时运行时,第
100
个虚拟用户输入的将是100
,这样脚本运行将会出错。
注意:这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为
1
。
举例说明:假如起始数为
1
,递增为
5
,那么第一个用户第一次循环取值
1
,第二次循环取值
2
;第二个用户第一次循环取值为6
,第二次为
7
;依次类推。
Vuser ID
:设置比较简单。在实际运行中,
LoadRunner
使用该虚拟用户的
ID
来代替,该
ID
是由
Controller
来控制的。但是在
VuGen
中运行时,
Vuser ID
将会是
–1
。
File
:需要在属性设置中编辑文件,添加内容
用户定义的函数:从用户开发的dll
文件提取数据。
参数化设置完之后需要更改日志
5.打印日志
函数:
lr_log_message
lr_output_message
2.controller的使用
打开controller有两种方式:
1.在loadrunner中打开
打开后会弹出下面这个框:
manual?scenario :表示自定义场景
load generator :?压力产生器/施压机器
group name :?文件名
result dirrectory :目标文件夹
2.直接双击controller
选择脚本后ADD添加到右边的框即可。
下面的三个选项中Design表示设计场景,Run表示运行场景,第三个不考虑。
在场景的选择我们可以选择一组场景,也可以选择一个场景。
我们点击initialize,打开后显示如下图:
这个选项代表初始化的方式,在弹出的框中有3中选择,第一种是系统自动初始化,第二个是每隔多长时间初始化几个用户,第三个是在跑之前把每一个虚拟用户都进行初始化。
第二个start点开后同样弹出一个小窗:
第三个duration打开后也会显示一个小窗,如下图:
这个框选择run for表示让虚拟用户持续运行5分钟。
第四个stop?vusers打开后同样弹出一个小框:
第一个选项表示直接把所有的虚拟用户停止,第二个选项表示每间隔多长时间退出一个虚拟用户。
上图是进入运行场景后表格的含义。
3.Analysi的使用
在场景执行完毕后,可以进行分析,在
Controller
选择菜单结果
--
分析结果,会调用
Analysis
进行结果分析。
菜单图
--
添加新图,可以选择所有结果图。
事务摘要
显示了整个测试期间的事务摘要,包括每一个事务的
pass
,
fail
等。 对事务进行综合分析是性能分析的第一步,通过分析测试时间内用户事务的成功与失败情况,可以直接判断出系统是否运行正常。事务综合分析结束后,就可以更深入地分析用户事务的细节。
平均事务响应时间
“
平均事务响应时间
”
图显示在测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。此外,“
平均事务响应时间
”
图表还统计出测试场景运行时间内各个事务的最大值、最小值、平均值等信息。
通过分析平均响应时间,可以看出系统的性能走向,确定是否存在问题,如果存在问题,可以进行下一步的分析。
拐点出现后,交易将会出现排队等待,直接导致
ART
快速上升,此时服务器出现瓶颈,需要进一步分析。
每秒通过事务数分析图
(Transactions per Second)
“
每秒通过事务数
(TPS)”
图显示在场景运行的每一秒中,每个事务通过、失败以及停止的数量,是考查系统性能的一个重要参数。通过它可以确定系统在任何给定时刻的实际事务负载。通过分析单位时间内通过的事务数,可以直接看出系统的性能变化趋势。可以将“
每秒事务数
(TPS)”
图与平均事务响应时间图进行对比,以分析事务数目对执行时间的影响。
负载下的事务响应
“
负载下的事务响应
”
图是
“
正在运行的虚拟用户
”
图和
“
平均事务响应时间
”
图的组合,通过它可以看出在任一时间点事务响应时间与用户数目的关系,从而掌握系统在用户并发方面的性能数据,为扩展应用系统提供参考。此图可以查看虚拟用户负载对执行时间的总体影响,对分析具有渐变负载的测试场景比较有用。
事务响应时间(百分比)
“
事务响应时间(百分比)
”
图是根据测试结果进行分析而得到的综合分析图,也就是工具通过一些统计分析方法间接得到的图表。通过“
事务响应时间(百分比)
”
图可以分析在给定事务响应时间范围内能够执行的事务百分比。
点击率
/
吞吐率
点击率的下降说明服务器的响应时间在变慢,需要对应用系统进行进一步的分析。
吞吐率和点击率的图基本上会保持一致。
拐点预示着资源耗尽或出现瓶颈,此后
TPS
将不再上升。同样,当点击数、
TPS
不再增加时,也可能出现系统瓶颈。
网页诊断
主要用来评估页面内容是否影响事务响应时间,通过它可以深入地分析网站上那些下载很慢的图像或中断的链接等有问题的元素。
可以按下面四种方式来进行进一步的细分:下载时间细分、组件细分(随时间变化)、下载时间(随时间变化)、第一次缓冲时间(随时间变化)。通过这些细分图可以分析具体事务每个网页元素的运行情况。
DNS Resolution :
浏览器向
Web Server
发送请求,一般情况下,该请求首先发送到
DNS Server
把
DNS
名字解析 成
IP
地址。解析的过程的时间就是
DNS Resolution
。。这个度量时间可以确定
DNS
服务器或者
DNS
服务器的配置是否有问题。如果
DNS Server
运行情况比较好,该值会比较
小。
Connection
:解析出
Web Server
的
IP
地址后,请求被送到了
Web Server
,然后浏览器和
WebServer
之间需要建立一个初始化连接,建立该连接的过程就是
Connection
。这个度量时间可
以简单的判断网络情况,也可以判断
Web Server
是否能够响应这个请求。如果正常,该值会比较
小。
First buffer
:建立连接后,从
Web Server
发出第一个数据包,经过网络传输到客户端,浏览器成
功接受到第一字节的时间就是
First buffer
。这个度量时间不仅可以表示
Web Server
的延迟时间,
还可以表示出网络的反应时间。
Receive
:从浏览器接受到第一个字节起,直到成功收到最后一个字节,下载完成止,这段时间就
是
Receive
,这个度量时间可以判断网络的质量。
其他的时间还有
SSL Handshaking
(
SSL
握手协议)、
Client Time
(请求在客户端浏览器延迟的
时间)、
Error Time
(从发送了一个
HTTP
请求,到
Web Server
发送回一个
HTTP
错误信息所经过
的时间)、
Ftp Authentication
(显示验证客户端所用的时间。如果使用
ftp
,则服务器在 开始处
理客户端命令之前,必须验证该客户端。)
?内存使用率曲线
网络带宽曲线
##
性能测试报告的编写
性能测试报告一般会包括如下部分:
测试目标
测试概要描述
测试结果和数据
测试结论
测试目标:
指标要求:本次测试预期达到的性能要求。(
TPS,ART
,交易成功率,并发数等)
测试概要描述:
系统结构
测试时间
测试地点和测试人员
工具和环境
测试过程简介
测试结果和分析:
测试场景
测试结果
结果分析
测试结论:
遗留问题
缺陷列表
测试结论
建议
测试结果的限制