资源描述
主讲:王春梅,性能测试培训,培训内容,本次培训主要内容:性能测试理论脚本录制场景设置性能分析,性能测试,性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。,性能测试的分类,性能测试类型包括负载测试,强度测试,容量测试等负载测试:负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。强度测试:强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。容量测试:确定系统可处理同时在线的最大用户数,测试流程,目标计划:创建Vuser脚本:定义场景:运行场景:监测场景:分析结果:,测试工具-loadrunner8.0,Loadrunner工具是一种预测系统行为和性能的工业标准级负载测试工具,通过以模拟大量用户实施并发,性能监测来确认和查找问题现在软件的复杂程度以某种惊人的速度在增加,那么性能测试是量化和减少业务风险中最常见的策略.MercuryLoadrunner是现在最流行的性能自动测试工具之一,LR脚本,录制脚本流程及脚本结构录制脚本选项脚本中插入事务、集合点、检查点及参数化,创建测试脚本的工作流程,创建测试脚本的工作流程,Plan:规划Record:录制:(可手工开发但是基于WEB的系统工作量太大)Enhance:增强(加检查点等)Test:回放(目的在于验证脚本录制是否正确),plan,record,enhance,test,录制脚本的过程,新建-选择协议-设置录制选项-按计划操作系统-停止录入-保存,Newvirtualuser,Startrecording,new,Applicationtype,Programtorecord,URLadress,Workingdirectory,Recordintoaction,Plannedoperation,stop,save,Startrecording设置录制选项,Applicationtype:IE、win32(自己编的Clientserver的程序但是也是基于HTTP协议的。),Startrecording设置录制选项,Programtorecord:浏览器的可执行文件如果想用其他浏览器就把浏览器的可执行文件的路径找到即可,比如IE的,C:WINDOWSexplorer.exeURLadress:录制脚本的网址Workingdirectory:缺省值不用管Recordintoaction:initactionend三个函数,头和尾只执行一次,action重复执行。,LR是怎么录制脚本的,截获客户端和服务器端之间的通讯包。通常的测试工具录制脚本有一共有两种方式。Sniffer的方法:利用以太网(局域网)的广播特性。(客户端和服务器在同一个网段不能跨网段)Proxy的方法(代理的方式):更加有通用性。LR采用的就是此种方式。(客户端发出请求给VUG转发给服务器,从而VUG捕获客户端可服务器之间的通讯包。),录制的测试脚本的规律,脚本的语句是按照“发-收-发-收”的次序排列(客户端先有发出请求,提供服务者接受请求,再回馈给客户端。)脚本是顺序执行的,没有分支判断和循环。以上两种规律适用于任何协议的录制脚本。,脚本结构,三个函数:init、action、end,start,Vuser_init,action,Vuser_end,end,Vuser_Init:脚本启动时运行一次Action:脚本的主体函数,可以运行任意次,由runtimesetting进行设置。Vuser_End:脚本退出时运行一次(回放),VUG回放脚本的目的,确定是否好用:标准:如果能正常的向数据库发出请求并正常的得到回应。是否达到正常的目的。(发出请求是否正常)当录制是业务的流程时,脚本比较多,确保脚本好用,录制基本的用户脚本,录制基本的用户脚本,协议,协议:其实就是客户端和服务器端之间的通讯方式(通讯语言)。例子:不同的客户端和不同的服务器之间的通讯方式是不一样的,比如中国与外部国家用英语进行沟通,这个英语就是一种通讯的方式,也可以叫做协议。,录制基本的用户脚本,在此可执行循环Init。end不可,录制基本的用户脚本,录制基本的用户脚本,顺序性,可有多个,可执行多次,录制基本的用户脚本,脚本中采用HTML页面的形式来表示,录制基本的用户脚本,录制基本的用户脚本,录制基本的用户脚本,完善测试脚本,当录制完一个基本的用户脚本后,在正式使用前我们还需要完善测试脚本,增强脚本的灵活性。一般情况下,我们通过以下方法来完善测试脚本。,Loadrunner中的事务,定义:事务又称为Transaction,事务(Transaction)是这样一个点,我们为了衡量某个action(动作)的性能,需要在action的开始和结束位置插入这样一个“范围”,这就定义了一个transaction。,事务的作用,例子:瘸子走路,判断哪条腿是残疾,判断的依据:时间-两条腿迈步的时间,那条腿慢就说明哪条腿有问题。,事务的作用,loadrunner运行到该事务的开始点时,loadrunner就会开始计时,直到运行到该事务的结束点,计时结束。这个事务的运行时间在loadrunner的运行结果中会有反映。通俗的讲loadrunner中的事务就是一个计时标识,loadrunner在运行过程中一旦发现事务的开始标识,就开始计时,一旦发现事务的结束表示,则计时结束,这个过程中得到的时间即为一个事务时间。通常事务时间所反映的是一个操作过程的响应时间。,为什么在LR中使用事务,1、事务是loadrunner度量系统性能指标的唯一手段;(没有事务则没有办法衡量系统的响应时间,也许有人说loadrunner可以通过编程来计时得到,不错如果你编程能力够强是能够实现的,但肯定不如loadrunner中的事务用的简单而且方便),为什么在LR中使用事务,2、事务能够用于度量高风险业务流程的性能指标;3、事务能够度量在一组操作中每一步的性能指标;4、通过事务计时实现了不同压力负载下的性能指标对比;5、通过事务计时可以帮助定位性能瓶颈;,使用事务的方法,方法一:脚本生成后,手动插入事务;方法:在loadrunner脚本中点击鼠标:右键,选择“Insert”“StartTransaction”弹出一个对话框,输入一个事务名字(注:事务名字可以为中文、可以为英文,也可以中英文混合,但推荐的做法是起一个容易理解的名称,例如想知道登录所花费的时间,则插入事务可以命名为login或登录);,使用事务的方法,“StartTransaction”插入完成后,还需要插入一个“EndTransaction”,用以标识事务结束;注:StartTransaction和EndTransaction需要成对出现,如果仅插入StartTransaction则脚本编译会提示错误;此外,还可以通过loadrunnervixen中的“Insert”菜单插入StartTransaction和EndTransaction;,使用事务的方法,2、方法二:在脚本录制过程中插入StartTransaction和EndTransaction;在脚本录制过程中,通过录制工具条上的StartTransaction和EndTransaction图标插入事务,如下图所示:,使用事务的方法,3、方法三:通过Run-timeSettings中的AutomaticTransactions自动生成事务,如下图所示:,使用事务的方法,注:该种方法插入的事务仅能在loadrunnerController中的图表和报告中看到在脚本的log中看不到。以上为事务的插入方法,无论是那种方法,插入事务后,我们都可以在脚本中看到如下两个函数:lr_start_transaction(事务)和lr_end_transaction(事务,LR_AUTO),前一个为事务开始函数,后一个为事务结束函数,括号中引号中的内容为事务名称。,插入集合点,插入集合点是为了衡量在加重负载的情况下服务器的性能情况注意:集合点经常和事务结合起来使用。集合点只能插入到Action部分,vuser_init和vuser_end中不能插入集合点。,集合点,定义:在事务中,用户集体并发的点。要素:1、必须在action函数中插集合点2、必须在事务开始点之前插集合点目的:检测某一事务什么时候设集合点:1、有并发事务2、担心进程不能同时启动,可以用这个集合函数来做限制。例子:例如两个线程,A先到了B没到,按照操作系统处理方式,时间切片上是先进先出的,不可能有什么并发,那么就设个锁,所以有的集合点,集合点,3、集合点是一种特殊情况下的并发,通常是在以调优为目的的性能测试中才会用得到,目的是有针对性地对某个可能存在性能问题的模块施压,以便找到性能。集合点例子:大家等在一个地方(食堂这个集合点),人都到了并且到开饭的时间(集合点的等待时间的结束点),集体吃饭。即,多个用户,同一时刻,执行同一个事务。,集合点的作用,集合点可以控制各个vuser在同一时刻执行任务。借助集合点,可以在LR中实现真正意义的完全一样的并发。问题:在实践中,我们经常会碰到这样的情况:测试需求说,该系统应支持200个并发用户。那么我们就开始测,录制好脚本,下一步就是在场景中执行了,在控制台中设置某脚本并发用户数为200,测试结果为通过或未通过。此时争议就来了:这200个用户的脚本如果执行通过,测试结果可以接受,是否可以说这个系统支持了200个并发呢?,并发,“并发用户数”、“系统用户数”和“同时在线用户数”。假设有一个OA系统,该系统有2000个使用用户这就是说,可能使用该OA系统的用户总数是2000名,这个概念就是“系统用户数”,该系统有一个“在线统计”功能(系统用一个全局变量记数所有已登录的用户),从在线统计功能中可以得到,最高峰时有500人在线(这个500就是一般所说的“同时在线人数”),那么,系统的并发用户数是多少呢?,Controller中设置集合点策略,Controller中设置集合点策略,参数化,含义:用参数来替换一些常量。作用:执行脚本时,vuser将使用指定数据源的值来替换参数。参数数据源:可以是一个文件;内部生成的变量;源于数据库中的查询结果。什么可以参数化:用户名,密码,日期,用户ID。即、数据库中存在的数据。例子:登陆,参数化,参数化,选择“Replacewithaparameter.”,出现以下窗口:,插入Text/Imag检查点,在进行压力测试时,为了检查Web服务器返回的网页是否正确,VuGen允许我们插入Text/Imag检查点,这些检查点验证网页上是否存在指定的Text或者Imag,还可以测试在比较大的压力测试环境中,被测的网站功能是否保持正确。插入检查点的步骤比较简单。添加Text/Imag检查点,可以在录制过程中,也可以在录制完成后。推荐该项。,检查点,含义:LR用来检查服务器端返回给客户端的结果是否正确的点。什么时候用:1、压力测试时,检查WEB服务器返回的网页结果是否正确。哪些可以设为检查点:文本或者图片检查点的作用:验证网页是否存在指定的的文本或者是图片。例子:213公交站牌,等待213班车。,为什么要插入检查点,为什么需要检查点LoadRunner的很多API函数的返回值会改变脚本的运行结果。比如web_find函数,如果它查找匹配的结果为空,它的返回值就是LR_FAIL,整个脚本的运行结果也将置为FAIL;反之,查找匹配成功,则web_find返回值是LR_PASS,整个脚本的运行结果置为PASS。而脚本的结果则反应在Controller的状态面板上和Analysis统计结果中。,为什么要插入检查点,web_image_check也是一个决定脚本运行结果的函数。但仅仅通过脚本函数执行结果来决定整个脚本的成功/失败,这未免太草率了。因为脚本往往是在执行一个业务流程,VU脚本函数本身是协议级的,它执行的失败会引起整个业务的失败,但它运行成功却未必意味着业务会成功。比如,我们要测100人登录一个Web邮件系统,此邮件系统有个限制,即不允许使用同一个IP登录两个用户。,为什么要插入检查点,显然,如果LoadRunner没有开启多IP欺骗功能的话,第一个虚拟用户登录成功后,第二个虚拟用户试图登录,系统将返回一个页面,提示用户“您已经登录本系统,请不要重复登录!”。在这种场景下,如果没有设检查点来判断这个页面,那么VU认为它已经成功地发送了请求,并接到了页面结果(http状态码为200,虽然是个错误页面)。这样VU就认为这个动作是成功的。但事实如我们所见,并非如此。因此我们要采用检查点来判断结果。,为什么要插入检查点,检查点(CheckPoint)并不是一个LoadRunner里专有的概念。在WinRunner和QTP中就有检查点。对于自动化测试来讲,检查点是一个很重要的功能,它的作用是验证程序的运行结果是否与预期结果相符。,Run-TimeSetting,Run-TimeSetting,Run-TimeSetting,运行测试脚本,经过以上的各个步骤后,脚本就可以运行了。运行脚本可以通过菜单或者工具栏来操作。VuGen先编译脚本,再运行。如果编译通过,就会开始运行。然后会出现运行结果。,创建运行场景,运行场景描述在测试活动中发生的各种事件。一个运行场景包括一个运行虚拟用户活动的LoadGenerator机器列表,一个测试脚本的列表以及大量的虚拟用户和虚拟用户组。创建运行场景使用Controller。在开始菜单中,启动Controller程序,出现“NewScenario”窗口,创建运行场景,创建运行场景,ManualScenario:该项要完全手动的设置场景。更加详细的信息,ManualScenariowithPercentageMode:该项只有在“ManualScenario”选中的情况下才能选择。选择该项后,在场景中我们需要定义要使用的虚拟用户的总数,LoadGeneratormachine机器集,然后我们为每一个脚本分配要运行的虚拟用户的百分比。,选择场景类型为ManualScenario,添加LoadGeneratorMachines设置虚拟用户总数设置Schedule设置结果文件保存路径设置集合点Run-TimeSetting,设置Schedule,设置Schedule,设置Schedule,设置Schedule,启用IPSpoofer(IP欺骗,当运行场景时,虚拟用户使用它们所在的LoadGenerator的固定的IP地址。同时每个LoadGenerator上运行大量的虚拟用户,这样就造成了大量的用户使用同一IP同时访问一个网站的情况,这种情况和实际运行的情况不符,并且有一些网站会根据用户IP来分配资源,这些网站会限制同一个IP的登陆,使用等等。为了更加真实的模拟实际情况,LoadRunner允许运行的虚拟用户使用不同的IP访问统一网站,这种技术称为“IP欺骗”。,启用IPSpoofer(IP欺骗,第一次运行IPWizard需要选择第一项“Createnewsettings”,如果以前运行过,可以选择第二项“Loadprevioussettingsfromfile”,选择保存好的文件;第三项用于使用IP欺骗进行测试完成后,释放IP的过程(因为该机会占用大量的IP资源,可能会导致其他机器没有IP可用的尴尬局面,使用该项,可以恢复到原来的状况)。在Controller的场景中,启用IPSpoofer即可,启用IPSpoofer(IP欺骗,分析以及监视场景,在运行过程中,可以监视各个服务器的运行情况(DataBaseServer、WebServer等)。监视场景通过添加性能计数器来实现。这一章非常的重要,确定系统瓶颈全靠它了。,性能指标,响应时间响应时间是反映完成某个业务所需要的时间。例如:从单击登陆按钮到登陆完成返回登陆成功页面需要消耗1秒钟,那么就说这个操作的响应时间是1秒,,性能指标,在性能测试中是通过事务函数来完成对响应时间的统计,事务是指做某件事情的操作,事务函数会记录开始做这件事情和该事情做完之间的时间差,使用transactionresponsetime这个词来说明,也称为事务响应时间。,性能指标,吞吐量吞吐量反映单位时间内能够处理的事务条目。例如对于系统来说一个用户登陆需要1秒钟,如果系统同时支持10个用户登陆,且相同时间是1秒,那么系统的吞吐量就是10个/秒。,性能指标,在性能测试工具中,吞吐量也被称为TPS(transactionpersecond,每秒事务数)也就是说在单位时间内能完成的事务数目。TPS的计算一般是通过的事务除以时间。,性能指标,服务器资源占用服务器资源占用反映在负载下系统的资源利用率。资源的占有率低,说明系统越优秀。资源并不仅仅指运行系统的硬件,而是支持整个系统运行程序的一切软硬件平台。例如CPU的占有率、内存使用率、查询cache命中率等。,性能指标,有调查统计,对于一个用户来说,如果访问某系统的响应时间小于2秒,那么用户会感觉系统很快,比较满意;如果访问某系统的响应时间在25秒,那么用户可以接受,但是对速度有些不满;如果系统的响应时间超过10秒,用户将无法接受。,性能指标,所以对于一个系统来说,需要尽可能保证每一个操作的响应时间控制在5秒以内,当然某些特殊的操作可能会大大超出这个响应时间,可以通过loadingbar的方式来提前告诉用户。,性能分析及调优,性能测试的目的是为了发现性能的瓶颈并解决。性能分析是为了确定导致性能瓶颈的原因,而调优就是用来解决性能瓶颈。提高某些手段来让系统的性能得到提升是性能调优的主要目的。,性能分析及调优,性能分析主要有以下两种方法:指标达成法将测试结果与客户需求进行比较,如果达成用户需要则测试通过,性能分析及调优,服务器资源利用率在满负荷的情况下,忙时的峰值CPU负载不超过75%,内存的占用不超过80%。,性能分析及调优,最优化分析方法通过分析消除系统性能瓶颈,使系统的处理能力最大化,系统资源实现充分利用。应用程序诊断,性能分析及调优,应用程序的诊断是性能测试的最初目的。通过模拟多用户操作形成的负载,检查应用程序是否能够满足用户性能需求。如果不能满足,则定为应用瓶颈,并寻找解决该瓶颈的方案,确保系统在修正后能够满足用户需求。对于一个项目来说,一般都以应用诊断为主。,性能分析及调优,系统调优性能测试的目的不是为了满足用户,而是超越自己,这个时候需要做的是让系统能够比以前更加优秀的运行,通过生成负载,对测试结果进行分析,并且准备大量的软硬件环境进行迭代测试,找出影响性能的要素,最终提升系统的性能。一般产品都会采用系统调优的方式逐步完善系统性能。,常见的性能瓶颈,硬件上的性能瓶颈一般指的是CPU、RAM方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)。,常见的性能瓶颈,例如确定了在数据库服务器上需要6个CPU、12GB内存。但是在测试时,发现CPU的持续利用率超过95%,这时可以认为在硬件上出现了性能瓶颈。,常见的性能瓶颈,应用软件上的性能瓶颈一般指的是应用服务器、web服务器等应用软件,还包括数据库系统。,常见的性能瓶颈,例如:在weblogic平台上配置了JDBC的连接池的参数,最大连接数为50,最小连接数为5,增加量为10。在测试时发现,当负载增加时,现有的连接数不足,系统会动态生成10个心的连接,导致交易处理的响应时间大大的增加。这时可以认为在应用软件上出现了性能瓶颈。,常见的性能瓶颈,应用程序上的性能瓶颈一般指的是开发人员新开发出来的应用程序。例如,某程序员开发了一个缴费处理程序。在测试时发现,这个缴费处理程序在处理用户的并发缴费请求时,只能串行处理,无法并行处理,导致缴费交易的处理响应时间非常长,这时就可以认为在应用程序上出现了性能瓶颈。,常见的性能瓶颈,操作系统上的性能瓶颈一般指的是windows、UNIX、Linux等操作系统。例如:在windows操作系统中,对某软件进行性能测试,出现物理内存不足时,如果虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加。这时就可以认为在操作系统上出现了性能瓶颈。,常见的性能瓶颈,网络设备上的性能瓶颈一般指的是防火墙、动态负载均衡器、交换机等设备。例如:在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的应用资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较轻的应用服务器上。在测试时发现,动态负载均衡机制没有起到相应的作用,这时可以认为在网络设备上出现了性能瓶颈。,利用Analysis分析结果,页面分解报表组合,利用Analysis分析结果,培训结束!,
展开阅读全文