Loadrunner性能测试基础教材.docx

上传人:b****6 文档编号:8188466 上传时间:2023-01-29 格式:DOCX 页数:29 大小:612.84KB
下载 相关 举报
Loadrunner性能测试基础教材.docx_第1页
第1页 / 共29页
Loadrunner性能测试基础教材.docx_第2页
第2页 / 共29页
Loadrunner性能测试基础教材.docx_第3页
第3页 / 共29页
Loadrunner性能测试基础教材.docx_第4页
第4页 / 共29页
Loadrunner性能测试基础教材.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

Loadrunner性能测试基础教材.docx

《Loadrunner性能测试基础教材.docx》由会员分享,可在线阅读,更多相关《Loadrunner性能测试基础教材.docx(29页珍藏版)》请在冰豆网上搜索。

Loadrunner性能测试基础教材.docx

Loadrunner性能测试基础教材

LoadRunner性能测试基础篇

课程主要学习内容

Ø性能测试基础;

ØLoadRunner主要工具介绍;

Ø以Web类型的性能测试为例讲解从性能测试需求、脚本开发、场景创建、场景运行到结果分析的一个完整的性能测试过程。

1性能测试基础

1.1理解性能测试

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

1)负载和压力的区别负载测试和压力测试都属于性能测试,两者可以结合进行。

A.负载测试是为了确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况,检验系统在各种给定负载下是否能达到预期性能指标。

B.压力测试是通过不断向被测系统施加“压力”,测试系统在压力情况下的性能表现,确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。

2)性能记录的数据性能测试过程中,根据性能测试的不同类型和不同目标,记录的数据也不同。

A.对于一个以调优为目的的性能测试,可能需要重点关注测试过程中各可能的性能制约点(例如磁盘IO、网络拥塞状况、服务器内存使用情况、数据库使用情况等),通过对参数调整后的系统进行反复测试来找到制约性能的因素;

B.一个以验证为目的的性能测试可能会重点关注是否能达到性能指标要求,重点集中在用户体验上。

3)性能测试的工具性能测试由于需要模拟并发等操作,需要工具的支持才能进行较好的性能测试。

如LoadRunner、开源测试工具或是自己开发的工具。

1.2性能测试的目的

目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。

1)评估系统的能力:

测试中得到的负荷和响应时间数据可以被用于验证系统实际运行中的能力,并帮助作出决策。

2)识别体系中的弱点:

受控的负荷可以被增加到一个极端的水平,并突破它,从而修复体系的瓶颈或薄弱的地方。

3)系统调优:

重复运行测试,验证调整系统后得到了预期的结果,从而改进性能。

4)检测软件中的问题:

长时间的测试执行可导致程序发生由于内存泄露引起的失败,揭示程序中的隐含的问题或冲突。

5)验证稳定性(resilience)可靠性(reliability):

在一个生产负荷下执行测试一定时间,评估系统稳定性和可靠性是否满足要求。

2LoadRunner概要介绍

LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。

LoadRunner主要特性:

1)LoadRunner可以通过模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。

通过使用LoadRunner,企业无需购置额外硬件节省成本,并且能最大限度地缩短测试时间,优化性能和加速应用系统的发布周期。

2)LoadRunner适用于各种体系架构的企业系统,通过模拟实际用户的操作行为和实时性能监测,来帮助更快的查找和发现问题。

LoadRunner能支持广范的协议和技术,为特殊环境提供特殊的解决方案。

LoadRunner的主要组件包括三大块:

VirtualUserGenerator、Controller、Analysis。

2.1VirtualUserGenerator(VuGen)

创建性能测试脚本,模拟真实用户的操作。

VuGen主要功能:

1)支持多协议的应用程序,比如Web、Socket、Tuxedo、Ejb等等。

2)VuGen引擎能够生成虚拟用户,以虚拟用户的方式模拟真实用户的业务操作行为。

可以在VuGen里面录制、编写功能脚本模拟真实操作。

VuGen创建系统负载的步骤:

1)使用录制方式生成脚本时,它先记录下业务流程,然后将其转化为测试脚本。

2)利用虚拟用户,我们可以在Windows,UNIX或Linux机器上同时产生成千上万个用户访问。

介绍VuGen参数功能:

