压力测试指导手册.docx
《压力测试指导手册.docx》由会员分享,可在线阅读,更多相关《压力测试指导手册.docx(24页珍藏版)》请在冰豆网上搜索。
压力测试指导手册
压力测试指导手册
北京融信学唐科技有限公司
版权所有违者必究
目录
压力测试指导手册i
北京融信学唐科技有限公司i
1概述4
2测试需求4
3系统环境4
4数据准备4
5测试场景4
6测试工具5
7名词解释5
8测试过程5
8.1VuGen5
8.1.1如何录制脚本5
8.1.2设置transaction(事务)7
8.1.3添加Rendezous(集合点)7
8.1.4脚本的参数化8
8.1.5对于变化的参数值如何在系统页面中获取10
8.2Controller10
8.2.1根据测试目的选择scenanio类型10
8.2.2如何加载脚本10
8.2.3测试脚本是否可用11
8.2.4配置压力测试环境(ManualScenario类型)11
8.2.5配置压力测试环境(Goal-OrientedScenario类型)11
8.2.6如何分组执行脚本12
8.2.7如何分配用户13
8.2.8Rendezvous分配13
8.2.9监控数据加载1
8.2.10执行压力测试1
8.2.11监控运行结果1
8.2.12保存Scenario1
8.3Analysis1
8.4常见问题2
8.4.1IE7和IE8无法录制脚本2
8.4.2WINDOWS2003server和IE6组合无法录制脚本3
8.4.3新安装LR后执行执行压力测试时多数ERROR3
8.4.4应用系统限制了同一个用户同时只能登录一个3
8.4.5脚本参数化--参数值在列表中显示为乱码3
8.4.6出现Error-27979:
Requestedformnotfound错误如何处理3
8.4.7出现Error-27728:
Stepdownloadtimeout(120seconds)错误如何处理3
8.4.8报如下错误:
Action.c(4):
Error-27727:
Stepdownloadtimeout(120seconds)hasexpiredwhendownloadingresource(s).Setthe"ResourcePageTimeoutisWarning"Run-TimeSettingtoYes/Nohavethismessageasawarning/error,respectively3
8.4.9服务器的压力只有在加载用户时有所上升,运行时没有压力4
8.4.10在执行压力测试过程中server端始终没有压力上升4
8.4.11为什么Windows系统中的CPU、内存等资源仍然充足,但是模拟的用户数量却上不去?
4
8.4.12一些Web虚拟用户脚本录制后立刻回放没有任何问题,但是当设置迭代次数大于1时,如果进行回放则只能成功迭代一次。
为什么从第二次迭代开始发生错误?
5
8.4.13执行压力测试时磁盘被占满5
8.4.14添加了WindowsResources计数器后,却看不到实时的数据。
5
9性能监控5
9.1Windows操作系统5
9.2Linux操作系统7
9.3Oracle数据库7
10测试报告7
1概述
在系统上线后,随着业务处理频繁、用户人数增加、系统运行时间增长,各服务器所承受的压力会越来越大,可能会造成系统运行缓慢或导致服务器瘫痪。
压力测试逼真地模拟用户操作,自动记录指定业务过程的响应时间,自动收集来自客户、网络、服务器等各种性能数据。
目的是掌握系统现在的性能,预知系统未来的性能,标识并隔离瓶颈,优化系统性能。
压力测试一般分为两种:
用户压力测试和时间压力测试。
测试流程如下:
Ø建立测试计划
Ø录制脚本
Ø设置场景
Ø运行脚本
Ø分析结果
2测试需求
对系统进行负载测试,首先要了解客户的业务目标,熟悉机器性能。
其次需要找出关键业务作为负载测试的切入点。
通过业务发生的频率、跟数据库的交互频率、WEB服务器和应用服务器的负载承受力来分析系统在已定的环境下所能承受的最大负载。
根据需求,制定详细的测试计划。
3系统环境
在进行压力测试之前,特别需要了解一些系统的参数配置:
●数据库的连接数:
●WEB服务的jdbc的数据库连接池
●WEB服务的线程池(在weblogic和websphere)中有设置
●服务器配置?
?
这些参数可以帮助我们估计采用何种的压力的合适的,比如说jdbc的连接池配了最大5个连接数,而采用了并发数50,那么是不合理的,系统一定会报很多的错误,这样的压力测试是失败的。
4数据准备
在进行压力测试之前,需要对系统数据进行准备。
目前我们的系统大多数都是需要用户登录后才能进行操作,所以说,在进行压力测试前,必须在系统中准备好这些用户。
如果需要不同的用户对不同的数据进行操作,还需要对这些用户的权限进行分配。
通常情况下对于查询的压力测试需要准备一个生命周期的数据,以模拟用户正常使用情况。
5测试场景
根据测试计划,设置场景:
Ø并发数:
在脚本运行前根据测试计划设置并发数,并发数表明了系统希望达到的负载
Ø脚本:
设置压力测试时执行的脚本
Ø服务器:
设置要连接的服务器
Ø性能参数:
设置获取哪些数据
Ø用户:
设置多台测试机器来执行压力测试
Ø时间:
设置执行时间
等
6测试工具
可执行压力测试的工具有很多,有时候需要同时运用多种工具进行压测和监控,才能最终分析出系统的瓶颈。
这里,我们主要运用HP公司的Loadrunner进行压测,建议使用版本号为9.0以上的版本。
7名词解释
ØTransationSunmmary(事务综述):
对事务进行综合分析是性能分析的第一步,通过分析测试时间内用户事务的成功与失败情况,可以直接判断出系统是否运行正常。
ØAverageTransacitonResponseTime(事务平均响应时间):
显示的是测试场景运行期间的每一秒内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。
ØTransactionsperSecond(每秒通过事务数/TPS):
显示在场景运行的每一秒钟,每个事务通过、失败以及停止的数量,使考查系统性能的一个重要参数。
通过它可以确定系统在任何给定时刻的时间事务负载。
分析TPS主要是看曲线的性能走向。
将它与平均事务响应时间进行对比,可以分析事务数目对执行时间的影响。
ØTotalTransactionsperSecond(每秒通过事务总数):
显示在场景运行时,在每一秒内通过的事务总数、失败的事务总署以及停止的事务总数。
ØTransactionPerformanceSunmmary(事务性能摘要):
显示方案中所有事务的最小、最大和平均执行时间,可以直接判断响应时间是否符合用户的要求。
ØTransactionResponseTime(Percentile)(事务响应时间(百分比)):
是根据测试结果进行分析而得到的综合分析图,也就是工具通过一些统计分析方法间接得到的图表。
通过它可以分析在给定事务响应时间范围内能执行的事务百分比。
ØTransactionResponseTime(Distribution)(事务响应时间(分布)):
显示在场景运行过程中,事务执行所用时间的分布,通过它可以了解测试过程中不同响应时间的事务数量。
如果系统预先定义了相关事务可以接受的最小和最大事务响应时间,则可以使用此图确定服务器性能是否在可以接受的范围内。
8测试过程
压力测试使用LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。
适用于任何环境,支持多种操作系统、数据库、应用服务、中间件等。
主要由三部分构成:
VuGen、Controller、Analysis。
VuGen是录制脚本,Controller是执行压力操作、模拟压测场景,Analysis生成压力测试报告、辅助分析压测结果。
8.1VuGen
8.1.1如何录制脚本
Ø点击“开始—LoadRunner—Applications—VirtualUserGenerator”,进入系统,页面显示窗口如下:
Ø在NewSingleProtocalScript界面,选择协议。
如:
B/S结构的应用程序,就选择WEB(HTTP/HTML),点击OK按钮。
Ø点击StartRecord按钮,显示StartRecording窗口:
URLAddress栏中输入录制脚本所需系统的地址;
RecordingintoAction栏选择Vuser_init、Action、Vuser_end,如果是想做登录模块的压力测试就选择action,如果压力不在登录,而在其他功能模块,则选择Vuser_init;
注意:
压测时反复执行的是Action里的事务。
New按钮是添加一个Action,输入Action的名称就可(建议名称为中文);
默认‘Recordtheapplicationstartup’复选框是选中的,点击ok就开始录制了,如果不选中,可选择何时开始录制;
点击OK按钮,开始录脚本。
显示工具栏如下:
Ø正常执行需要压力测试的模块
Ø点击Stop按钮结束录脚本;点击Pause按钮暂停录脚本;点击CreateNewAction按钮新建一个action,输入action名称点击OK即可;点击InsertStartTransaction按钮开始新建transaction(事务),输入transaction名称点击OK即可,点击InsertEndTransaction按钮结束新建transaction;点击InsertRendezous按钮,新建一个Rendezous输入Rendezous(集合点)名称点击OK按钮即可;点击InsertComment按钮新建一个Comment输入Comment(备注)信息点击点击OK按钮即可。
8.1.2设置transaction(事务)
事务时要度量其服务器响应时间的任务或操作集。
添加事务有2种方法:
Ø一种是直接在录制脚本时添加
点击InsertStartTransaction按钮开始新建transaction(事务),输入transaction名称点击OK即可,点击InsertEndTransaction按钮结束新建transaction。
Ø一种是在脚本录制完成后添加
点击Insert—StartTransaction,填写事务名称,添加事务的起始点;
点击Insert—EndTransaction,选择对应的事务名称,添加事务的结束点。
设置事务是为了在执行压测后,可以更好的查看Action中执行哪个操作时所用的时间更多,也可以方便查看每个操作的响应时间的变化曲线。
一般地,我们会在Action中录制较多内容,比如,查询记录,查看具体记录信息等,而且录制后的脚本每个单独的操作都会由几个事务构成,这时我们需要添加事务,将同一操作相关的事务放在一起。
注意:
在一个事务中间不插入think_time时间,think_time时间要在2个事务中间插入。
这样保证执行压力测试后每个事务的响应时间为实际的事务返回时间。
Ø自动设置事务
可以在Run-timesettings/Miscellaneous中,将AutomaticTransactions的两项全部勾中,这样系统会自动将每个步骤作为一个事务输出它的响应时间。
注意:
这样设置的事务通常情况下有很多不需要的代码也被加到事务中,所以会影响事务的响应时间,如果需要插入的事务比较多而且录制后的代码中无效代码比较少的时候可以采用此方法。
8.1.3添加Rendezous(集合点)
集合点用以同步虚拟用户以便恰好在同一时刻执行任务。
添加集合点有2种方法:
Ø一种是直接在录制脚本时添加
点击InsertRendezous按钮,新建一个Rendezous输入Rendezous(集合点)名称点击OK按钮即可。
Ø一种是在脚本录制完成后添加
点击Insert—Rendezous,填写集合点名称,添加集合点。
设置集合点是为了模拟多人一起执行某操作,看多人同时执行操作对系统的影响。
集合点设置好以后,要在场景中指定集合点的数量。
一般地,集合点数量的确定一方面是要看真实情况需要模拟多少用户同时操作,一方面要看数据库连接数的大小,一定要保证设置的数量真的能让服务器端承担如此大的压力。
在controller执行时要选择集合点的方案。
8.1.4脚本的参数化
Ø脚本录制完后,选中要参数化的变量,点击右键,选择ReplacewithaParameter,填写参数名称,选择参数类型,点击Properties按钮,设置参数项的数据来源、存放位置以及参数的取值方式等,参数设置页面如下图:
可选择Parametertype(参数类型),选择不同的参数类型,会显示不同的页面。
我们最常用的参数类型有:
File、RadomNumber、Table。
ØFile:
将参数值写在.dat文件中,通过读取文件,获取参数值。
ØRadomNumber:
设置参数值为一个范围内的随机数,执行脚本时,随机取一个范围内的值赋给参数。
ØTable:
可新建一个.dat文件,指定文件中哪列的值作为参数值,同File方式;也可读取数据库表中的记录值作为参数值。
注意:
为了减轻数据库压力,我们多用File方式。
FilePath:
可选择已有文件或新建一个数据文件。
AddColumn:
可为表格增加列。
AddRow:
可为表格增加行。
DeleteColumn:
可为表格删除列。
DeleteRow:
可谓表格删除行。
添加完记录后,此页面的表格位置默认只能显示前100条记录,所以可以点击EditwithNotepad按钮查看、添加其他记录值。
DataWizard:
用来连接数据库表,从已有数据库中获得参数值。
FileFormat:
设置文件中列的分割符号(Columndelimiter)和首行数据行位置(Firstdataline)。
分割符号包含逗号、tab、空格,默认是逗号;首行数据行位置默认为1。
添加了数据值后,如何取数据赋给参数是个很关键的内容,下面讲一下如何分配数据。
Selectnextrow:
包括Sequential、Radom、Unique,指示在Vuser脚本执行期间,如何从参数文件中取得数据。
分配方法
描述
Sequential(顺序)
顺序地向Vuser分配数据。
当正在运行的Vuser访问数据表时,它将会提取一个可用的数据行。
如果在数据表中没有足够的值,则VuGen返回到表中的第一个值,循环继续直到测试结束。
Radom(随机)
为每个Vuser分配一个数据表中的随机值。
当运行一个场景、会话步骤或业务流程监控器配置文件时,可以指定随机顺序的种子数。
每个种子值代表用于测试执行的一个随机值顺序。
每当使用该种子值时,会将相同顺序的值分配给场景或会话步骤中的Vuser。
如果在测试执行中发现问题,并且要使用相同的随机值顺序重复该测试,请启用该选项。
Unique(唯一)
为每个Vuser的参数分配一个唯一的顺序值。
在这种情况下,必须确保表中的数据对所有的Vuser和它们的迭代来说是充足的。
如果拥有20个Vuser,并且要运行5次迭代,则表格中必须至少包含有100个唯一值。
Updatevalueon:
包括Eachoccurrence、Eachiteration、Once,选择一个数据更新方式,以指示在Vuser脚本执行期间,指定如何更新参数值。
更新方式
描述
Eachoccurrence(每次出现)
指示Vuser在每次参数出现时使用新值。
当使用同一个参数的几个语句不相关时,该方法非常有用。
例如,对于随机数据,在该参数每次出现时都是用新值可能是非常有用的。
Eachiteration(每次迭代)
指示Vuser在每次脚本迭代时使用新值。
如果一个参数在脚本中出现了若干次,则Vuser为整个迭代中该参数的所有出现使用同一个值。
当使用同一个参数的几个语句相关时,该方法非常有用。
Once(一次)
指示Vuser在场景或会话步骤运行期间仅对参数值更新一次。
Vuser为该参数的所有出现和所有迭代使用同一个参数值。
当使用日期和时间时,改类型可能会非常有用。
注意:
在实际操作时,我们一般都选择分配方式为Unique,更新方式为Eachiteration。
Ø点击工具栏的Compile图标,编译录制的脚本,保证录制的脚本是正确的。
Ø编译通过后,点击Run图标,运行一次脚本,确定脚本回放是正确的,在日志中可查看参数取的值是否正确。
Ø保存脚本。
8.1.5对于变化的参数值如何在系统页面中获取
录制的脚本中,有时会遇到一种情况,就是后面执行的事务的url中会用到一个唯一的id值,此id是系统自动生成的,每次都不一样,且可由页面中获得此id值。
此时就需要将此id值参数化,并在此事务前先获取此id值。
例如:
培训考试系统中,对学员同时进行考试进行压测,每个学员点击开始考试按钮,进入考试页面。
此脚本中,学员登录系统要进行参数化,在开始考试的事务中,每个学员获取的考卷id均不同,此id可以通过查看页面的源代码获得。
此时需要将考卷id也进行参数化,id的取值需要用到web_reg_save_param函数。
函数的格式为:
web_reg_save_param("ParamName","LB=String","RB=String",LAST);
ParamName为参数名称,LB为id左侧的代码,RB为id右侧的代码,中间的值就会赋给ParamName。
注意:
代码中有’的要用\’进行转义。
将web_reg_save_param放到要用到参数的事务之前,就可以将id值进行参数化了。
8.2Controller
8.2.1根据测试目的选择scenanio类型
Ø点击“开始—LoadRunner—Applications—Controller”,进入系统,窗口显示:
✓ManualScenanio选择,已知压力测试的环境和最大用户数量,对服务的性能进行压力测试,看是否满足用户或需求中的要求
✓Goal-OrienledScenanio选择,需要知道服务的最大承载量,如可定义某操作的响应时间大于3秒可支持的最大用户数量
8.2.2如何加载脚本
Ø点击Browse按钮,将保存的脚本添加到AvailableScripts列表中;
Ø点击Add按钮,选择AvailableScripts列表中的脚本添加到右边的列表中;
8.2.3测试脚本是否可用
在加载脚本后要每个脚本分配2个用户,每个脚本运行一次结束,执行压力测试,若脚本执行无错误可以进行后续的压力测试配置
8.2.4配置压力测试环境(ManualScenario类型)
Ø点击OK按钮,进入Controller界面,有两个标签页:
Desing、Run;
Ø在Desing标签页,修改Quantity为目标并发数;
Ø在Desing标签页,点击AddGroup按钮添加组,可以将脚本分为多个组来执行;如果需要可以在LoadGeneratorName下拉框中选Add添加客户端测试机器。
输入机器名称、选择操作系统,点击OK按钮;
Ø在Desing标签页,点击EditSchedule按钮,界面显示如下:
如果希望按组运行脚本,选择SchedulebyGroup选项,并设置其运行方式。
可以指定每个组的执行方式;
在RampUp标签页设置是同时加压还是逐渐加压;
在Duration标签页输入需要运行的时间;
在RampDown标签页设置是同时减压还是逐渐减压
点击ScenarioStartTime按钮,设置开始运行时间,不设置则表示立即执行;
8.2.5配置压力测试环境(Goal-OrientedScenario类型)
点
按钮,编辑该场景的目标
Ø目标的种类。
每次场景运行只能设置一个目标。
✓如果需要测试多少人可以同时运行Web应用,那么推荐定义VirtualUsersGoal。
✓如果想测试WebServer的真正实力,推荐定义目标类型为:
HitsperSecond、PagesperMinute或者TransactionsperSecond,这些类型都需要指定一个虚拟用户的最小值和最大值的范围。
Controller试图使用最少的虚拟用户来达到定义的目标。
如果使用最少的用户,不能达到目标,Controller增加用户数,直到定义的最大值。
如果使用了最多的虚拟用户数,定义的目标还没有实现,那么需要增加最大用户数,重新执行场景。
8.2.6如何分组执行脚本
若几个脚本需要一个一个分别顺序执行,但又希望一起出测试结果方便对比各脚本的情况,可以设置分组执行这些脚本。
当测试为ManualScenario类型时,在
中选择“SchedulebyGroup”,如下图:
在starttime中配置每个脚本执行的顺序,以及该脚本的执行情况。
8.2.7如何分配用户
对于多脚本加载时需要根据每个脚本的实际用户使用频率将总用户分配到每个脚本。
执行虚拟用户数量比较大时可以将用户分配到其他机器上以减少本机的负载压力。
注:
添加的机器需要安装loadrunneragentprocess
链接其他机器后要记得运行一次,看是否可以执行成功
8.2.8Rendezvous分配
如果在脚本中设置了集合点,还需要在Controller中设置集合点策略。
在菜单中调出设置集合点策略的窗口.
点按钮,进入策略设置窗口
8.2.9监控数据加载
Ø点击Run标签页,添加AvailabeGraphe
如:
windowsresources、unixresource、weblogic、tuxedo。
双击Graphe,在右边的方框中显示此Graphe,选中并点击右键,选择‘AddMeasurements’,输入服务器名称或IP,有的要求输入用户口令,成功连接后,从弹出的窗口中选择要监控的参数,如:
cpu、memery、physicaldisk等。
具体的性能参数有待进一步细化。
8.2.10执行压力测试
Ø点击StartScenario按钮,开始执行场景;
8.2.11监控运行结果
Ø执行完后,如果所有的并发数都是pass状态,则表明这个压力测试是有效的,如果有error则表明此次测试是无效的,最好是根据错误信息调整重做。
有error产生时,用户可以点击error图标,查看其详细的错误信息。
但有时候在大压力下有error产生也是正常情况,分析error原因,如果大多数都是connetouttime只要webserver还在正常运行,这些error可以忽略。
8.2.12保存Scenario
Ø保存Scenario,完成本次压力测试后,若后续仍需要改进后继续执行压力测试可以将Scenario保存以后测试时直接使用,减少配置场景和脚本的工作