性能测试培训(LoadRunner、JMeter、性能调优)_第1页
性能测试培训(LoadRunner、JMeter、性能调优)_第2页
性能测试培训(LoadRunner、JMeter、性能调优)_第3页
性能测试培训(LoadRunner、JMeter、性能调优)_第4页
性能测试培训(LoadRunner、JMeter、性能调优)_第5页
已阅读5页,还剩130页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

性能测试培训(LoadRunner、JMeter、性能调优)第一页,共135页。1、性能测试基础2、Loadrunner工具介绍

2.1、Loadrunner之VirtualUserGenerator

2.2、Loadrunner之Controller

2.3、Loadrunner之Analysis3、Jmeter工具介绍

3.1、Jmeter概要3.2、Jmeter脚本录制

3.3、Jmeter测试实践4、影响系统性能的因素5、性能调优培训章程第二页,共135页。性能测试是什么?使用自动化测试工具对产品按一定的性能指标进行测试,解决性能瓶颈,给用户最好的体验。性能测试的时代背景,作用?大数据时代、网址(百度、淘宝、京东)、软件(微信、QQ)、游戏(手游、页游、端游)、金融(银行、证券系统)、教育(教务系统)、交通(12306)通过性能测试,来保证以上系统的能够给用户更好的使用体验!性能测试基础第三页,共135页。性能测试基本流程项目经理、业务/框架专家、产品经理、高级性能测试工程师、开发经理性能测试需求分析项目经理、框架专家、产品经理、高级性能测试工程师性能测试计划性能测试工程师、外部支持(网络工程师、系统管理员)性能测试准备开发脚本/执行测试高级性能测试工程师、性能测试工程师测试结果分析高级性能测试工程师、外部支持(系统管理员、DBA)系统调优框架师、产品经理、高级性能测试工程师、外部支持(DBA)编写测试报告性能测试工程师、高级性能测试工程师第四页,共135页。响应时间(Responsetime)响应时间就是用户感受软件系统为其服务所耗费的时间,对应网站系统来说,响应时间就是从点击一个页面计时开始,到这个页面完全在浏览器里展现计时结束的这一段时间间隔。响应时间:2-5-8原则当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统非常慢,这样的系统一般不会被接受。(有研究显示,当网站的加载时间延迟1秒,那么会有1/4的用户流失。)性能测试常用指标第五页,共135页。吞吐量(Throughput)指在单位时间内客户端和服务器成功发送数据的数量。如网上下载文件,客户端向服务器发送下载请求,服务器发送文件内容到客户端,这个过程所产生的数据就为吞吐量,吞吐量越大越好。资源使用率(TresourceUtilization)常见的资源有:CPU占用率、内存使用率、磁盘I/O、网络I/O。每秒点击数(Hitspersecond)指客户端每秒钟向服务器提交的请求数量,如果客户端发送的请求数量越多,之间相对的平均吞吐量也应该越大。性能测试常用指标第六页,共135页。并发用户数(Concurrentusers)指在客户端的一批用户同时执行一个操作的数量。并发数反应了软件系统的并发处理能力。两种错误理解:1、使用系统的全部用户的数量2、用户在线数量(不做任何操作的用户)性能测试常用指标第七页,共135页。如果要做性能测试,传统方式该怎么做呢?传统性能测试方式-不精确、不严谨。Loadrunner安装、组件介绍Loadrunner介绍脚本录制、编辑、调试,支持最好的是C语言,也支持Java、C#、python等。压测场景,设置并发等参数,运行期间提供多种图标的实时展示。结果分析,图表维度、值等结果参数的展示及整合。第八页,共135页。Loadruner自带的自学网站。启动网站:LoadrunnerSample/网址登录账号:用户名:jojo密码:bean第九页,共135页。1.提示1080端口被占用。Cmd:输入命令netstat

–ano查找各端口所在进程的PID,找到1080的程序PID,在自由管理器中将其关闭,再重启服务。2.Internalerror:yourrequestwasunsuccessfulCatcreateCGIprocess–programnotfound安装strawberry-perl-,和lr安装在一个盘符。LoadrunnerSample不能访问解决方法第十页,共135页。VirtualUserGenerator-创建测试脚本123第十一页,共135页。VirtualUserGenerator-步骤把操作转换为脚本语言。检查转换脚本语言是否正确。设置注释、事务、参数化、时间间隔等。设置负载场景。第十二页,共135页。VirtualUserGenerator-录制脚本准备工作第十三页,共135页。VirtualUserGenerator-Init、Action、EndInit录制的一般是业务流程开始之前的初始化工作(如登录、服务器初始化)。Action录制的一般是业务流程操作的事件。End录制的一般是退出的时候执行的操作。(如用户退出、注销)init和end不能迭代多次,只能运行一次,action可以迭代多次运行。如果测试需求没有对业务流程设置重复的要求,可以都放在action部分。有重复的要求,如要求一个用户登录之后要求重复订票10次,就需要把订票部分的脚本放在action之中进行迭代。登录部分脚本放在init,退出部分放在end。第十四页,共135页。VirtualUserGenerator-脚本录制测试需求:登录WebTours订票网站,预定一张机票后退出。脚本录制操作步骤:1、启动Web服务器。2、打开VirtualUserGenerator界面。3、选择脚本协议。4、进行页面操作。5、回放验证。6、增强脚本。具体观看演示。第十五页,共135页。VirtualUserGenerator-运行时设置介绍第十六页,共135页。VirtualUserGenerator-回放结果刷选器进行筛选第十七页,共135页。VirtualUserGenerator-设置关联许多应用程序都使用动态值,每次使用应用程序时这些值都会变化,例如,有些服务器会为每个新会话分配一个唯一的会话ID。回放录制会话时,应用程序创建新会话ID与录制的会话ID不同。LoadRunner通过关联解决这种问题。关联将动态值保存到参数中。运行模拟场景时,Vuser并不使用录制的值,而是使用服务器分配的新的会话ID。第十八页,共135页。VirtualUserGenerator-HTML模式与URL模式模式选择菜单:工具/录制选项/录制第十九页,共135页。VirtualUserGenerator-HTML模式与URL模式在默认情况下,选择HTML模式,这种方式的脚本容易维护,容易理解,推荐使用这种方式录制脚本。URL模式说明:脚本中的表示采用基于URL的方式,所有的HTTP请求都会被录制下来,单独生成函数,所以URL模式生成的脚本会显示得比较杂乱。URL录制的脚本中Web_concurrent_start函数是并发组开始的标记,Web_concurrent_end是并发组的结束标记。在并发组中的函数不是立即执行的。在并发组开始时,所有的函数首先被记录下来,当并发组结束时,所有的函数并发执行。演示URL录制方式第二十页,共135页。VirtualUserGenerator-HTML模式与URL模式选择HTML还是URL录制,有以下参考原则:1、基于浏览器的应用程序推荐使用HTML模式。2、不是基于浏览器的应用程序推荐使用URL模式。3、如果基于浏览器的应用程序中包含了javascript并且该脚本向服务器产生了请求