用VirtualUserGenerator建立测试脚本后,可以对其进行参数化操作,这一操作能让我们利用几套不同的实际发生数据来测试应用程序,从而反映出本系统的负载能力。

以一个订单输入过程为例,参数化操作可将记录中的固定数据,如订单号和客户名称,由可变值来代替。

在这些变量内随意输入可能的订单号和客户名,来匹配多个实际用户的操作行为。

参数化里面的DataWizard功能:

图2-1

LoadRunner通过DataWizard来实现从数据库中直接获取测试数据作为参数。

DataWizard直接连于数据库服务器,从中可以获取所需的数据(如定单号和用户名)并直接将其输入到测试脚本。

这样避免了人工处理数据,节省了时间。

例图:

图2-2

2.2Controller

创建性能场景,设置负载方案。

对于同一个场景可以重复测试,调整程序、服务器、网络等可能影响性能的参数后,重复的测试来判定调整的有效性。

虚拟用户测试脚本建立后,接下来设定负载方案,业务流程组合和虚拟用户数量。

用LoadRunner的Controller,可以很快组织起多用户的测试方案。

Controller功能简述:

1)可以利用Controller的日程计划服务来定义用户在什么时候访问系统以产生负载,实现性能测试过程自动化。

图2-3日程计划设定界面

2)可以用Controller来限定负载方案,在这个方案中所有的用户同时执行一个动作---如登陆到一个库存应用程序----来模拟并发的情况(集合点)。

3)监测系统架构中各个组件的性能----包括服务器,数据库,网络设备等----来帮助客户决定系统的配置。

4)Controller的目标模式提供更多的测试灵活性。

根据目前的用户人数事先设定测试目标,优化测试流程。

例如,目标可以是确定的应用系统承受的每秒点击数或每秒的交易量。

2.3Analysis

分析性能数据,找出影响性能的原因。

一旦测试完毕后,LoadRunner收集汇总所有的测试数据,并为您提供高级的分析和报告工具,以便迅速查找到性能问题并追溯原由。

Web交易细节监测器的功能:

1)使用LoadRunner的Web交易细节监测器,可以了解到将所有的图象、框架和文本下载到每一网页上所需的时间。

例如,这个交易细节分析机制能够分析是否因为一个大尺寸的图形文件或是第三方的数据组件造成应用系统运行速度减慢。

2)Web交易细节监测器分解用于客户端、网络和服务器上端到端的反应时间,便于确认问题,定位查找真正出错的组件。

例如,您可以将网络延时进行分解,以判断DNS解析时间,连接服务器或SSL认证所花费的时间。

通过使用LoadRunner的分析工具,您能很快地查找到出错的位置和原因并作出相应的调整。

3Web类型负载/压力测试

使用LoadRunner进行测试的过程可以用下图表示:

图3-1

3.1制定负载测试计划

制定负载测试计划一般情况下需要三个步骤,可以用下图表示:

图3-2

3.1.1分析应用程序

参见《LoadRunner性能测试设计前分析应用程序.doc》。

3.1.2确定测试目标

通过一些问题来确定测试目标:

目标

问题

衡量终端用户响应时间

完成一个逻辑进程的响应时间是多少?

确定硬件配置

哪一种硬件配置能够提供最优性能?

检查可靠性

系统能够无异常正常工作多长时间?

检查硬件软件升级

升级对性能和可靠性的影响多大?

评估新产品

服务器硬件软件的选择?

衡量系统能力

系统不出现明显性能下降情况下可以承受多大的负载?

找出瓶颈

导致响应时间变慢的因素?

不同阶段需要进行不同的负载测试:

计划和设计

开发

发布

产品

发展

评估新产品

衡量响应时间

检查可靠性

衡量响应时间

检查软硬件升级

衡量响应时间

检查硬件配置

衡量响应时间

找出瓶颈

衡量系统能力

检查软硬件升级

衡量系统能力

检查可靠性

3.1.3性能测试设计

确定计划要如何执行。

确定要使用LoadRunner度量哪些性能参数,根据测量结果计算哪些参数,从而可以确定Vusers(虚拟用户)的活动,最终可以确定哪些是系统的瓶颈。

在这里还要选择测试环境,测试机器的配置情况等等。

3.2开发测试脚本

测试脚本的组成:

vuser_init、Action和vuser_end。

