1、软件性能测试狭义的性能测试是指在给定条件基准的前提下被测目标系统能达到的运行程度。测试被测目标系统在给定环境下的运行性能,度量其性能与预定义目标的差距。广义的性能测试则是压力测试、负载测试、强度测试、并发(用户)测试、大数据量测试、配置测试、可靠性测试等和性能相关的测试统称。1软件压力测试定义:在极限负载(大数据量、大量并发用户等)情况下的测试,查看应用系统在峰值使用情况下操作行为,以及当负载降低后系统的状态,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。分类:压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试稳定性压力测试和极限负载情况下导致系统崩溃的
2、破坏性压力测试破坏性压力测试。目的:发现在什么条件下系统的性能变得不可接受,并通过对应用程序施加越来越大的负载,直到发现应用程序性能下降的拐点。2几种性能测试间的区别负载测试:载重20吨,汽车是否能以100公里时速行驶;或者载重20吨,汽车的最快速度是多少。压力测试:在20吨、30吨、40吨的情况下,汽车是否还能正常行驶,当载重多少时汽车将无法行驶,当汽车无法行驶后减少载重量,汽车是否还能继续正常行驶。容量测试:如果要去汽车以时速100公里的速度行驶,最多可以载重多少吨。3为什么要实现性能测试自动化 自动化性能测试的核心是向预部署系统施加工作负载,同 时评估系统性能和最终用户体验。应用程序对目
3、标用户的响应是否足够迅速?应用程序是否能够游刃有余地处理预期用户负载?应用程序是否能够处理业务所需的事务数?在预期和非预期用户负载下应用程序是否稳定?是否能够确保用户在使用此应用程序时感到满意?4HPLoadRunner5LoadRunner工具使用1工具简介2工具方法论3VuGen的使用4Controller的使用5Analysis的使用6工具简介LoadRunner产品包括五个核心组件:VirtualUserGenerator:虚拟用户生成器虚拟用户生成器,简称VuGen,用来录制被测目标系统客户端的操作,并自动生成虚拟用户脚本。Controller:控制器控制器,它是整个负载测试的控制中
4、心,用来管理、设计、驱动及监控负载测试场景的执行以及被测目标系统的资源使用情况。LoadGenerator:负载生成器负载生成器,可以是压力机操作系统中的一个进程或线程,它执行虚拟用户脚本以模拟真实用户的行为对被测目标系统发出请求并接收响应,进而模拟真实的负载。Analysis:分析器分析器,它读取控制器收集的测试过程数据,分析负载测试的结果,进一步生成测试报告。Launcher:加载器加载器,负责提供一个集成的操作界面,从中测试人员可以启动LoadRunner的所有其他组件。7术语场景场景文件根据性能要求定义每次测试期间发生的事件。Vuser在场景中,LoadRunner用虚拟用户(或称 V
5、user)代替真实用户。Vuser模仿真实用户的操作来使用应用系统。一个场景可以包含数十、数百乃至数千个 Vuser。Vuser脚本Vuser脚本描述 Vuser在场景中执行的操作。由Init、Action、End三部分组成,其中在虚拟用户设置中可以让Action部分重复执行多次,而Init和End部分仅能执行1次。事务 要评测服务器性能,需要定义事务。事务代表要评测的终端用户业务流程。8术语系统用户数系统用户数Nu:使用被测目标系统的总人数在线用户数在线用户数Nou:高峰时同时访问被测目标系统在线人数并发用户数并发用户数Ncu:在同一时刻与服务器进行了交互的在线用户数三者存在如下关系:Nu
6、Nou Ncu9性能需求一个拥有4000员工的公司,需要开发一个仅供公司内部员工使用的办公自动化系统(OA系统),最高峰时有500人同时在线人同时在线。对于系统的典型用户来说,一天之内用户使用访问OA系统的平均时长为平均时长为4小时小时,通常用户仅会在8小时工作时间小时工作时间内访问该系统。那么,系统的并发用户数是多少呢?10给出了一个并发用户数的推导公式:11L为在线用户的平均会话时长,T为考察时间长度,为并发用户数的峰值。工具方法论1.测试计划:测试前要规划测试对象的性能需求,定义压力指标;2.脚本编制:捕获实际用户的业务操作流程,形成自动脚本;3.定义场景:设定所采用的负载方案、业务流程
7、组合和虚拟用户数量;4.执行场景:设定压力管理和执行压力场景,进行性能参数的监控;5.分析结果:使用分析器导出结果生成分析图表;分析结果;6.诊断结论:给出诊断结论;7.调优:针对诊断结果进行调优;12生成Vuser的流程录制业务流程修改强化脚本参数化关联检查点集合点事务化13参数化参数化的作用 通过将一组待提交的数据进行变量化来达到在脚本运行时引入多样数据的目的;14关联关联的作用 将执行过程中从服务端获取即时数据保存在某个变量中,在后续业务中进行提交的机制15检查点检查点的作用 从业务过程的角度检查用例结果是否正确;运行正确的两个层次:服务器响应正确;业务处理正确;HTTP状态码 16服务
8、响应正确不等于业务处理正确集合点集合点的作用 保证用户的绝对并发执行;在模拟多用户对业务流程进行操作时,能够模拟绝对的并发压力;17事务化事务化的作用LoadRunner中默认一个action是一个事务,统计事务处理时间是以整个action来统计。例如,脚本中包含用户登录用户登录、机票检索机票检索、订票订票、支付支付等活动,那么此时度量的结果是完成上述所有操作的总时间。如果希望知道虚拟用户完成每个不同操作的时间,需要使用事务(Transaction)对上述操作进行界定。通过创建事务,可以将连续的业务过程进行事务化分割,能够明确统计每一步骤的处理性能。18Controller的使用场景的设定运行
9、时设定监控设定网络模拟及IP欺骗19场景设定Manual Scenario(手工场景设置)手工设置压力的分布和增长、降低的策略,测试时工具根据设定的压力分配各条脚本的访问用户数量分布,可以选择根据百分比或直接设置绝对数量两种;适用于对预计访问压力的性能评估需要。Goal-Oriented Scenario(目标场景设置)设定压力运行的性能目标,由工具自动调整访问压力来尝试达到;适用于对系统性能需求明确进行验证需要。20场景设定Scenario的设置starttimeconvertscenarioloadgeneratorsscheduleenableipspooferResultsRendez
10、vous21运行时设定Run LogicPacingThink TimesMiscellaneousSpeed SimulationProxyPreferencesContentCheck22监控设定性能监控transresponsetimetrans/sec(passed)网络监控throughput服务器监控%processortime(Memory)availablebytes%disktimeprocessorqueuelength专项监控23Analysis的使用导出结果读取图表组合图表取样间隔24总结 使用LoadRunner配合合理的方案,能够对系统进行有效的性能测试;性能测试是
11、一项团队合作的工作,需要各个技术角色的参与,从被测系统的开发人员到被测系统的软硬件维护人员多方的配合;25HTTP协议状态码的含义100:Continue101:witchingProtocols200:OK 201:Created202:Accepted203:Non-AuthoritativeInformation204:NoContent205:ResetContent206:PartialContent300:MultipleChoices301:MovedPermanently302:Found303:SeeOther304:NotModified305:UseProxy307:Te
12、mporaryRedirect400:Bad Request 401:Unauthorized402:PaymentRequired403:Forbidden404:Not Found 405:MethodNotAllowed406:NotAcceptable407:ProxyAuthenticationRequired408:RequestTime-out409:Conflict410:Gone411:LengthRequired412:PreconditionFailed413:RequestEntityTooLarge414:Request-URITooLarge415:Unsuppor
13、tedMediaType416:Requestedrangenotsatisfiable417:ExpectationFailed500:Internal Server Error 501:NotImplemented502:BadGateway503:ServiceUnavailable504:GatewayTime-out505:HTTPVersionnotsupported26Run Logic脚本块由一组脚本组成的集合,脚本块区别于脚本组在于工具的脚本组是固定的,而脚本块使客户自定添加的;脚本组可以含有脚本块;脚本组脚本组是脚本或脚本块的组合,工具有三类固有的脚本组:Init:Init
14、脚本组在一个虚拟并发用户的整个执行周期内只会运行一次;所有该组的脚本或脚本块都只会顺序执行一次;Run:Run脚本组在一个虚拟并发用户的整个执行周期内可以运行多次;End:同Init脚本组End脚本组在一个虚拟并发用户的整个执行周期内只会运行一次;IterationIteration特指的是Run脚本组的迭代;设置Iteration迭代次数时,将影响整个Run脚本组的迭代次数;当Run脚本组需要内迭代时,则可以通过脚本块来进行内循环的设置;27Preferencesadvanced-Winlnet replay instead of Sockets(Windows only)1.Socket和
15、Winsocket,Socket是通用的TCP/IP的协议实现,Winsocket是Socket在Windows下的针对windoWindowsws特性的封装实现,能发挥winWindowsdows的特性但通用性较不足;2.Winlnet是实现了Winsocket的动态库;28ContentCheck将系统的错误封装成便于识别和定位的日志记录;检索服务器返回的数据包是否含有目标内容,存在即说明错误发生;29通过LoadRunner进行压力测试30压力测试步骤准备工作,在Jforum系统中注册test01-test10共10个用户录制脚本,创建Vuser创建场景,运行测试形成测试报告,分析结果3
16、1创建创建VUSER创建用户登录和登出用户登录和登出的Vuser脚本32启动界面33单击创建/编辑脚本。这时将打开 VuGen 起 始页。创建Web脚本34在欢迎使用 Virtual User Generator 区域中,单击新建脚本按钮。这时将打开“新建虚拟用户”对话框,显示“新建单协议脚本”选项。创建Web脚本35请确保“类别”是热门协议。VuGen 将列出适用于单协议脚本的所有可用协议。向下滚动列表,选择 Web(HTTP/HTML)并单击创建,创建一个空白 Web 脚本。开始录制单击Next单击StartRecording36准备开始录制在URL中填入JForum论坛的链接地址,注意此
17、处需要替换成虚拟机中论坛的需要替换成虚拟机中论坛的IP地址地址http:/10.254.73.20:8080/jforum/forums/list.page37打开IE初始化Vuser,记录生成的多个事件点击“登入”连接38登录输入之前已经注册的正确用户名和密码单击“登录”按钮39注销单击“注销test01”连接。40停止录制单击浮动窗口上的“停止”按钮出现录制概要41“录制概要”包含协议信息以及会话期间创建的一系列操作。VuGen 为录制期间 执行的每个步骤生成一个快照,即录制期间各窗口的图片。保存脚本单击工具栏保存按钮,输入需要保存的文件名,如login-logout。42查看录制的脚本单
18、击“Action”连接,查看刚刚录制的Vuser脚本43要在脚本视图中查看脚本,请选择视图 脚本视图,或者单击脚本按钮。查看录制的脚本44可以在该窗口中直接输入 C 或 LoadRunner API 函数以及控制流语句。回放录制的脚本单击Tasks中的VerifyReplay按钮,回放已经录制的脚本回放成功后,出现右图所示提示。此时仅能说明录制脚本执行正确。45回放录制的脚本若需要确保运行逻辑正确,需要对比录制和回放时快照快照的差别。46VuGen为录制期间执行的每个步骤生成一个快照,即录制期间各窗口的图片。添加事务单击单击Add Transaction的链接的链接单击单击New Transa
19、ction按钮,先后按钮,先后添加添加login和和logout两个事务两个事务47查看事务代码48单击Script按钮,切换到脚本视图,可以查看到刚刚添加的事务参数化用户登录信息49选择视图 树视图进入树视图;或者单击Tree按钮进入树视图。在测试树中双击 Submit Data:jforum.page步骤。将打开“提交数据步骤 属性”对话框。单击“ABC”按钮,在弹出的对话框中,在“参数名”输入框中输入“username”,单击“Properties”按钮。将常量值更改为变量值 50输入文件名“userinfo.dat”单击“Create Table”按钮在弹出的对话框中单击“确定”按钮将
20、常量值更改为变量值 51通过“Add Column”和“Add Row”按钮,增加用户名和密码字段,录入test01-test10十个用户的信息在“By number”输入框中输入1单击“Close”按钮以相同的方式将password参数化将常量值更改为变量值 52将常量值更改为变量值 53完成username和password两个的参数化,单击“确定”按钮。将常量值更改为变量值 54切换到脚本视图。可以查看到username和password被参数化将登出中的test01替换为username,从而一起参数化保存对脚本的修改,完成Vuser脚本的制作。关闭Vugen。创建场景创建场景55创建
21、新场景56打开Controller选择“Manual Scenario”选择login_logout脚本,单击“Add”按钮单击“OK”按钮,将login_logout脚本加入到新场景中。设计场景57给场景命名“login-logout”设置“Start Vusers”、“Duration”和“Stop Vusers”单击“Run”按钮,切换到运行界面。增加LoadGenerator58单击“Load Generators”按钮。在弹出对话框中单击“Add”按钮在弹出对话框中,Name输入框中输入“localhost”,单击“OK”按钮,将本机添加到Controller的控制中。设置被监视Wi
22、ndows系统59进入被监视windows系统,在开始运行中输入services.msc开启RemoteProcedureCall(RPC)和RemoteRegistry两个服务。进入被监视windows系统,在控制面板中,进入“用户帐户和家庭安全用户帐户管理帐户”选择管理员账户,单击“创建密码”连接,输入密码,如123456单击“创建密码”按钮增加对Windows主机的监控60右键单击“Windows Resources”监视窗口,在弹出菜单中选择“Add Measurements”按钮。在弹出对话框中单击“Add”按钮在弹出对话框中,Name输入框中输入运行Tomcat的虚拟机IP地址,如
23、“10.254.73.20”,选择Platform为“Windows Vista”,单击“OK”按钮,将测试机添加到监控中。设置用户名和密码61单击“Add”按钮在弹出对话框中,输入被监控的Windows操作系统的管理员的用户名Administrator和密码123456单击“OK”按钮,设置被监控服务器的用户名和密码。单击“保存”按钮,保存修改后的场景。运行测试62单击“Start Scenario”按钮,开始测试在运行测试过程中,观察运行时的指标参数,如Hits/Second、Passed Transactions等。测试完成后,查看结果,如右图。形成测试报告形成测试报告63形成测试报告64单击“Analyze Results”按钮,开始对测试结果进行分析。分析保存测试报告65分析测试报告单击“保存”按钮,保存测试报告。谢谢!谢谢!66