使用URL模式。4、基于浏览器的应用程序中使用了HTTPS安全协议,使用URL方式录制。第二十一页,共135页。VirtualUserGenerator-添加事务定义:事务(Transaction),为了衡量某个操作的性能,需要在操作的开始和结束位置插入这样的一个范围,这就定义了一个transaction。原因:从性能测试的角度出发,我们需要知道不同的操作所花费的时间,这样我们就可以衡量不同操作对被测系统所造成的影响,那么我们如何知道不同操作所花费的时间,这就用到了事务,我们在操作之前插入一个事务开始标识,在操作完成后插入一个事务结束标识,这样我们就知道了这个操作所花费的时间。作用:LoadRunner运行到该事务的开始时,lr就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在lr的运行结果中会反映出来,通俗的讲lr中第二十二页,共135页。VirtualUserGenerator-添加事务的事务就是一个计时的标识,lr在运行过程中一旦发现事务开始标识,就开始计时,一旦发现事务的结束标识,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间反应的是一个操作过程的响应时间。函数构造:事务开始函数共包括一个参数,就是事务名称,事务结束函数共包括两个参数,第一个参数是事务名称,第二个参数是事务的状态,事务状态可以分为LR_PASS:返回PASS;LR_FAIL:返回Fail;LR_STOP:返回Stop;LR_AUTO:自动返回检测到的状态。Duration表示事务的完成响应时间,wastedtime包括事务中函数自身执行所消耗的时间。演示添加事务,两种方式…第二十三页,共135页。VirtualUserGenerator-添加事务注意:在应用事务的过程中,不要将思考时间(lr_think_time函数)放在事务开始和结束之间,否则在回放思考时间设置被允许的情况下,思考时间将被算入事务的执行时间,从而影响对事务的执行时间的分析和统计。第二十四页,共135页。VirtualUserGenerator-脚本参数化第二十五页,共135页。VirtualUserGenerator-脚本参数属性介绍选择下一行:

顺序(Sequence):按照参数化得数据顺序,一个一个的来取。

随机(Random):参数化中的数据,每次随机的从中抽取数据。

唯一(Unique):为每个虚拟用户分配一条唯一的数据。更新值的时间:每次迭代(Eachiteration):每次迭代时取新的值。每次出现(Eachoccurrence):每次参数化时取新的值,这里强调前后两次

取值不能相同。只取一次(once):参数化中的数据,一条数据只能被抽取一次。以上两个属性组合就有9种方式,这里不一一进行说明,可以亲自尝试看效果。第二十六页,共135页。VirtualUserGenerator-设置检查点内容检查菜单:Vuser/运行时设置/Internet协议/内容检查第二十七页,共135页。VirtualUserGenerator-设置检查点第二十八页,共135页。VirtualUserGenerator-日志解析1、回放日志(Replaylog):脚本回放运行时输出都记录在这个log里输出窗口的回放日志显示得消息用于描述Vuser运行时执行的操作,该信息可以说明在方案中执行脚本时,该脚本的运行方式,脚本执行完成后,可以检查回放日志中的消息,以查看脚本在运行时是否发生了错误。回放日志中使用了不同的颜色的文本。黑色:标准输出消息。红色:标准错误消息。绿色:用引号括起来的文字字串(例如URL)。蓝色:事务信息(开始、结束、状态和持续时间)。橙色:迭代次数信息。如果双击以操作名开始的行,光标将会跳转到生成脚本中的相应步骤上。第二十九页,共135页。VirtualUserGenerator-日志解析2、录制日志当录制脚本时,Vugen会捕捉Client端(浏览器)与Server端(服务器)之间的对话,并且通过日志记录下来,产生脚本。在Vugen的RecordingLog中,我们可以找到浏览器与服务器之间的所有对话,包括通信内容、日期、时间、浏览器请求、服务器的响应内容等。3、生成日志记录了脚本的设置、网络事件到脚本函数的转换过程。第三十页,共135页。VirtualUserGenerator-错误处理函数错误处理设置:Vuser/运行时设置/常规/其他第三十一页,共135页。VirtualUserGenerator-错误处理函数VuGen提供了错误处理函数lr_continue_on_error,用来在脚本中实时修改Vuser的错误设置。lr_continue_on_error函数的语法结构如下:voidlr_continue_on_error(intvalue);Value是脚本运行出错设置的取值,具体取值及相应值得含义如下表所示。在使用表中的参数时,既可以使用常量名称作为参数,也可以直接使用对应常量值作为参数。常量名称常量值含义LR_ON_ERROR_NO_OPTIONS0取消出错继续执行设置LR_ON_ERROR_CONTINUE1发生错误继续运行脚本LR_ON_ERROR_SKIP_TO_NEXT_ACTCION2发生错误跳转到下一个actionLR_ON_ERROR_SKIP_TO_NEXT_ITERATION3发生错误跳转到下一个迭代LR_ON_ERROR_END_VUSER4发生错误结束当前用户第三十二页,共135页。VirtualUserGenerator-错误处理函数lr_continue_on_error调用后将对其后面所有的语句产生影响。因此脚本中较常用的是lr_continue_on_error(0)与lr_continue_on_error(1),这两个语句成对出现,期间包含着需要设置为发生错误停止执行的关键业务脚本。这种设置比较适合压力较大且在夜间自动运行的测试场景,而这类场景通常会在run-time-settings中开启continueonerror选项,因此需要通过lr_continue_on_error(0)关闭continueonerror选项,使一些关键业务发生错误停止执行。对于一些非关键的业务,则需要通过lr_continue_on_error(1)开启continueonerror选项,这样即使遇到错误也不会影响脚本的继续执行。第三十三页,共135页。VirtualUserGenerator-脚本编写最佳实践有过开发经验的朋友都知道,程序的开发大多不是一蹴而就的,通常要经过编码、代码评审和测试等流程后,才能趋于稳定。而VU脚本本身虽然不复杂,但VU脚本运行往往涉及到多个因素,也会经常出问题。提早发现和解决脚本中的问题不仅从技术上下功夫,在流程上也要做文章。通常验证一个脚本的比较好的过程是这样的:1、Generate:录制或开发脚本。2、SUSI(SingleusersingleIteration单用户单循环):运行录制生成脚本,解

