利用LoadRunner进行 性能测试
提纲 LoadRunner简介 脚本的录制与开发 场景的创建与执行 性能测试结果分析 性能测试流程与项目分析 总结性能测试
LoadRunner 简介 1 LoadRunner是什么 LoadRunner,是一种预测系统行为和性能的负载测试工具。通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试。通过使用 LoadRunner,企业能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。 LoadRunner是一种适用于各种体系架构的自动负载测试工具,它能预测系统行为并优化系统性能。 2 LoadRunner特点 (1) 广泛支持业界标准协议 (2) 支持多平台开发的脚本 (3) 创建真实的系统负载 (4) 强大的实时监控与数据采集功能 (5) 精确分析结果,定位问题所在
LoadRunner 安装 LoadRunner 分为Windows 版本和UNIX版本。这里我们只讲解安装Windows版本。 安装配置要求: 选项 最低要求配置 CPU 主频最低 1GHz 操作系统 Windows XP及以上 RAM 最低2GB 分辨率 最低1024 X 768 浏览器 IE 6.0或以上 磁盘空间
安装的前提条件 在安装LoadRunner 11之前,需要安装一些前置软件,列表如下: Framework 3.5 SP1 Microsoft Data Access Components (MDAC) 2.8 SP1 (or later) Microsoft Windows Installer 3.1 Microsoft Core XML Service (MSXML) 6.0 Microsoft Visual C ++ 2005 SP1 Redistributable Package (x86) Microsoft Visual C ++ 2008 Redistributable Package (x86) Web Services Enhancements (WSE) 2.0 SP3 for Microsoft .NET Redistributable Runtime MSI WSE 3.0 for Microsoft .NET Redistributable Runtime MSI Strawberry Perl 5.10.1 安装程序会自动监测系统是否已经安装了这些软件,如果没有会提示用户逐一安装。
LoadRunner 安装过程 LoadRuner的安装过程比较简单,这里仅做简要说明。 开始安装LoadRunner 时,要以 Administrator 的身份登录 Windows 后 运行 LoadRunner 安装目录的下的Setup.exe 接下来选择 “LoadRunner Full Setup”, 即完全安装,首先会提示需要安装的程序组件,如上表所示 选择好安装目录即可完成安装。 安装完毕,第一次启动时系统会提示用户有10天的产品使用期。 www.themegallery.com Company Logo
LoadRunner 破解 安装好LoadRunner后: 退出程序,把下载文件中的lm70.dll和mlr5lprg.dll覆盖掉..\HP\LoadRunner\bin下的这两个文件 注意,win7的话一定要以管理员身份运行启动程序,启动后,点击 configuration->loadrunner license,此时可能会有两个许可证信息存在,退出程序,点击deletelicense.exe文件,来删除刚才得许可证信息(即时原来没有lisense最好也运行一下) 再次打开程序, configuration->loadrunner license->new license,在弹出的输入框中输入license序列号AEABEXFR-YTIEKEKJJMFKEKEKWBRAUNQJU-KBYGB,点击确定,验证通过后,则破解成功! www.themegallery.com Company Logo
由“协议”想到的。。。 协议分类表
3 LoadRunner工具组成 LoadRunner主要由以下几个部分组成: 脚本生成器VuGen 压力调度和监控系统Controller 结果分析工具Analysis
Load Generator-负载生成器(运行脚本的负载引擎) LoadRunner 中央控制器 虚拟用户 脚本 Database server Web Server 2 Load Generator 2 Load Generator 1 Load balancer App server Web Server 1
4 LoadRunner实现原理 用户行为模拟 性能指标监控 性能调优 (1)不同用户使用不同的数据(通过“参数化”实现) (2) 多用户并发操作(通过“集合点”实现) (3) 用户请求间的依赖关系(通过“关联”实现) (4) 请求间的延时时间(通过“思考时间”实现) 性能指标监控 (1) 请求响应时间监控(通过“事务”实现) (2) 服务器处理能力监控(通过“事务”计算吞吐量获得) (3) 服务器资源利用率监控(计数器接口) 性能调优 通过指标的监控发现系统存在的性能缺陷,利用分析工具定位并修正性能问题.
5 LoadRunner测试步骤 LoadRunner工作流程 性能测试流程
二、脚本的录制与开发 1 启动Visual User Generator 选择 Start > Programs > LoadRunner > Virtual User Generator 来开始vugen,打开vugen主窗口。 每一个脚本都包括三部分:vuser_init,Actions 和vuser_end。通常把登录部分放到 vuser_init 中,登录后的操作部分放到 Action 中,注销关闭部分放到 vuser_end 中。当需要重复运行脚本的时候,仅仅脚本的action部分被重复,而 vuser_init 和vuser_end部分是不重复执行的。
3 对于Web 应用,选择Web(HTTP/HTML)协议。 2 新建测试脚本,选择系统通讯的协议。 Loadrunner提供单协议(single protocol)和多协议(multiple protocol)两种模式。在录制脚本时,不同的协议打开的参数对话框也不同。 3 对于Web 应用,选择Web(HTTP/HTML)协议。 在URL Address中输入要需要测试的网址。在Record into Action中选择要把录制的脚本放到哪一个部分 。
4 录制工具条介绍 录制过程中,在屏幕上会出现有一个工具条。 录制完成后,按下“结束录制”按钮,VuGen 自动生成用户脚本,完成录制过程。
5 查看脚本——两种方式:脚本视图和树视图 脚本视图:是一种基于文本的视图。 VuGen 将在编辑器中显示带有彩色编码的函数及其变量值的脚本。 树视图:是基于图标的视图。 对于录制期间所执行的每一步骤, VuGen 都在测试树中生成一个图标和一个标题,并附带相应的录制快照。
6、完善优化测试脚本 a 插入事务(Transaction ) 事务是衡量服务器特定业务流程的性能。在运行测试脚本时,LoadRunner 运行到该事务的开始点时,就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间会在结果中显示。 注意:(1)事务是成对出现的; (2)两种添加方式:录制过程中、录制结束后的脚本中。 例:lr_start_transaction("登录"); ...... lr_end_transaction("登录",LR_AUTO);
b 参数化 作用:1)在脚本中用参数取代常量值; 2)设置参数的属性以及数据源。
参数化方法 数据分配方法 更新方法 顺序(Sequential) 随机 (random) 唯一 (unique) 每次迭代(each iteration) 对于每次迭代Vuser会从数据表中提取下一个值。 对于每次迭代,Vuser会从数据表中提取新的随机值。 对于每次迭代,Vuser会从数据表中提取下一个唯一值。 每次出现(each occurrence) 参数每次出现时,Vuser将从数据表中提取下一个值,即使在同一次迭代中。 参数每次出现时,Vuser将从数据表中提取新的随机值,即使在同一迭代中。 参数每次出现时,Vuser将从数据表中提取新的唯一值,即使在同一迭代中。 一次(once) 对于每一个Vuser,第一次迭代中分配的值将用于所有的后续迭代 第一次迭代中分配的随机值将用于该Vuser的所有迭代 第一次迭代中分配的唯一值将用于该Vuser的所有后续迭代
示例 假设表/文件包括以下所示的值: 悟空;八戒;三藏;刘备;孙权;曹操;武松;林冲;燕青 如果选择使用“顺序”方法分配数据,则: 如果选择在“每次迭代”进行更新,则所有 Vuser 就会在第一次迭代使用 悟空,第二次迭代使用 八戒,第三次迭代使用 三藏,等等。 如果选择在“每次出现”进行更新,则所有 Vuser 就会在第一次出现时使用 悟空,第二次出现使用 八戒,第三次出现使用 三藏,等等。 如果选择更新“一次”,则所有 Vuser 就会在所有的迭代中使用 悟空。 如果数据表中没有足够的值,则 VuGen 返回到表中的第一个值,循环继续直到测试结束。
如果选择使用“随机”方法分配数据,则: 如果选择在“每次迭代”进行更新,则 Vuser 在每次迭代时使用表中的随机值。 如果选择在“每次出现”进行更新,则 Vuser 就会在参数每次出现时使用随机值。 如果选择更新“一次”,则所有Vuser 就会在所有的迭代中使用第一次随机分配的值。
如果选择使用“唯一”方法分配数据,则: 如果选择在“每次迭代”进行更新,则对于一个有 3 次迭代的测试运行,第一个 Vuser 将在第一次迭代时提取 悟空,第二次迭代提取 八戒,第三次迭代提取 三藏。第二个 Vuser 提取 刘备、孙权 和 曹操。第三个 Vuser 提取 武松、林冲 和 燕青。 如果选择在“每次出现”进行更新,则 Vuser 就会在参数每次出现时使用列表的唯一值。 如果选择更新“一次” ,则第一个 Vuser 就会在所有迭代时都提取 悟空,第二个 Vuser 就会在所有迭代时提取 八戒,等等。
c 集合点: 集合点是为了衡量在加重负载的情况下服务器的性能情况。在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LoadRunner 中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner 就会检查同时有多少用户运行到集合点,如果不到1000 人,LoadRunner 就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000 人时,LoadRunner 命令1000 人同时去提交数据,从而达到测试计划中的需求。 注意:集合点经常和事务结合起来使用。集合点只能插入到Action 部分,vuser_init和vuser_end 中不能插入集合点。 插入集合点方法:1)在需要插入集合点的前面,选择菜单Insert->Rendezvous。 2)在弹出的Rendzvous对话框中,输入要插入的集合点的名称,点击OK后,集合点插入完毕。集合点在脚本中的代码:lr_rendezvous(“名称”)
如果在脚本中设置了集合点,还需要在Controller 中设置集合点策略,从菜单中调出集合点策略设置窗口,根据需求设置集合点策略。
d 检查点 在进行压力测试时,为了检查Web 服务器返回的网页是否正确,VuGen 允许我们插入Text/Imag 检查点,这些检查点验证网页上是否存在指定的Text 或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。以下是插入检查点的步骤及检查点在脚本中的函数表示。
关联 概念:所谓关联(correlation)就是把脚本中某些写死的(hard-coded)资料,转变成是来自服务器的、动态的、每次都不一样的资料。 原理:服务器在每个浏览器第一次跟它要资料时,都会在资料中夹带一个唯一的辨识码,接下来就会利用这个辨识码来辨识跟它要资料的是不是同一个浏览器。一般称这个辨识码为Session ID。对于每个新的交易,服务器都会产生新的Session ID给浏览器。这也就是为什么执行脚本会失败的原因,因为VuGen还是用旧的Session ID向服务器要资料,服务器会发现这个Session ID是失效的或是它根本不认识这个Session ID,当然就不会传送正确的网页资料给VuGen了。 要对付这种服务器,我们必须想办法找出这个Session ID到底是什么、位于何处,然后把它记录下来,放到某个参数中,并且取代掉脚本中有用到Session ID的部份,这样就可以成功骗过服务器,正确地完成整个交易了。
哪些错误代表着我应该做关联? (1)错误讯息有可能会提醒要重新登入; (2)有可能直接就显示HTTP 404的错误讯息。 总而言之: 当脚本中的数据每次回放都发生变化时,并且这个动态数据在后面的请求中需要发送给服务器,那么这个内容就需要通过关联来询问服务器,获得该数据的变化结果。 关联函数 (1)web_reg_save_param web_reg_save_param("ParamName","LB=", "RB=", "Ord=1", "Search=ALL", LAST); 通过左右边界的限定,将关联出来的内容放在一个参数中,当关联对象寻找范围与寻找结果通过函数值体现出来。 (2)web_save_param_length web_save_param_length("suname",LAST) 将创建一个名为 suname_Length的参数,函数执行完成后将参数sunname的长度值保存到sunname_Length中。
手动关联 (1)使用相近的业务流程与资料,录制二份脚本 (2)使用WinDiff工具帮助找出需要关联的资料 (3)使用web_reg_save_param函数手动建立关联 (4)将脚本中有用到关联的资料,以新数替代 自动关联 方案一.Rules Correlation (1)内建(Built-in Correlation):在【Recording Options】>【Internet Protocol】>【Correlation】中启用关联规则,则当录制这些应用系统的脚本时,VuGen会在脚本中自动建立关联。 (2)使用者自订(User-defined Rules Correlation):在【Recording Options】>【Internet Protocol】>【Correlation】建立新的关联规则。 方案二.Correlation Studio 在执行脚本后才会建立关联,也就是说当录制完脚本后,脚本至少须被执行过一次,Correlation Studio才会作用。
三、场景的创建与执行 设计场景流程
1 启动场景 Loadrunner的场景能够描述在测试活动中发生的各种事件。一个场景包括一个运行虚拟用户活动的Load Generator 机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。 点击开始-> LoadRunner-> Controller来启动Controller程序。在VuGen下,也可点击Tools下的菜单,即可启动Controller,并将当前脚本加入到场景中。
第一次打开Controller工具时会弹出下面窗体在Select Scenario Type中,有两个选项: 2、引入脚本选择脚本文件 第一次打开Controller工具时会弹出下面窗体在Select Scenario Type中,有两个选项: (1)Manual Scenario:指手动的设置测试的环境参数; (2)Goal-Oriented Scenario:指选择预先设置的环境参数 通常选择Manual Scenario,手动进行测试场景设置。 在Available Scripts中选择脚本名称,然后点击Add,即可,这里我们可以同时引入若干个脚本,让不同的用户执行不同的脚本。
3、设计测试场景 场景计划: 设置负载行为,确定将负载应用于应用程序的速率、负载测试持续时间以及如何停止负载。 场景组:配置 Vuser 组。定义典型用户运行的操作、运行的 Vuser数及 Vuser 运行时所用的计算机。 SLA: Service-Level Agreement,服务等级协议,运行场景时, LoadRunner 收集并存储与性能相关的数据。分析运行情况时, Analysis 将这些数据与 SLA 进行比较,并为预先定义的测量指标确定SLA 状态。
4 目标场景的场景设置
5 手动场景的场景设置
7 IP虚拟(IP欺骗) 当运行场景时,虚拟用户使用它们所在的 Load Generator(负载生成器) 的固定的 IP 地址。同时每个Load Generator 上运行大量的虚拟用户, 这样就造成了大量的用户使用同一 IP 同时访问一个网站的情况,这种情况和实际运行的情况不符,并且有一些网站会根据用户 IP 来分配资源,这些网站会限制同一个 IP 的登陆,使用等等。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的 IP 访问统一网站,这种技术称为“IP 欺骗”。 注意:IP Spoofer 在连接Load Generators 之前启用。要使用IP 欺骗,各个Load Generator 机器必须使用固定的IP,不能使用动态IP。即:运行IP Wizard 程序的机器必须使用固定的IP,不能使用动态IP。
8 系统监控
四、性能测试结果分析 从开始->LoadRunner-> Analysis来启动Analysis程序,或在Controller中Results菜单中选择Analysis Results,自动调出Analysis分析结果。Loadrunner提供多种性能参数的分析结果,如: Summary Report——分析概要报告 Running Vusers——运行户数 Hits per Second——每秒钟的点击次数 Throughput——吞吐量 Transaction Summary——事务分析 Average Transaction Response Time——平均事务响应时间 Web Page Breakdown——Web页面详细分析(需要添加)
简要报告
网页细分图
合并图
自动关联图
六、总结性能测试 1、关于分析问题与解决问题 LoadRunner的学习与使用重要,更重要的是对实际项目的需求分析与实际情况中一些比较复杂关系的整理,需要明白数据的来龙去脉,需要清晰整理出解决问题的流程与方案。 在遇到问题的时候不能回避,通过查阅与咨询,不断地实践对比结果, 每一个问题到最后都不是问题。 性能测试难点不在Loadrunner工具本身,难在技术攻关以及对系统的全局把握。
2、关于脚本录制与完善 (1)根据实际情况,需要在录制脚本过程中将登录、操作、退出录制在同一个Action中; (2)在录制过程中加入各种事务,在完善脚本的过程中,考虑参数化、关联等,删除不必要的脚本; (3)登录、提问和回答三个脚本,明确每一个脚本的作用; (4)脚本的成功与否在于不出错的前提下,是否能够按照预期的结果在数据库中插入合理的数据; (5)每一次脚本的修改在对应场景中需要进行刷新; (6)尽量在每一个脚本中加入状态输出代码,以便在场景运行中可以查看用户的状态变化。
3、关于预期结果与实际场景设置 (1)预期结果与正确的场景设计离不开,所谓场景设计指的就是LoadRunner进行性能测试的测试用例,由具体的完善用例得到脚本,能够更准确的得到预期结果; (2)在脚本中设置参数与迭代后,并不代表在场景中能够运行成功,需要了解场景中各个设置的具体意思与脚本中参数设置、Run Time Setting设置三者之间的关系。 4、关于性能测试结果分析 (1)生成分析结果之后,对有关系的项要进行合并图,能更清晰地看到各个指标变化之间的关系; (2)网页细分图需要在生成结果后另行设置后生成; (3)合理使用Auto Correlate。
Thanks for your time!