其中vuser_init和vuser_end都只能存在一个,不能再分割,而Action还可以分成无数多个部分(通过CreateNewAction按钮,新建Action)。

我们一般把登录动作放在vuser_init,把注销关闭登录放在vuser_end。

但是如果我们要在登录动作前做集合点,就必须把登录动作放到Action中,因为vuser_init中不能放入集合点。

3.2.1录制基本的用户脚本

以LoadRunner自带的WebTours应用程序为例。

(说明,简要介绍一下WebTours系统)

默认设置下录制的脚本在回放中会出现“LoadRunner请求无法找到”的错误。

这时在treeview中看不到此组件的相关URL。

错误分析:

所选择的录制脚本模式不正确。

解决办法:

打开录制选项配置对话框进行设置,在“RecordingOptions”的“InternetProtocol”选项里的“Recording”中选择“RecordingLevel”为“HTML-basedscript”,单击“HTMLAdvanced”,选择“Script.Type”为“Ascript.containingexplicit”。

图3-3

设置完后录制下来的脚本正常回放。

关于录制时的设置参见《LoadRunner安装维护及配置手册.doc》文档。

3.2.2完善测试脚本

删除不必要的脚本。

【演示】

完善测试脚本有以下这些方法。

3.2.2.1插入事务

事务(Transaction):

事务是为了衡量请求开始到响应结束的时间。

比如:

我们在脚本中有一个数据查询操作,为了衡量服务器执行查询操作的响应时间,我们把这个操作定义为一个事务,这样在运行测试脚本时,LoadRunner运行到该事务的开始点时,LoadRunner就会开始计时,直到运行到该事务的结束点,计时结束。

这个事务的运行时间在结果中会有反映。

插入事务操作可以在录制过程中进行,也可以在录制结束后进行。

LoadRunner对于脚本中插入的事务数是不限数量的。

计算方式Duration(含Thinktime),lr_wasted_time函数的使用。

【演示】

3.2.2.2插入集合点

插入集合点是为了模拟并发的情况。

在测试计划中,可能会要求系统能够承受1000人同时提交数据,在LoadRunner中可以通过在提交数据操作前面加入集合点,这样当虚拟用户运行到提交数据的集合点时,LoadRunner就会检查同时有多少用户运行到集合点,如果不到1000人,LoadRunner就会命令已经到集合点的用户在此等待,当在集合点等待的用户达到1000人时,LoadRunner命令1000人同时去提交数据,从而达到测试计划中的需求。

【注意】集合点经常和事务结合起来使用。

集合点只能插入到Action部分,vuser_init和vuser_end中不能插入集合点。

【演示】

3.2.2.3ThinkTime

Thinktime,思考时间。

可以通过设置思考时间,来模拟真实用户在操作过程中的等待时间。

ThinkTime很容易和Pacing混淆。

二者都在loadrunnerVUGen的run-timesettings里。

为了更好说明区别,引入iteration的概念。

通过设置Iteration迭代,可以指定虚拟用户在同一个Action中重复执行多次,每次重复称之为一个iteration。

Iteration可以帮助我们模拟现实世界的重复场景。

Pacing,步调。

通过设置两次迭代之间的间隔时间,来调整各个action之间的步调(或者称之为节奏)。

从定义上来看,Pacing是和iteration绑定在一起的,可以认为是iterationpacing。

Thinktime,从定义上来看,thinktime是在iteration内部的某个action中各个步骤的间隔时间。

【注意】需要根据实际业务特点设置思考时间和步长,随意设置值的测试结果没有任何意义。

3.2.2.4插入注释

【演示】

3.2.2.5参数化输入

如果用户在录制脚本过程中,填写提交了一些数据,比如要增加数据库记录。

这些操作都被记录到了脚本中。

当多个虚拟用户运行脚本时,都会提交相同的记录,这样不符合实际的运行情况,而且有可能引起冲突。

为了更加真实的模拟实际环境,需要各种各样的输入。

用参数表示用户的脚本有两个优点:

1)可以使脚本的长度变短。

2)可以使用不同的数值来测试你的脚本。

例如,如果你企图搜索不同名称的图书,你仅仅需要写提交函数一次。

在回放的过程中,你可以使用不同的参数值,而不只搜索一个特定名称的值。

参数化包含以下两项任务:

1)在脚本中用参数取代常量值。