决可能存在的关联问题。3、SUMI(SingleUserMultiIteration单用户多循环):参数化脚本,在runtime

中设置iteration,再次运行,验证参数化问题。4、MUSI(MultiUserSingleIteration多用户单循环):controller里多用户运行

脚本,验证脚本中可能的多线程同步问题。5、MUMI(MultiUserMultiIteration多用户多循环):即性能测试开始。其中1-3是在VU中进行,4-5是在Controller中进行。第三十四页,共135页。VirtualUserGenerator-常见报错处理方法1、LoadRunner录制脚本时为什么不能弹出IE浏览器当一台主机安装多个浏览器时,LoadRunner录制脚本经常可能遇到不能打开浏览器的情况,可以用下面的方法来解决:启动浏览器,打开Internet选项对话框,切换到高级标签,去掉“启用第三方浏览器扩展(需重新启动)”的勾选,然后运行VuGen即可解决。提示:通常安装Firefox等浏览器后,都会勾选上面的选项,导致不能正常录制。2、录制Web脚本时,生成的脚本中存在乱码该如何解决录制脚本前,打开录制选项配置对话框Record-Options,进入到Advanced标签,先勾选“Supportcharset”,然后选择中支持UTF-8。再次录制,就不会出现乱码问题了。第三十五页,共135页。VirtualUserGenerator-常见报错处理方法3、Error-26377:No

matchfoundfortherequestparameter“CorrelationParameter1”Checkwhethertherequestedboundariesexistintherequestdata.Also,ifthedatayouWanttosaveexceeds1024bytes,useweb_set_max_html_param_lentoincreasetheParametersize.第一种方法:参数化前面把web_set_max_html_param_len(999999)值加大第二种方法:在关联函数添加“NotFound=warning”第三十六页,共135页。VirtualUserGenerator-常见报错处理方法4、录制的脚本为空(1)、选择的协议不对,需要和开发人员沟通(2)、没有选择jar包(3)、检查防火墙杀毒软件5、Actionc(16):Error–27728:Steodownloadtimeout(120seconds)hasexpiredWhendownloadingnon-resource(s)。错误分析:对应HTTP协议,默认的超时时间是120秒,客户端发送一个请求到服务

器端,如果超过120秒服务器端还没有返回结果,则出现超时错误。解决方法:首先在运行环境中对超时进行设置,默认的超时时间可以设置长一些,

再设置多次迭代运行,如果还有超时现象,需要在“RuntimeSetting/

InternetProtocol:Preferences/Advanced/Option”修改HTTP-requestconnecttimeout,HTTP-requesttimeout,Stepdownloadtimeout的值,

再回复是否成功。第三十七页,共135页。Controller-简介当虚拟用户脚本开发完成后,使用Controller将这个执行脚本的用户从单用户转化为多用户,从而模拟大量用户操作,进而形成负载。(多用户单循环,多用户多循环)我们需要对负载模拟的方式和特征进行配置从而形成场景。场景(Scenario)是一种用来模拟大量用户操作的技术手段,通过配置和执行场景想服务器产生负载,验证系统各项性能指标是否达到用户要求,而Controller可以帮助我们对场景的设计、执行及监控进行管理。使用Controller管理场景主要分为:场景设计、场景监控。最后通过运行场景完成性能测试的执行。第三十八页,共135页。Controller-简介手工场景(ManualScenario)自行设置虚拟用户的变化,通过设计用户的添加和减少的过程,来模拟真实的用户请求模型,完成负载的生成手工场景是“定量型”性能测试,掌握负载的变化过程中系统各个组件的变化情况,定位性能瓶颈并了解系统的处理能力,一般在负载测试和压力测试中应用。手工场景的核心就是设置“用户负载方式”。第三十九页,共135页。Controller-场景设置演示场景设置…第四十页,共135页。Controller-场景计划方式与运行模式手工场景-计划方式Scenario(场景):多个脚本之间按照设定

