LoadRunner学习笔记
- 并发用户数量:
与服务器进行交互的在线用户数量
- 请求响应时间
从客户端发送请求到得到整个响应的时间
一般包括网络响应时间+server的响应时间
- 事务相应时间
完成这个事务所用的时间
是性能测试中重点关注的指标
- 吞吐率
单位时间在网络上传输的数据量(吞吐量:网络上传输的数据总量)
指从server返回客户端的
是衡量网络性能的主要指标
- TPS
每秒钟系统能够处理事务的数量
- 点击率
每秒发送的HTTP请求的数量
点击率越大对server的压力也就越大
- 资源利用率
对不同资源的使用程度,比如服务器的CPU、内存等
- LoadRunner目录分析(部分)
Analysis templates - 分析模板
Bin - 可执行程序,注意里面的CHM帮助文档
Bincerts - 安全证书
Classes - 可能用到的jar包
Dat - 配置,备份等信息
Ejbcomponent - ejb的相关jar包
Help - 帮助中心
Include - 头文件(可以编写自定义函数,保存成.h的头文件形式并放在这个目录,以后就只需要调用这个头文件就可以方便地使用了)
Sample – Java
Tutorial – 快速入门实例
Webtours – 实例网站
LoadRunner 界面分析
一、Virtual User Generator
- Virtual User Generator:
a) LaodRunner拥有多种Vuser类型,每一类型均适用于特定的负载测试环境。这样就能够使用Vuser精确模拟真实世界的情形。Vuser在方案中执行的操作是用Vuser脚本描述的
b) Vuser脚本的结构和内容因Vuser类型的不同而不同
c) 注意:VuGen仅能录制Windows平台上的会话,但录制的Vuser脚本既可以在Windows平台上运行也可以在Unix平台上运行
- 新建脚本的方式:
a) 新建单协议脚本:
创建单协议Vuser脚本,这是创建虚拟用户脚本对话框的默认选项,可以查看所有协议或按类别来查看对应的可用协议
b) 新建多协议脚本
创建多协议Vuser脚本,VuGen显示所有的可用协议,指定录制所需要的几组协议即可。
c) 使用最近使用过的协议新建脚本
列出最近用于新建Vuser的脚本协议
- 协议类型:
应用程序部署解决方案:Citrix ICA
客户端/服务器:
自定义:
分布式组件:
电子商务:
Enterprise Java Bean:
ERP/CRM:
传统:
邮件服务:
中间件:
流数据:
无线:
- Task模式: 给你一步一步的提示,只需按照提示一步一步执行即可
- Recording Option选项:
a) 录制方式选择
i. HTML录制方式
ii. URL录制方式:
b) 浏览器选择:
i. 一般默认选择IE
c) 代理设置:
d) Advanced标签页:
e) Correlation标签页:手动设置关联,通过关联可在测试执行过程中保存动态值。使用这些设置可以配置VuGen在录制过程中执行的自动关联的程度
- Run-Time Setting选项:
a) Run logic:设置Action部分迭代次数,Init、end都是只有1次,Run会有多次
b) Pacing:设置以怎样的一种方式开始下一次反复,即什么时候开始下一次重复
c) Log:是否启用日志、标准日志、扩展日志
d) Think time:关于脚本中Think Time的设置
e) Miscellaneous:配置其他运行时的设置,如错误处理方式、按进程or线程跑
f) Speed simulation:带宽,用来模拟网速
g) Browser emualation:浏览器仿真设置
h) Proxy:代理设置
二、Controller
- Controller:管理和维护方案,使您可以从一个单一的控制点简单有效地控制所有的Vuser
- 创建运行场景:
a) 创建手动的:
i. 通过创建并指定脚本、负载生成器和每个组中包括的Vusershutdown,可以生成手动方案。也可以通过“百分比模式”定义要在方案中使用的Vuser总数,并为每个脚本分配负载生成器和占总数一定百分比的Vuser
ii. 注意:
- 持续时间设置将覆盖Vuser迭代设置,也即,如果将持续时间设置为5min,那么Vuser将在5min内运行尽可能多的迭代,几时运行时设置仅指定进行一次迭代
- Vuser组设置不适用与百分比模式
b) 创建面向目标的
i. 在面向目标的方案中,可以定义希望实现的测试目标,LoadRunner将根据定义的目标自动创建一个方案
ii. 在一个面向目标的方案中,可以定义五种类型的目标:虚拟用户数、每秒点击次数(仅Web Vuser)、每秒事务数、每分钟页面数(仅Web Vuser)或方案的事务响应时间
iii. 使用“编辑方案目标”对话框可以对方案目标进行定义
iv. 注意:要定义每秒事务数或事务响应时间目标类型,脚本中必须包含事务。对于每种目标类型,您可以定义脚本中希望测试的事务
- 方案设置:可设置方案在达到目标后继续运行的时间长度,以及方案无法达到目标是是否继续。
a) 达到目标后再运行:设置方案在达到目标后继续运行的时间
b) 如果无法达到目标,下面2个选项选择一个:
i. 停止方案并保存结果:若无法达到您定义的目标,指示Controller停止方案并保存方案结果
ii. 继续运行方案,无需达到目标:指示Controller继续运行方案,及时无法达到设定的目标
- 运行方案:
a) 运行方案时,会为Vuser组分配负载生成器并执行他们的Vuser脚本。在方案执行期间,LoadRunner将:
i. 记录在Vuser脚本中定义的事务的持续时间
ii. 执行包括在Vuser脚本中的集合
iii. 收集Vuser生成的错误、警告和通知信息
b) 在方案运行时,您可以监视每个Vuser,查看有Vuser生成的错误、警告和通知信息以及停止Vuser组和各个Vuser。可以指示LoadRunner允许单个Vuser或组中的Vuser在停止前完成他们正在运行的迭代、在停止前完成他们正在运行的操作或立即停止运行
- Result setting:Result setting设置
a) 建议Result name命名方式:场景运行时间_脚本名称_虚拟用户数_场景持续时间
- 监视方案:
a) 可以使用LoadRunner联机运行时,事务、web资源、系统资源、网络延迟、防火墙服务器资源、web服务器资源、web应用程序服务器资源、数据库服务器资源、流媒体资源、ERP/CRM服务器资源、Java性能、应用程序部署和中间件性能监视器来监视方案执行
b) LoadRunner提供下列联机监视器:“运行时”监视器显示参与方案的Vuser的数目和状态,以及Vuser所生成的错误数量和类型。此外还提供用户定义的数据点图,其中显示Vuser脚本中的用户定义点的实时值
- 关于系统资源管理器:
a) 影响事务响应时间的一个主要因素是系统资源使用率
b) 使用LoadRunner资源监视器,可以在方案运行期间监视计算机上Windows、unix、snmp、antaraFlame Thrower和SiteScope资源,并可以确定特定计算机上为何出现瓶颈
三、Analysis
- Analysis基础知识
a) 创建会话:在运行方案时,数据将存储在结果文件中,扩展名为.lrr,Analysis将活动图的显示信息和布局设置存储在扩展名为.lra的文件中
b) 启动Analysis
LoadRunner选择“Analysis”程序,也可从Controller打开
c) 整理结果
方案执行后,这些结果会自动进行整理或合并,即将所有主机的结果传输到结果目录中,通过在Controller窗口中选择ResultsàAuto collate Results
- 了解Analysis报告
a) 运行方案后,您可以查看对系统性能进行汇总的报告。Analysis提供以下报告工具:
i. 摘要报告
ii. HTML报告
iii. 事务报告
b) 摘要报告提供有关方案运行的一般信息,您可以随时从Analysis窗口中查看摘要报告
c) 您可以指示Analysis创建HTML报告,Analysis将为每个打开的图创建HTML报告
d) 事务报告提供有关Vuser脚本中定义的事务的性能信息,这些报告为您提供 结果的统计信息细分,并允许你打印和导出数据
- Analysis分析基础(个人总结,非标准)
a) 查看Summary,主要是虚拟用户数和事务
b) 查看负载生成器和服务器的系统资源情况,如CPU、内存等,往往内存的泄露表现在CPU利用率过高
c) 查看虚拟用户和事务
d) 查看错误发生情况
e) 查看WEB资源和细分网页
- IP欺骗
a) 设置方法:
i. LoadRunner – tools – IP wizard
ii. 在Controller的scenario中启用IP欺骗(必须在连接到Load Generator前启用IP欺骗)
或
i. Tools – expert mode
ii. Tools – option – general
iii. 测试结束后要释放IP也是在LoadRunner – tools – IP wizard中操作
i. Tips:
- 必须是固定IP,不支持动态IP
- 重启计算机后可用ipconfig –all查看IP信息
- LoadRunner常用术语
a) 场景
在LR中主要表现为Controller中设计与执行测试用例中的用户场景,主要工作有,在Controller中选择虚拟用户脚本、设置虚拟用户数量、配置虚拟用户运行时的行为、选择负载发生器、设置执行时间等
b) 负载发生器
用来产生压力的真实机器,受Controller控制,可以使用户脚本在不同的主机上执行。在性能测试工作中,通常由一个Controller控制多个Load Generator以对被测系统进行加压
c) 虚拟用户
对应于现实中的真实用户,使用LR模拟的用户称为虚拟用户。其本质是通过虚拟用户脚本来模拟真实用户的行为
d) 虚拟用户脚本
通过Vuser Generator录制或开发的脚本,这些脚本用来模拟用户的行为
e) 事务
LR用事务来衡量服务器的性能,在业务上,事务通常是用户的一个或一系列操作,代表一定的功能,而在程序上则表现为一段代码区块,测试人员可以将一个或多个操作步骤定义为一个事务,以便衡量这部分的用户并发响应时间
f) 思考时间
为了在模拟是更加接近用户的真实行为而引进的概念,在实际中,用户进行一系列操作后往往会进行处理,如浏览网页内容,而处理过程对服务器是没有压力的,因此在虚拟用户脚本中用函数lr_think_time(double thinkTime)来模拟用户处理过程,执行该函数时用户线程会按照相应的time值进行等待
g) 集合点
对应于真实用户中的并发点,lr通过集合点实现了真实意义的并发,集合点在虚拟用户脚本中对应函数lr_rendezvous(constchar* rendezvous_name),当执行到该函数时会按照场景的并发策略来执行
h) 事务响应时间
事务响应时间是一个统计量,是评价系统性能的重要参数,定义好事务后,在场景执行过程中和测试结果分析中即可看到对应事务的响应时间。通过对关键或核心事务的执行情况进行分析,可以快速定位性能问题
- HP web tours分析
- 脚本录制原则
a) 重复考虑脚本的执行效率
b) 录制重要的用户业务
c) 选择你所需要的进行录制
d) 卢志强对参数进行正确的配置
- HTML和URL录制方式比较
a) HTML录制方式:可以为每个用户请求生成单独的函数
b) URL录制方式:可以捕获所有作为用户操作的结果发送到服务器的HTTP请求,然后一条条记录下来,他甚至可以捕获非HTML应用程序,比如小程序和非浏览器应用程序
c) HTML这种录制方式录制出来的脚本直观,易于理解和维护;而URL生成的脚本看起啦较长、较多
- 选择录制方式的原则
a) 给予浏览器的应用程序推荐使用HTML-based Script
b) 不是基于浏览器的应用程序推荐使用URL-Based Script
c) 如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,比如DataGrid的分页按钮等,也要使用URL-Based Script方式录制
d) 基于浏览器的应用程序中使用了HTTPS安全协议,使用RUL-Based方式录制
e) 对于初学者来说,如果HTML方式录制不成功可换成URL方式录制
- HTML Based Script设置介绍
a) 用来描述用户行为的脚本,直接创建的URL(web_url)、表单提交(web_submit_from)、链接(web_link)和图像(web_image)等函数
b) 进包含明确的URL脚本。这种脚本中,所有的链接、图像请求和URL操作都被录制为web_url函数,而表单提交则被录制为web_submit_data函数
- 自动关联
a) LR录制的脚本指示记录了所有从客户端发送到服务器端的数据,并在脚本回放时按照录制的顺序将录制下来的数据重新发送出去
b) 但是,实际上许多的系统都是采用SessionID或SeqID等方式来标识不同的任务和数据报,应用在每次运行时发送的数据并不完全相同
c) 所以,为了让脚本能够支持测试的需求,就必然要用某种机制对脚本录制的数据进行处理
d) 通过关联可以在测试中保持动态值
- 自动关联的目的
a) 简化或优化代码
如:若依次执行一系列相关查询,代码可能会变得很长;若为了减小代码的大小,可以嵌套查询,但这样会失去准确性,而且代码会变得复杂而难以理解。通过关联语句,不需要嵌套即可链接查询
b) 用于多态数据
许多应用程序和网站按当前日期和时间标识会话,若尝试重播脚本,该操作将会失败,因为当前时间与录制时间不同。通过关联数据可以保存动态数据,并且在整个方案运行过程中使用这些数据
c) 容纳唯一数据记录
某些应用程序(如数据库)要求使用唯一的值,在录制期间唯一的值在脚本重播时将不再唯一。例如,假设录制了一个打开一个新的银行账户的过程,每个新账户都分配了用户未知的唯一编号,录制期间,此账号将插入聚友唯一关键字约束的表中,如果尝试按所录制的那样运行脚本,该操作将尝试按所录制的那样运行,该操作将尝试用录制的编号而不是新的唯一编号创建账户。结果将产生错误,因为该账户已经存在,如果在运行脚本时遇到了错误,请在发生错误的位置检查该脚本。大多数情况下,通过关联查询功能可以解决该问题,关联查询将一个语句的结果用作另一个语句的输入
- 一般的关联步骤
a) 从服务器返回的数据中选取需要进行关联的数据
b) 将该数据存入脚本的一个参数中
c) 将脚本中需要使用该数据的地方用参数替换
d) Tips:对于web来说,一般会用一个hidden的field存放