主讲:王春梅性能测试培训培训内容本次培训主要内容:●性能测试理论●脚本录制●场景设置●性能分析性能测试•性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。性能测试的分类•性能测试类型包括负载测试,强度测试,容量测试等•负载测试:负载测试是一种性能测试,指数据在超负荷环境中运行,程序是否能够承担。•强度测试:强度测试是一种性能测试,他在系统资源特别低的情况下软件系统运行情况。•容量测试:确定系统可处理同时在线的最大用户数测试流程•目标计划:•创建Vuser脚本:•定义场景:•运行场景:•监测场景:•分析结果:测试工具-loadrunner8.0Loadrunner工具是一种预测系统行为和性能的工业标准级负载测试工具,通过以模拟大量用户实施并发,性能监测来确认和查找问题现在软件的复杂程度以某种惊人的速度在增加,那么性能测试是量化和减少业务风险中最常见的策略.MercuryLoadrunner是现在最流行的性能自动测试工具之一.LR脚本■录制脚本流程及脚本结构■录制脚本选项■脚本中插入事务、集合点、检查点及参数化创建测试脚本的工作流程•创建测试脚本的工作流程Plan:规划Record:录制:(可手工开发但是基于WEB的系统工作量太大)Enhance:增强(加检查点等)Test:回放(目的在于验证脚本录制是否正确)planrecordenhancetest录制脚本的过程•新建-选择协议-设置录制选项-按计划操作系统-停止录入-保存NewvirtualuserStartrecordingnewApplicationtypeProgramtorecordURLadressWorkingdirectoryRecordintoactionPlannedoperationstopsaveStartrecording–设置录制选项•Applicationtype:IE、win32(自己编的Clientserver的程序但是也是基于HTTP协议的。)Startrecording–设置录制选项•Programtorecord:浏览器的可执行文件—如果想用其他浏览器就把浏览器的可执行文件的路径找到即可,比如IE的,C:\WINDOWS\explorer.exe•URLadress:录制脚本的网址•Workingdirectory:缺省值不用管•Recordintoaction:initactionend三个函数,头和尾只执行一次,action重复执行。LR是怎么录制脚本的•截获客户端和服务器端之间的通讯包。通常的测试工具录制脚本有一共有两种方式。Sniffer的方法:利用以太网(局域网)的广播特性。(客户端和服务器在同一个网段不能跨网段)Proxy的方法(代理的方式):更加有通用性。LR采用的就是此种方式。(客户端发出请求给—VUG—转发给服务器,从而VUG捕获客户端可服务器之间的通讯包。)录制的测试脚本的规律•脚本的语句是按照“发-收-发-收”的次序排列(客户端先有发出请求,提供服务者接受请求,再回馈给客户端。)•脚本是顺序执行的,没有分支判断和循环。•以上两种规律适用于任何协议的录制脚本。脚本结构•三个函数:init、action、endstartVuser_initactionVuser_endendVuser_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邮件系统,此邮件系统有个限制,即