的场景计划来统一运行。Group(组):多个脚本之间按照独立设置模式跑,各个脚本可以单独设置虚拟用

户、运行时间等。手工场景-运行模式Realworldschedule(实际计划):可以通过AddAction来添加多个用户的变化过

程,包括多次负载用户增加用户,持续时间,

停止用户。Basicschedule(基本计划):经典模式,只能设置一次负载运行的虚拟用户配置

,不能添加多个用户变化过程。第四十一页,共135页。Controller-目标场景设置一个运行目标,通过Controller的自动加载功能进行自动化负载,如果测试的结果达到目标,说明系统的性能符合测试目标,否则就提示无法达到目标。第四十二页,共135页。Controller-目标场景设置一个运行目标,通过Controller的自动加载功能进行自动化负载,如果测试的结果达到目标,说明系统的性能符合测试目标,否则就提示无法达到目标。第四十三页,共135页。Controller-目标场景设置第四十四页,共135页。Controller-目标场景设置目标场景的5种目标类型:VirtualUsers:该参数表示虚拟用户数,验证被测系统所需要支持的用户数。HitperSecond:该参数标识每秒点击数,是指一秒钟能做到的目标请求数目,即

客户端产生的每秒请求数(正常情况下=服务器请求响应数)。TransactionperSecond:该参数表示每秒事务数,一个事务代表一个操作,反应

系统的处理能力。TransactionResponseTime:该参数表示事务的响应时间,反应系统的处理速度

以及一个操作花费的时间。PagesperMinute:该参数表示每分钟页面的刷新次数,反应系统每分钟提供的页

面处理能力,代表了系统的整体处理能力。第四十五页,共135页。Controller-负载生成器管理对场景进行设计后,需要对负载生成器进行管理和配置。LoadGenerator是运行脚本的负载引擎,相当于加压机,主要功能是生成虚拟用户进行负载,在默认情况下使用本地的负载生成器来运行脚本。但是每生成一个虚拟用户,需要花费负载生成器大约2M-3M的内存空间。通常运行Controller的主机很少用作负载生成器。负载生成器的工作由其他装有LRAgent的PC来担任。如果负载生成器内存大使用大于了70%,负载生成器就会变成系统的瓶颈,导致性能测试成绩下降。这种问题需要添加负载生成器来解决。所以在一台电脑上无法模拟大量的虚拟用户,这个时候需要调用多个LoadGenerator来完成大规模的性能负载。第四十六页,共135页。Controller-负载运行时设置具体观看演示。第四十七页,共135页。Controller-手工场景负载界面具体观看演示。第四十八页,共135页。Controller-Windows资源性能常用计数器%TotalProcessorTime该计数器用于体现服务器整体的处理器利用率,对应多

处理器系统而言,该计数器体现的是所有CPU的平均利用率,如果该值的数值持续超过90%,则可以说明整体系统面临处理器方面的瓶颈,需要通过增加处理器来提供性能。Operation/sec计算机对文件系统进行读取和写入操作的频率,但是不包括文件控制操作。ProcessQueueLength线程在等待分配CPU资源所排队列的长度,此长度不包括正在占用CPU资源的线程。如果该队列长度大于处理器个数+1,就表示处理器有可能处于阻塞状态(参考值:<=处理器个数+1)第四十九页,共135页。Controller-Windows资源性能常用计数器%ProcessTimeCPU利用率,该计数器最为常用,可以查看处理器是否处于饱和状态,如果该值持续超过95%,就表示当前系统的瓶颈为CPU,可以考虑增加一个处理器或更换一个性能更好的处理器。(参考值:<80%)%PriviliageTimeCPU在特权模式下处理器所花的时间百分比。一般的系统服务,进程管理,内存管理等一线由OS自行启动的进程属于这类。%UserTime与%PriviliageTime计数器正好相反,指的是在用户状态摸上下(非特权模式)的操作所花的时间百分比。%DPCTime处理器在网络处理上消耗的时间,该值越低越好。PrivateBytes进程无法与其他进程共享的字节数量。该计数器的值较大时,有可能是内存泄漏的信号。第五十页,共135页。Controller-Windows资源性能常用计数器Workset最近处理线程使用的内存页。PageFaults/sec每秒钟处理错误页数,当处理器在内存中读取某一页出现错误时,就会产生缺页中断,也就是pagefault。如果这个页位于内存的其他位置,这种错误称为软错误,如果这个页位于硬盘上,必须从硬盘重新读取,这个错误称为硬错误。硬错误会使系统的运行效率很快降下来。PageInput/sec

表示为了解决硬错误而写入硬盘的页数(参考值:>=pagereads/sec)。PageReads/sec表示为了解决音频错误而从硬盘读取的页数。Page/sec