2)设置参数的属性以及数据源。

参数化仅可以用于一个函数中的参量。

你不能用参数表示非函数参数的字符串。

另外,不是所有的函数都可以参数化的。

【演示】

参数的类型:

⏹DateTime:

很简单,在需要输入日期/时间的地方,可以用DateTime类型来替代。

其属性设置也很简单,选择一种格式即可。

当然也可以定制格式。

⏹GroupName:

在Controller运行中,GroupName为加入场景后脚本的别名。

在VuGen中运行时,GroupName是None

⏹LoadGeneratorName:

在实际运行中,LoadRunner使用该虚拟用户所在LoadGenerator的机器名来代替。

⏹IterationNumber:

在实际运行中,LoadRunner使用该测试脚本当前循环的次数来代替。

⏹RandomNumber:

随机数。

很简单。

在属性设置中可以设置产生随机数的范围。

⏹UniqueNumber:

唯一的数。

在属性设置中可以设置第一个数以及递增的数的大小。

【注意】使用该参数类型必须注意可以接受的最大数。

例如:

某个文本框能接受的最大数为99。

当使用该参数类型时,设置第一个数为1,递增的数为1,但100个虚拟用户同时运行时,第100个虚拟用户输入的将是100,这样脚本运行将会报错,参数不够用。

【注意】这里说的递增意思是各个用户取第一个值的递增数,每个用户相邻的两次循环之间的差值为1。

举例说明:

假如起始数为1,递增为5,那么第一个用户第一次循环取值1,第二次循环取值2;第二个用户第一次循环取值为6,第二次为7;依次类推。

⏹VuserID:

设置比较简单。

在实际运行中,LoadRunner使用该虚拟用户的ID来代替,该ID是由Controller来控制的。

但是在VuGen中运行时,VuserID将会是–1。

⏹File:

需要在属性设置中编辑文件,添加内容,也可以从现成的数据库中取数据(下面我们将会介绍)

⏹UserDefinedFunction:

从用户开发的dll文件提取数据。

VuGen支持C语言的语法,在VuGen中编写函数以供调用。

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

在UpdateValueon中有以下几个选项:

⏹EachOccurrence:

在运行时,每遇到一次该参数,便会取一个新的值

⏹Eachiteration:

运行时,在每一次循环中都取不同的值

⏹Once:

运行时,在每次循环中,该参数只取一次值

【演示Random_Number_Test】

DataWizard…连接数据库。

【演示Data_Wizard】

“Selectnextrow”有以下几种选择:

⏹Sequential:

按照顺序一行行的读取。

每一个虚拟用户都会按照相同的顺序读取

⏹Random:

在每次循环里随机的读取一个,但是在循环中一直保持不变

⏹Unique:

唯一的数。

【注意】使用该类型必须注意数据表有足够多的数。

比如Controller中设定20个虚拟用户进行5次循环,那么编号为1的虚拟用户取前5个数,编号为2的虚拟用户取6-10的数,依次类推,这样数据表中至少要有100个数据,否则Controller运行过程中会返回一个错误。

⏹SameLineAs某个参数(比如Name):

和前面定义的参数Name取同行的记录。

通常用在有关联性的数据上面。

3.2.2.6插入函数

VuGen中可以使用C语言中比较标准的函数和数据类型,语法和C语言相同。

下面简单介绍一下比较常用的函数和数据类型。

1.控制脚本流程

if{}else{}

for{}

while{}

……………

总之C语言的控制流程的语句这里都可以直接使用

2.字符串函数

由于在VuGen脚本中使用最多的还是字符串,所以字符串函数在脚本中使用非常频繁。

具体的语法请参考帮助说明。

strcmp比较两个字符串

strcat连接两个字符串

strcpy拷贝字符串

……………..

【注意】在VuGen中,以char*声明的字符串是只读的,如果试图给char*类型的字符串赋值的话,编译会通过,但在运行时会产生“AccessViolation”的错误。

解决这类问题,就是把字符串声明为字符数组,比如char[100]。

3.输出函数

输出函数在调试脚本时非常有用。

lr_output_message输出一条消息

………………..

4.LoadRunner提供的标准函数

lr_eval_string该函数功能是得到参数(参数化输入中)当前的值

exg:

lr_output_message("temp=%s",lr_eval_string("{WCSParam2}"));

