专业的性能测试工具,通过模拟成千上万的用户对被测应用进行操作和请求,在实验环境中精确重现生产环境中任意可能出现的业务压力,然后通过在测试中获取的信息和数据和数据来确认和查找软件的性能问题,分析性能瓶颈。Loadrunner中的:响应时间:呈现时间;Hps:每秒点击数;Pps:每秒页面数;Ppm:每分钟页面请求数
【loadrunner工作原理】
Loadrunner启动后,在任务栏会有一个loadrunner agent process的进程,用于监视各种协议的客户端和服务器的通信,只要能够支持的协议,loadrunner在录制过程中就可以根据脚本语言将通信过程录制下来,所以,只有明确了被测软件通信过程中所使用的协议,loadrunner才能够正确录制脚本。
【loadrunner组成】
虚拟用户发生器Vuser Genertor、压力调度和监控中心Controller、压力结果分析器Analysis、压力产生器load Genertor(负载发生器:加载虚拟用户,利用自身的系统资源模拟用户对被测服务器发起请求,完成加压)
负载发生器会占用很大的系统资源,从而影响其他模块的正常运行,可以在安装的时候单装loadGenerotor,然后进行调用。理论级别上一个controller可以调用的负载发生器是没有上限的,而且每个负载发生器在理论上可以模拟的虚拟用户的数量也是没有上线得,除非被自己的CPU资源限制。
【三大模块】
VirtualUserGenerator------录制脚本
LoadrunnerController------创建运行和监控场景
LoadrunnerAnalysis-----分析测试结果
【测试流程】
Loadrunner中场景的设计优先脚本的录制
指定测试计划->创建测试脚本(录制脚本)->创建场景->运行场景->监控测试场景->分析测试结果
(1)指定压力/负载测试计划
分析被测系统:预测有多少用户会连系统、客户机的配置情况(内存、CPU、操作系统、软件工具);服务器使用什么类型的数据库以及服务器的配置情况、客户机与服务机之间的通讯情况、还有什么组件会影响响应时间的指标、通讯装置(网卡、路由器)的吞吐量,每个通讯装置能够处理多少并发用户
(2)确定测试目标
系统完成某个事务发生的时间,明确何种配置能够使系统性能最优,系统能够无差错的运行的最大的时间。
系统不可能所有功能都需要性能测试,那么什么情况的功能需要性能测试:所有用户都会经常使用的功能点;大多数用户都会经常使用的功能点;虽然不被经常使用,但一旦出现问题就会严重影响系统表现的功能点;
(3)使用VUG创建脚本
要创建一个自动测试,首先要创建自动测试脚本,测试脚本的录制和维护是负载测试的重要步骤之一,成千上万的虚拟用户正是通过执行测试脚本来对系统施压的。使用loadrunner的VUG引擎,见识并记录客户端和服务器之间的通话,让虚拟用户模拟实际的业务流程,记录真正用户的操作行为,并将其转化为特定的测试脚本的语言合集。VUG这个地方创建脚本录制的并不是操作,而是底层通信协议的通信情况。
(4)使用controller创建测试场景
创建场景的目的是为了实现真的负载,也就是让一台或者多台机器模拟多个用户,同时执行脚本,对被测应用进行操作或者发起请求
每个loadrunner的场景都相当于一套负载测试方案,因为它包括了反映业务操作流程的测试脚本,反应系统承受能力的虚拟用户数量,用于平衡测试机自身压力的load Generator机器以及脚本之间的执行顺序等,执行场景的过程就是对系统施雅德过程。
(5)实时监控场景
Loadrunner继承了实时的监控器,在场景的执行过程中,用户可以根据需要选择一个或多个监视窗口对关心的数据进行动态监控,可监控的信息包括系统资源、网络设备、web服务器和数据苦等交易数据
Loadrunner还提供了contentcheck TM工具帮助用户从中端角度观察程序性能情况,判断负载下的应用程序的功能是否正常
(6)分析测试结果
Loadrunner提供了分析报告工具—MercuryLoadRunnerAnalysis,能够打开这些数据,帮助用户查找性能问题并追溯原由。
【loadrunner三个主要模块】
- Create/ExditScript:进入virtualGenerator模块,用于创建和编辑负载测试脚本
- RunLoadTest:进入loadrunnerController模块,用于创建、运行和监视场景
- Analyze loadTests:进入loadrunnerAnalysis模块,用于分析测试结果
【loadrunner脚本开发过程】
- 使用loadrunner的VUG录制基本的测试脚本
- 根据需求编写测试脚本,是定制执行脚本的参数,增强脚本的功能
- 在单机模式下试运行脚本,看能否通过,如有问题及时调整
Loadrunner实际上是对脚本的操作,创建一个新的脚本会牵扯到选择协议的部分
New single Protocol Script 建立一个单协议Vuser脚本
New Multiple Protocol Script创建选择多个协议的VUser脚本
New ScriptRecent Protocol创建一个最近脚本用到的脚本
【使用LoadRunner中央控制器controller】来调度、创建测试场景
创建场景,选择相应的测试脚本;设置机器运行的虚拟用户数;设置脚本执行计划和用户加载方式(如何进行初始化以及加压的方式);根据需要设置场景的集合点、IP欺骗和运行参数的情况;运行并监视场景
(1)选择场景会有两种设置场景的方式:
ManualScenario:完全手动的设置场景
ManualScenrio with percentage mode:属于manualScenario的一种,采用百分比的形式分配需要加载的虚拟用户数。
Goal-OrientedScenrio:由测试人员设定要达到的性能目标,loadrunner根据目标自动设定虚拟用户的加载策略
(2)Loadrunner场景有三个设置很重要:加压、持续时间、解压
(3)设定场景参数
Scenario Groups设定:组名称、要执行的脚本、虚拟用户数、机器名称
ScenarioSchedule设定可以设置场景的开始时间和持续时间,以及虚拟用户加载的条件等,两种schedule目标:基于场景设定(对场景中的组进行设定)、基于组(对每个组进行单独设定)的设定。还有设定场景的执行结果。
【分析测试结果】
使用Analysis分析测试结果
【分析测试报告】
【性能测试计划的制定】
分析应用程序->定义测试目标->设计执行过程
1.分析应用程序
(1)确定系统组成
(2)描述系统配置:连接到系统的用户数、客户机的配置情况、服务器数据库类型及配置情况、通讯装置的吞吐量和处理用户的并发、分析其他影响性能的组件
(3)描述系统功能:划分系统的功能模块、分析系统的用户角色、确定模块的测试优先级、预测负载高峰
2.确定测试目标
(1)获得操作响应时间
(2)检查系统可靠性
(3)检查软硬件更新对系统的影响
(4)确定系统性能瓶颈
5.确定测试环境
(1)测试环境
(2)被测系统环境:硬件配置、软件配置
局域网一般是广播。互联网有三种:B节点(先广播再路由)传输,P节点(先路由再广播)传输,M节点(BP混合)传输
6.测试流程设计
软件安装与配置->定义关键流程与事物->定义任务分配->测试数据准备->测试工具配置->脚本录制和调试->场景方案设计和调试->测试执行->测试结果的收集与分析->给出测试结论
【事务】
- 有时候除了要衡量整个脚本的性能外,还想取到脚本中某一段或者几段操作的性能,一边详细的知道具体使用户那些动作对系统性能影响比较大,loadrunner采用在脚本中定义事务这一方式来达到要求
- 事务就是在脚本中定义的某段操作,更确切地说就是一段脚本语句
- 定义事务时,首先在脚本中找到事物的开始和结束的位置,然后分别插入一个事务的其实标志,这样,当脚本运行时,loadrunner会自动在事务的起点开始计时,脚本运行到事物结束的点计时结束,系统会自动记录这段操作的运行时间等性能数据,在脚本运行完毕之后,系统会在结果信息中单独反映每个事务的运行结果。
【插入集合点】
- 一般的并发过程仅仅体现在开始执行的一刹那,随着服务器对请求时间的不一致或系统条件的限制,用户的执行速度可能会不一致,在运行过程能够集合到一点的可能性很小,这并不是真正意义上得并发
- 系统压力最大的情况是:所有的用户都集合到系统瓶颈的某个点上进行操作,从脚本的角度讲:这个点就是执行脚本的某一条或者一段语句,为了真实模拟这种情况,loadrunner提供集合点的功能,实现真正意义上的并发
- 集合点一般和事务一起出现,放在事务的前面Insert|Rendezvous,集合点只有开始没有结束。集合点只能插入到脚本的Action部分。
- 集合点的释放策略:按照所有虚拟用户的百分比进行释放;按照所有正在运行的虚拟用户(会变化)百分比进行释放;按照当多少个虚拟用户到达集合点的时候释放。还有可以按照超时时间进行释放(从第一个虚拟用户到达集合点开始计时超时就释放集合,晚来的虚拟用户也得按照超时时间进行等待),集合点释放策略也可已屏蔽,不参与集合。
【脚本参数化】
- 针对脚本中的某些常量,定义一个或多个包含数据源的参数来取代,让场景中不同的虚拟用户在执行相应脚本的时候分别使用参数数据源中的不同数据替代这些常量,从而达到模拟多用户真是使用系统的目的。
- 参数化过程:确定需要参数化的常量à准备数据->对脚本进行参数化
【插入检查点】
(1)检查点的功能验证某个界面上是否存在指定的TEXT或者image等对象
在使用Loadrunner测试web应用时可以检查压力较大是Web服务器能否返回正常的页面
(2)检查点插入过程:定位要插入检查点的页面à插入文字检查点à设定与检查点有关的选项Vuser|run-time setting|preferenceà查看检查点是否通过
【Run-time setting】
1. Vuser|run-time Setting,可以设定Virtual User Genenrator中和脚本相关的一些运行参数
IterationCount(重复次数)
入口:general|runlogin
参数说明: 设定每个action的重复执行次数
* Duration参数优先于interation
2. Thinking-time
入口:General|Thinktime
参数说明:设定脚本回放是对思考时间的处理
Ignore think time:脚本回放是不执行thinktime()函数
* 回放考虑加入思考时间的策略:按照录制的思考时间进行回放;按照录制的整数倍进行回放;按照一个随机得百分比值(是设置一个百分比范围)进行回放。还有一种设置限定时间,当回放低于设置时间指标按照脚本走,高于设置时间按照设置的指标时间进行回放。
3. Error Handling
入口:General|Miscellaneous
参数说明:设定遇到错误时的处理方式
Continue on error 遇到错误时继续运行
Fail opentransaction on lr_error_message()执行事务中调用lr_error_message()函数时将事务的结果值为Failed
General snapshot on error对错误进行快照
4. Multithreading
入口:General|Miscellaneous
参数说明:设定脚本是以多线程方式运行还是多进程方式运行
Run Vuser as a process以多进程方式进行(保障虚拟用户的有效执行,但十分消耗负载发生器计算机的系统资源)
Run vuser as a thread 以多线程方式进行(负载发生器资源损耗较低,对虚拟用户的加载执行无法做到统一的统筹安排,尤其当虚拟用户数较多时)