表示为了解决音频错误而从硬盘上读取或写入硬盘的页数(参考值:0-20)。第五十一页,共135页。Controller-Windows资源性能常用计数器AvailableMbytes剩余的可用物理内存,单位是兆字节(参考值:>=10%)。CatheBytes文件系统的缓存(默认为50%的可用物理内存)。%DiskTime表示磁盘驱动器为读取或写入请求提供服务所用的时间百分比,如果%DiskTime比较大,硬盘有可能是瓶颈。AverageDiskQueueLength表示磁盘读取和写入请求提供服务所用的时间百分比,可用通过增加磁盘构造磁盘阵列来提供性能(参考值:<=磁盘数x2)。AverageDiskwritequeueLength表示磁盘写入请求的平均数。AverageDisksec/read磁盘中读取数据的平均时间,单位是s第五十二页,共135页。Controller-Windows资源性能常用计数器AvailableDisksec/Transer磁盘中写入数据的平均时间,单位是s。ByteTotal/sec表示网络中接收和发送字节的速度,可以用该计数器来判断网络是否存在瓶颈(参考值:该计数器和网络带宽相除,<50%)。第五十三页,共135页。Controller-资源评价表性能项资源评价CPU占用率70%好85%坏90%很差磁盘I/O<30%好<40%坏<50%+很差网络<30%带宽好运行队列<2*CPU数量好内存没有页交换好每个CPU每秒10个页交换坏更多的页交换很差第五十四页,共135页。Controller-运行手工场景具体观看演示。第五十五页,共135页。Controller-运行目标场景具体观看演示。第五十六页,共135页。Controller-集合点设置集合点的含义:当通过Controller虚拟多个用户执行该脚本时,用户的启动或运行步骤不一定都是同步的。集合点是在某处设置一个标记,当有虚拟用户运行到这个标记处时,停下来等待,直到所有的用户都达到这个标记处时,再一同进行下面的步骤,这样能够用最大的用户并发去做下面的操作,就像集合再前进一样,集合点之名由此而得。集合点主要用于对关键步骤的加压。插入集合点的目的:集合点的用处对于LoadRunner来说意义非常大,它可以设置多个虚拟用户等待到一个点,同时触发一个事务,以达到模拟真实环境下同时多个用户操作(如果购物网站的秒杀等业务),同时模拟负载,实现性能测试的最终目的。由此可见插入集合点主要是为了衡量在加重负载的情况下服务器的性能情况,从而找到性能瓶颈。可以把集合点理解成是一种特殊情况下的并发。第五十七页,共135页。Controller-集合点设置插入集合点菜单:Insert/Rendezvous第五十八页,共135页。Controller-集合点设置使用集合点菜单:Scenario/Rendezvous第五十九页,共135页。Controller-IP欺骗什么是IP欺骗:IP地址欺骗是指用户操作产生的IP数据包为伪造的源IP地址,以便冒充其他系统或发件人的身份。这是一种黑客的攻击形式,黑客使用一台计算机上网,而借用另外一台机器的IP地址,从而冒充另外一台机器与服务器打交道。为什么要用IP欺骗:1、当某个Ip的访问过于频繁或访问量过大时,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量,已达到压力测试的效果。2、某些服务器配置了负载均衡,使用同一个IP不能测出系统的实际性能。LR中的IP欺骗通过调用不同的IP,可以很大程度上的模拟实际使用中多

IP访问和并发,测试服务器均衡处理的能力。3、有一些网站会限制同一个用户同一个IP等登录,为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的IP访问同一网站。第六十页,共135页。Controller-IP欺骗的设置先将测试端电脑的IP地址设置为静态IP,不要使用DHCP方式。第六十一页,共135页。Controller-IP欺骗的验证1、将服务器的IP设置为真实IP2、添加事务第六十二页,共135页。Controller-IP欺骗的验证3、开启扩展日志4、以线程的方式运行第六十三页,共135页。Controller-IP欺骗的验证6、启用IP欺骗7、启用专家模式8、以线程方式运行第六十四页,共135页。Controller-IP欺骗的验证第六十五页,共135页。Controller-IP欺骗的注意事项1、虚拟IP是同一个Generator上的多个IP,这种分配过程由Controller自动来进行。2、对于同一个Generator,模拟的用户数量多于IP数量时,将会发生IP重复

的现象,否则将随机分配不同的IP。3、对于同一个Generator,以其某一个IP添加到Generator中即可,不需要

不同的IP添加多次。4、IP欺骗设置前主机IP为固定的IP,测试完成之后要释放掉IP。第六十六页,共135页。Controller-服务水平协议SLASLA是为负载测试场景定义的具体目标。例如测评脚本中任意数量事务的平均响应时间,可以定义具体的目标或阀值。测试运行结束后,LoadRunner将定义的目标与实际录制的平均事务响应时间进行比较。如果实际的平均事务响应时间未超过定义的阀值,SLA状态将为通过,否则为不通过。作为目标定义的一部分,可以指示SLA将负载条件考虑在内。这意味着可接受的阀值将依据负载级别而有所更改(例如,运行的Vuser数、吞吐量等)。随着负载的增加,可以允许更大的阀值。第六十七页,共135页。Controller-服务水平协议SLASLA与面向目标场景的主要区别是前者有一定的调整幅度,而面向目标创建时具体的目标设定。第六十八页,共135页。Controller-LR常用函数(事务函数)Lr_start_transaction();//标记事务的开始Lr_end_transaction();//标记事务的结束,一般情况下,事务开始与结束联合使用。Lr_get_trans_instance_status();//得到事务的状态,当事务由许多步骤组成或可能

存在导致事务失败的执行点,这个函数非常有用

,可以通过检查状态和终止Vuser,可以避免不

必要的活动。Lr_get_transaction_think_time();//得到事务的指定思考时间。Lr_stop_transaction();//停止事务,该事务函数返回当前事务的持续时间,以毫秒

为单位,当为错误时返回一个负数。第六十九页,共135页。Controller-LR常用函数(日志函数)Lr_debug_message();//发送调试信息到日志文件,这个函数将返回设定的字符,

不包括终止null字符,错误时返回一个负值。Lr_get_debug_message();//返回当前调试的信息,其返回值时依据不同日志设置

返回不同的值。Lr_error_message();//发送错误信息到LR输出窗口或日志文件里,如果这个函数

成功,返回发送的消息长度,如果失败返回一个负数。Lr_log_message();//发送信息到用户日志文件,如果这个函数成功,返回发送的消息长度,失败返回一个负数。Lr_output_message();//发送信息到输出窗口或日志文件。Lr_vuser_status_message();//发送虚拟用户的状态到lr的Controller,如果成功返