lr_save_string该函数功能是把一个字符串保存到参数中

exg:

lr_save_string("439","WCSParam3");

3.2.2.7插入Text/Image检查点

在进行压力测试时,为了检查Web服务器返回的网页是否正确,VuGen允许我们插入Text/Imag检查点,这些检查点验证网页上是否存在指定的Text或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。

【演示】

3.2.2.8关联

为什么要做关联?

所谓的关联(correlation)就是把脚本中某些写死的(hard-coded)数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。

举一个常见的例子,服务器在每个浏览器第一次跟它要数据时,都会在数据中夹带一个唯一的辨识码SessionID,利用这个辨识码来辨识跟它要数据的是不是同一个浏览器。

对于每个新的交易,服务器都会产生新的SessionID给浏览器。

那么这个SessionID就要根据实际操作产生的实时值来传递而不能是固定的值,否则服务器会发现这个SessionID是失效的,并且不会传送正确的网页数据给VuGen了。

像这种情况我们都需要用到关联。

如何做关联?

1)取值,web_reg_save_param函数的用法:

如果取值数据超过256,使用web_set_max_html_param_len("长度值")增加参数值大小;

\转义字符使用,注意不要把参数自身的双引号转义。

2)关联使用结构

关联函数;

请求;

对关联函数生成数据的使用。

3)关联方法

自动:

录制后自动关联,录制完成回放后自动关联Ctrl+F8;

手动关联:

请求开发人员确定需要关联的数据;

先自动后手动。

【例子】

3.2.3Run-TimeSetting

图3-4

RunLogic:

设置Action的iterations数,并且可以对脚本里的Action进行增删;

Pacing:

设置步长;

Log:

日志是否打开及日志设置;

ThinkTime:

思考时间是否忽略;

……

运行时的设置参见《LoadRunner安装维护及配置手册.doc》文档。

3.2.4单机运行测试脚本

运行脚本;

双击出错信息可以定位到错误脚本行;

调试。

【演示】

3.2.5VuGen其他有用的功能

3.2.5.1脚本压缩功能

图3-5

3.2.5.2tools菜单

图3-6

3.3创建运行场景

新建场景时,出现如下界面:

图3-7

1)ManualScenario:

该项是手动设置场景。

2)ManualScenariowithPercentageMode:

该项只有在“ManualScenario”选中的情况下才能选择。

选择该项后,在场景中我们需要定义要使用的虚拟用户的总数,LoadGeneratormachine机器集,然后我们为每一个脚本分配要运行的虚拟用户的百分比。

3)Goal—OrientedScenario:

在测试计划中,一般都包括性能测试要达到的目标。

选择该项后,LoadRunner基于这个目标,自动为你创建一个场景。

在场景中,我们只要定义好我们的目标即可。

3.3.1选择场景类型为ManualScenario

3.3.1.1选择VuserGroups

添加脚本到场景中。

【演示】

3.3.1.2添加LoadGeneratorMachines

对测试机做连接准备,供脚本运行时调用测试机。

【演示】

3.3.1.3设置GlobalSchedule

设置场景运行需要的虚拟用户数量,用户增加的策略,场景运行持续的时间,虚拟用户减少的策略等。

【演示】

3.3.1.4设置集合点

【演示】

3.3.1.5设置结果文件保存路径

【演示】

3.3.2选择场景类型为Goal—OrientedScenario

点击EditScenarioGoal按钮进入目标场景设置界面:

图3-8

目标类型有5种:

VirtualUsersGoal/HitsperSecond/TransactionsperSecond/PagesperMinute/TransactionsResponseTime,根据我们要测试的目标,可以按照以下原则这样选择使用。

1)VirtualUsersGoal:

测试多少人可以同时运行Web应用。

2)HitsperSecond/TransactionsperSecond/PagesperMinute:

想测试WebServer的性能,推荐定义目标类型为:

HitsperSecond、PagesperMinute或者TransactionsperSecond,这些类型都需要指定一个虚拟用户的最小值和最大值的范围。

Controller试图使用最少的虚拟用户来达到定义的目标。

如果使用最少的用户,不能达到目标,Controller增加用户数,直到定义的最大值。

如果使用了最多的虚拟用户数,定义的目标还没有实现,那么需要增加最大用户数,重新执行场景。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1