回0,如果事务名字是非法的或如果和lr_start_transaction事务开始名称不同是,返回1。第七十页,共135页。Controller-LR常用函数(运行时函数)Lr_abort();//终止执行的脚本,它能停止执行action部分,vuser_end部分,以及

结束脚本执行,当需要手动终止运行的一个特定的错误条件可以使用

这个函数,当结束运行使用此函数时,状态是停止。Lr_continue_on_error();//当发生错误后运行的事件,参数为1表示发生错误继续

运行脚本,参数为0表示取消出错继续运行脚本。Lr_exit();//该函数允许运行中退出脚本,在声明该函数的事务退出后不会出现在

Controller的事务状态集合中,也不会被计入到通过和失败的事务中。Lr_think_time();//设置思考时间,在性能测试中为了更好模拟用户操作,可以依据

实际生产环境设置思考时间。Lr_rendezous();//集合点,可以设置虚拟用户相同操作之前进行集合,通过集合点

可以增加被测应用的压力,从而达到压力测试的目的。Lr_load_dll();//调用DLL文件,这个函数执行成功,将返回0,如果导致内存溢出条

件返回10,如果文件不存在,返回11。第七十一页,共135页。Analysis-简介Analysis的功能是对测试结果进行查看、分析和比较。LoadRunnerResults文件和AnalysisSessionFiles的区别,LoadRunnerResults是Controller运行后的结果文件,AnalysisSessionFiles是Analysis保存的分析会话文件。演示…第七十二页,共135页。Analysis-报告摘要(SLA分析)演示…第七十三页,共135页。Analysis-事务摘要分析演示…第七十四页,共135页。Analysis-图表过滤与分组依据演示…第七十五页,共135页。Analysis-图表调整操作演示…第七十六页,共135页。Analysis-合并图表演示…第七十七页,共135页。Analysis-图例操作演示…第七十八页,共135页。Analysis-性能图表分析AverageTransactionResponseTime(事务平均响应时间)显示得是测试场景运行期间每一秒钟内事务执行所用的平均时间,通过它可以分析测试场景运行期间应用系统的性能走向。例如随着测试时间的变化,系统处理事务的速度开始逐渐变慢,这说明应用系统随着时间的变化,整体性能将会有下降的趋势。运行Vuser事务平均响应时间合并关联图通过合并图可以分析随着用户数量的变化,各个事务平均响应时间的变化,从而可以得出各个事务在指定时间内的最大用户的并发用户数。每秒点击次数(HitsperSecond)是Vuser每秒向Web服务器提交的HTTp请求数。查看其曲线情况可以判断被测系统是否稳定,曲线呈下降趋势表明Web服务器的响应速度在变慢,其原因可能是服务器瓶颈问题,也有可能是Vusers数量减少,访问服务器的HTTP请求减少。第七十九页,共135页。Analysis-性能图表分析吞吐量(Throughput)表示服务器在任意时间的吞吐能力,即任意时间服务器发送给Vusers的流量。其是度量服务器性能的重要指标,度量单位是字节,也有兆字节。运行Vuser吞吐量合并关联图并发用户数和吞吐量瓶颈之间存在一定的关联,(在网络和服务器正常情况下,随着并发用户数增加,网络吞吐量也会增加,因此可以通过不断增加用户数和吞吐量观察系统的性能瓶颈。然后从网络、数据库、应用服务器和代码本身等4个环节确定系统的性能瓶颈)。HitsperSecondThroughput合并关联图在比较吞吐量和每秒点击率中可以获得服务器在执行过程中的情况。如果服务器如预期的一样在执行,那么吞吐量会随着每秒的点击量的增加而增加。这是期望实现的情况,因为点击增加一次就会需要服务器发送更多的返回信息给用户。如果点击的次数增加而吞吐量恒定或是减少,就说明服务器无法执行增加的请求,结果就是事务反应时间的增加。第八十页,共135页。Analysis-性能图表分析HTTPResponseperSecond(每秒HTTP响应数)显示运动场景过程中每秒从Web服务器返回的不同HTTP状态代码的数量,还能返回各类状态码信息,通过分析状态码,可以判断服务器在压力下的运行情况,也可以通过对图中显示得结果进行分组,从而定位生成错误的代码脚本,常见的HTTP状态返回码如下:200成功服务器已成功处理请求。通常表示服务器提供了请求数据或页面。201已创建请求成功并服务器创建了新的资源。202已接受服务器已接受请求,但尚未处理。203非授权信息服务器成功处理了请求,但返回的信息可能来自另一来源。204无内容服务器成功处理请求,但没有返回任何内容。205重置内容服务器成功处理了请求,但没有返回任何内容。部分内容服务器成功处理了部分GET请求。永久移动

请求的网页已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的

响应)时,会自动将请求者转到新位置。未找到服务器找不到请求的网页。500服务器内部错误服务器遇到错误,无法完成请求。第八十一页,共135页。Analysis-页面细分在平均事务响应时间图表中点击:演示…第八十二页,共135页。Analysis-系统资源分析1、内存分析方法:内存分析方法主要是用于判断系统有无遇到内存瓶颈,是否需要通过增加内存等手段提供系统的性能表现。主要计数器包括Memory和PhysicalDisk类别的计数器。内存分析的主要步骤和方法如下:

(1)首先查看AvailableMbytes指标

该值用于描述系统可用内存的直接指标,在对系统进行操作级别的内存分析

时,首先应通过该值建立一个初步的印象,了解性能系统测试过程中,系统

是否仍然有足够的内存可用。

如果该指标的数据比较小,系统可能出现内存方面的问题。

(2)注意pages/sec、pagesread/sec和pagefaults/sec

操作系统经常会使用磁盘交换的方式来提高系统可用的内存量或是提高内存的

使用效率。这三个指标直接反应了操作系统进行磁盘交换的频道。

第八十三页,共135页。Analysis-系统资源分析如果page/sec的计数持续高于几百,很有可能存在内存方面的问题,但其值

很大不一定表示内存有问题,而可能是运行使用内存映射文件的程序所致。

pageFaults/sec说明了每秒发生页面失效的次数,页面失效次数越多,说明

操作系统向内存中读取的次数越多。此时还需要查看pageread/sec计数器,

该计数器阀值为5,如果超过5,则可以判定存在内存方面的问题。

(3)依据physicalDisk计数器的值分析性能瓶颈

对于PhysicalDisk计数器的分析包括pagesread/sec和%DiskTime及Average

DiskQueueLength的分析。如果pagesread/sec很低,同时%DiskTime和AverageDiskQueueLength的值很高,则可能有磁盘瓶颈。但是如果AverageDiskQueueLength增加的同时pagesread/sec并未降低,则是由于内存不足。

第八十四页,共135页。Analysis-系统资源分析2、处理器分析方法:处理器(CPU)也可能是系统的瓶颈,对处理器进行性能分析的步骤如下:

(1)首先查看%TotalProcessorTime性能计数器的计数值

该值用于体现服务器整体的处理器利用率,对多处理器的系统而言,该值体

现的是所有CPU的平均利用率。如果该值的数值持续超过90%,则说明整个

系统面临处理器的瓶颈,需要增加处理器来提供性能。注意:由于操作系统本身特性,在某些多CPU系统中该数据本身并不大,但

此时CPU之间的负载状况极不均衡,此时也应该视为系统产生了处理

器方面的瓶颈。

(2)其次查看每个CPU的%processortime和%usertime和%privilegedtime%usertime是指系统的非核心操作消耗的cpu时间,如果该值较大,可以考虑

是否通过算法优化等方法降低该值,如果服务器是数据库服务器,processortime和%usertime值大的原因可能是数据库的排序函数操作消耗了cpu,优化数据库。

第八十五页,共135页。Analysis-系统资源分析

(3)研究系统处理器瓶颈

查看processorqueueLength计数器的值,当该值大于CPU数量的总数+1时,

说明产生了处理器阻塞。如果该值持续超过95%,就表示当前系统的瓶颈为CPU

,可以考虑增加一个处理器或更换一个性能更好的处理。(参考值:<80%)%DPCTime是另一个需要关注的内容,该值越低越好,在多系统处理中,如果

这个值大于50%并且Processor\%ProcessorTime非常高,加入一个网卡可能会

提高性能。

第八十六页,共135页。Analysis-导出分析报告演示…第八十七页,共135页。Analysis-编写测试报告使用我中心的效率测试报告进行讲解…第八十八页,共135页。JMeter是什么:ApacheJmeter是Apache组织的开源代码项目,是一个纯java桌面应用,用于压力测试和性能测量。它最初被设计用于Web应用测试但后来扩展到其他测试领域。JMeter有什么用:可以用于对静态和动态的资源(文件、Servlet、Perl脚本、java对象、数据库和查询、FTP服务器或其他资源)的性能进行测试,可以用于分析不同压力条件下的总体性能情况,也可以使用Jmeter提供的图形化界面,分析性能指标或者在高负载情况下测试服务器、脚本和对象。JMeter介绍第八十九页,共135页。LR与JMeter的区别JMeter介绍LoadRunnerJMeter安装卸载比较麻烦,文件体积大比较简单,文件体积小脚本录制支持支持参数化支持支持集合点支持支持检查点支持支持关联支持支持多协议支持支持IP欺骗支持不支持多线程支持支持报告生成与导出支持支持测试成本商业软件,成本高开源软件,成本低第九十页,共135页。1、安装配置好JDK2、JMeter下载地址http:///download_jmeter.cgi下载后,解压文件到任意目录,避免在一个有空格的路径安装JMeter,这将导致远程测试出现问题。JMeter安装第九十一页,共135页。JMeter文件目录介绍bin目录:

jmeter.bat:windows下的启动文件jmeter.log:日志文件

jmeter.sh:linux下的启动文件

perties:系统配置文件jmeter-server.bat:windows分布式测试要用到的服务器配置

jmeter-server:linux分布式测试要用到的服务器配置docs目录:接口文档目录。extras目录:扩展插件目录。lib目录:所用到的插件目录,里面的全是jar包,Jmeter会自动在JMETER_HOME

/lib和ext目录下寻找需要的类。license目录:jmeter证书目录。printable_docs:用户使用手册。第九十二页,共135页。JMeter功能概要JMeter组成部分:资源生成器:用于生成测试过程中服务器、负载机的资源代码。(LR中的VuGen)用户运行器:脚本运行引擎,根据脚本要求模拟指定的用户行为。(LR中的Controller)报表生成器:根据测试中实时的数据生成报表,提供可视化的数据显示方式。(Analysis)负载发生器:用于产生负载,通常以多线程或多进程方式模拟用户行为。(loadGenerator)测试计划:用于描述一个性能测试,包含与本次性能测试所有相关的功能。也就是说性能测试的所有

内容是基于一个计划的。(相当于LR的一个测试场景)第九十三页,共135页。JMeter功能概要setupThreadGroup:一种特殊类型的ThreadGroup,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件,不同是这些类型的线程执行测试前进行定期线程组的执行。类似LR中的init()。TeardownThreadGroup:一种特殊类型的ThreadGroup,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件,不同是这些线程执行测试结束后执行定期的线程组。类似LR中的end()。ThreadGroup(线程组):这个就是通常添加运行的线程。可用看做一个虚拟用户组,线程组中的每个线程都可用理解为一个虚拟用户。线程中包含的线程数量在测试执行过程中发生改变。类型LR中的action()。第九十四页,共135页。JMeter测试片段测试片段(TestFragment):是控制器上的一个特殊的线程组,它在测试树上与线程组处于一个层级。它与线程组有所不同,因为它不被执行,除非它是一个模块控制器或者是被控制器所引用时才会被执行。第九十五页,共135页。JMeter8类可执行元件配置元件(Configelement):用于提供对静态数据配置的支持。如CSVDataSetconfig可以将本地数据文件形成数据池datapool。定时器(Timer):用于操作之间设置等待时间,等待时间是性能测试中常用的控制客户端QPS的手段。类似于LoadRunner里面的思考时间,Jmeter定义了

BeanShellTimer、ConstantThroughputTimer、固定定时器等不同

类型的Timer。前置处理器(PerProcessors):用于在实际的请求发出之前对即将发出的请求进行特殊

处理。例如HTTPURL重写修复符,则可以实现URL重写,当URL中有sessionID一类的session信息时,可以

通过该处理器填充发出请求的实际的SessionID。后置处理器(PostProcessors):用于对Sampler发出请求后得到的服务器响应进行处理

。一般用来提取响应中特定数据(类似LR中的关联)。断言(Assertion):用于检查测试中得到的相应数据等是否符合预期,断言一般用来设置

检查点,用以保证性能测试过程中的数据交互是否与预期一致。第九十六页,共135页。JMeter8类可执行元件监听器(Listener):用于对测试结果数据进行处理和可视化展示的一系列元件。图形结果、查看结果树、聚合报告。都是常用到的元件。注意:这个

监听器不是用来监听系统资源的元件。取样器(Sampler):用于向服务器发送请求,记录响应信息,记录响应时间的最小单

元,Jmeter原生支持多种不同的Sampler,例如HTTPRequest

Sampler、Sampler、TCPRequestSampler、JDBC

RequestSampler等。每一种不同类型的Sampler可以根据设置的

参数向服务器发出不同类型的请求。逻辑控制器(Sample):包括两类元件,一类是用于控制testplan中的sampler节点发送

请求的逻辑顺序的控制器,常用的有if控制器、switch

Controller、runtimeController、循环控制器等。另一来是用来

组织可控制sampler节点的,如事务控制器、吞吐量控制等。第九十七页,共135页。JMeter录制脚本以访问百度()为例演示…第九十八页,共135页。JMeter录制脚本以访问Webtours(LoadRunner自带的网站)为例。首先需要设置代理服务器,操作如下:创建一个线程组(右键点击“测试计划”->“添加”->“线程组”)创建一个http代理服务器(右键点击“工作台”->“添加”->“非测试元件”->“http代理服务器”),设置完成后,点击“启动”启动。IE需要设置代理服务器,IE->“Internet属性”->“连接”->“局域网设置”演示…第九十九页,共135页。Jmeter–Badboy与Jmeter配合进行脚本录制使用代理录制,不是很方便,推荐使用Badboy工具配合进行录制。下载地址:Badboy是一个强大的工具,可以帮助测试和开发复杂的动态应用。Badboy包括一个简单而全面的捕获/回放界面,强大的负载测试的支持,详细报告图表等等,从而使Web测试和开发变得更加容易。Badboy录制后导出脚本Jmeter使用Badboy的脚本第一百页,共135页。JMeter–Badboy检查点检查点的设置:选择要检查的文字,然后在Tools->AddAssertionforSelection里添加断言,再回放。第一百零一页,共135页。JMeter–Badboy参数化1、选择要参数化的内容2、添加变量第一百零二页,共135页。JMeter–Badboy参数化3、为变量做替换4、设置step循环演示…第一百零三页,共135页。JMeter–基础实践测试需求:测试20个用户访问百度https:///

在负载达到30QPS时的平均响应时间。QPS:QueryPerSecond每秒查询率,是一台查询服务器每秒能够处理的查询次数。在网上作为域名系统服务器的性能经常用每秒查询率来衡量其性能。测试步骤:1、添加线程组

线程组主要包含三个参数:线程数、准备时长(Ramp-UpPeriod(insecond

))、循环次数。

线程数:虚拟用户数。一个虚拟用户占用一个进程或线程。设置多个虚拟用户

数在这里也就是设置多个线程数。

准备时长(单位为s):设置的虚拟用户数需要多长时间全部启动。如果线程

数为20,准备时长为10,那么需要10秒钟启动20个线

程。也就是每秒启动2个线程。第一百零四页,共135页。JMeter–基础实践循环次数:每个线程发送请求的次数。如果线程数为20,循环次数为5,那么

每个线程发送5次请求,总请求数为20*5=100。如果勾选了“永远”,那么所有线程会一直发请求,一直到选择停止运行脚本。2、添加HTTP请求

在线程组上点击“添加”->“Sampler”->“HTTP请求”。

名称:本属性用于标识一个取样器,建议使用一个有意义的名称。

注释:对于测试没有任何作用,仅用户记录用户可读的注释信息。

服务器名称或IP:HTTP请求发送的目标服务器名称或IP地址。

端口号:目标服务器的端口,默认值为80。

Timeouts(milliseconds):设置请求和响应的超时时间。

协议:向目标服务器发送HTTP请求时的协议,可以是http或是https,默认为

http协议。

第一百零五页,共135页。JMeter–基础实践方法:发送HTTP请求的方法,可用方法包括GET、POST、HEAD、PUT、

OPTIONS、TRACE、DELETE、PATCH等等。

Contentencoding:内容的编码方式,默认值为is8859。

路径:目标URL路径(不包括服务器地址和端口)。自动重定向:如果选择该选项,当发生HTTP请求后得到的响应是302/301

时,Jmeter自动重定向到新的页面。

UsekeepAlive:当该选项被选中时,Jmeter和目标服务器之间使用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论