1、大家好大家好1LoadRunner性能测试培训性能测试培训质量管理部 窦志刚2n 性能测试基础知识n 性能测试常用术语n LoadRunner组件-Virtual User Generatorn LoadRunner组件-Controllern LoadRunner组件-Analysisn 基本调优目标3n 什么是性能测试 通过狭义的性能测试模拟生产运行的业务压力或者用户使用场景来测试系统的性能是否满足生产性能的要求。广义的性能测试指压力测试、负载测试、强度测试、并发测试、大数据量测试、可靠性测试等和性能相关的测试统称。性能测试基础知识4n 压力测试对系统不断施加压力的测试,是通过确定一个系统
2、的瓶颈或不能接收用户请求的性能点,来获得系统提供的最大服务级别的测试。目的:是发现在什么条件下系统的性能变得不可接受,并通过对应用程序施加越来越多的负载,直到发现应用程序性能下降的拐点。n 负载测试对系统不断增加压力或增加一定压力下的持续时间,直到系统的一些性能指标达到极限,例如响应时间超过预定目标或某种资源以及达到饱和。区别压力测试侧重压力大小,负载测试往往强调压力持续的时间。性能测试基础知识5n 强度测试强度测试主要是检查程序对异常情况的抵抗能力,如运行最大存储空间,进行可能导致系统崩溃、磁盘数据抖动、网卡满负荷等。主要是异常条件下验证系统是否稳定以及性能方面是否容易扩展。n 疲劳强度测试
3、疲劳强度测试是一类特殊的强度测试,主要测试系统长时间运行后的性能表现,如一般常见的7X24小时的压力测试。性能测试基础知识6n 并发测试主要指当测试多用户并发访问同一个应用、模块、数据时是否产生隐藏的并发问题,如内存泄漏、线程锁、资源争用问题,几乎所有的性能测试都会涉及并发测试。通用说明:持续挂载一定数量用户不断开。LoadRunner进行并发测试相对较少,一般使用测试仪很普遍。n 大数据量测试一般是针对某些系统存储、传输、统计查询等业务进行大数据量的测试。如CA系统上千万条的数据测试。性能测试基础知识7n 可靠性测试在给系统加载一定业务压力的情况下,使系统运行一段时间,检测系统是否稳定。如施
4、加压力让CPU资源保持在90%以上的使用率,连续对系统加压24个小时,分析系统是否稳定。性能测试基础知识8性能指标9n 并发 严格意义上的并发:即所有的用户在同一时刻做同一件事情或者操作,一般是同一类型的业务 广义的并发:即所有的用户对系统发出了请求或进行了操作,这些请求或者操作可以是相同的,也可以是不同的。LoadRunner压测并发的弱点:一个IP只能支持65535个连接(理论上),因此需要压测百万级别的并发,必须很多IP地址支持才能实现。性能测试基础知识10性能测试基础知识防火墙并发测试标准:Concurrent connectionsHost 和DUT之间同时连接的总数,并假设所有连接
5、上都有数据传输。即同时可以挂载的用户数量。11n 请求响应时间请求响应时间是指从客户端发出请求到得到响应的整个过程的时间。从客户端发送一个请求开始计时,到客户端接到从服务器端返回的响应接口计时结束。另外一些工具中,会被称为“TTLB”,“Time to last byte”。从发送一个请求开始,到客户端收到最好一个字节的响应为止所耗费的时间。n 事务响应时间(Transaction Response Time)事务可能是一系列的请求组成,事务的响应时间主要是针对用户而言,是为了向用户说明业务响应时间而提出的。性能测试基础知识12n CPS(Connection Per Second)新建测试的
6、主要目的是测试被测设备的处理能力。单位时间内能够建立的连接数越多,说明被测试设备的处理器能力越强。一般只关心建立TCP连接的速率,因此使用RST方式关闭连接。n 吞吐率(Throughput)单位时间内网络上传输的数据量,是衡量网络性能的重要指标。Loadrunner记录的Throughput是接收到服务器返回的所有字节数之和,与本地发出的字节数无关!和网络带宽的关系:TPS*返回数据包的大小=Throughput带宽n 吞吐量网络上传输的数量量的总和。吞吐量/传输时间,即吞吐率。性能测试基础知识13n TPS(Transaction Per Second)每秒钟系统能够处理的交易或者事务的数
7、量。是衡量系统处理能力的重要指标。一般而言,评价系统性能均以每秒完成的技术交易的数量来衡量系统整体处理能力取决于处理能力最低模块的TPS值n HPS 点击率每秒钟用户向Web服务器提交的HTTP请求数。是Web应用特有的一个指标:Web应用是“请求-响应”模式,用户发出一次申请,服务器就处理一次。HPS一般与TPS成正比关系,是B/S系统中非常重要的性能指标之一性能测试基础知识14n 资源利用率监控不同系统资源的使用程度,如服务器的CPU、磁盘利用率、内存、网络等。是测试和分析瓶颈的主要参数。性能测试基础知识15n 场景(Scenario)在LoadRunner中主要表现为Controller
8、中设计与执行测试用例中的用户场景。如在controller中选择虚拟用户脚本,设置虚拟用户数量,配置虚拟用户运行时的行为,选择负载发生器,设置执行时间等。n 负载发生器(Load Generator)用于产生压力的真实机器,受controller控制,可以使用户脚本在不同的机器上执行。性能测试中,通常由一个controller控制多个Load Generator 对测试系统进行加压。n 虚拟用户(Vuser)模拟现实中的真实用户,通过虚拟用户脚本模拟真实用户的行为。LoadRunner常用术语16n 虚拟用户脚本Vuser Script通过Vuser Generator录制或者开发的脚本,用来
9、模拟用户的行为。n 事务(Transaction)业务上通常是用户的一个或者一系列操作,代表一定的功能;测试人员可以将一个或者多个操作步骤定义为一个事务,来衡量这部分的用户并发响应时间。n 思考时间(Think Time)用户思考时间,为了模拟更接近用户的真实行为而引进的概念。LoadRunner常用术语17n 集合点(Rendezvous)LoadRunner 通过集合点实现真正意义上的并发。添加在比较重要的操作动作之前;LoadRunner常用术语18LoadRunner工作原理19n 录制启动应用程序并将业务流程录制到脚本中。VuGen为录制的每个操作创建一个步骤。完成录制后,VuGen
10、生成脚本序列,从而形成Vuser脚本。n 验证将脚本作为单独的测试运行,以此验证其功能并找出潜在的问题。n 增强向脚本中添加增强功能,使它能够更准确的模拟业务流程,并使能够获得重要数据。添加事务,内容检查和参数。n 准备进行负载测试LoadRunner-Vuser Generator20n 常用协议(Infosec常用协议)Web(HTTP/HTML)Java Vuser Web Services Windows socketsWeb协议(NSAE/CA/NetSign/NetPass/Bisafe)Java Vuser(NetSign/NetPass/CA)Web Services(RA)W
11、indows sockets(NetSign/NSAE SM2算法)Vuser Generator-录制21n Web协议录制 HTML-based script基于浏览器的应用程序和VB Script URL-based script不是基于浏览器的应用程序基于浏览器的应用程序包含了javascript,并且该脚本向服务器发送了请求,如DataGrid分页按钮基于浏览器的应用程序使用了HTTPS安全协议如果使用HTML-based script模式录制完成后,回放失败。建议修改为URL-based script 模式来录制。Vuser Generator-录制Web协议22n HTML-ba
12、sed script和URL-based script区别 HTML-based script产生的脚本描述和用户的操作一致,能够非常直观的看到用户的操作流程。直接创建的URL(web_url),表单提交(web_submit_form),链接(web_link)和图像(web_image)等函数 URL-based script产生的脚本,所有的链接、图像请求和URL操作都被录制为web_url函数中,表单提交被录制为web_submit_data函数。Vuser Generator-录制Web协议23Vuser Generator-录制Web协议24n 脚本录制的基本原则 充分考虑脚本的执
13、行效率性能测试脚本关注的是如何模拟用户的真实行为,应该接近用户的真正操作。录制完成后尽量不要增加过多的内容,如检查点、循环等操作 录制重要的用户业务建议录制常用的、使用频率较高的业务进行录制 选择需要的进行录制如果一些操作对用户关注的业务没有影响,可以不进行录制。Vuser Generator-录制Web协议25n Infosec 脚本录制 应用测试:完全模拟用户的各个重要的操作进行系统测试;Infosec产品测试:避开用户的各种繁琐操作,假设用户没有思考时间,所有操作都是连续性的,这样才能对被测服务器产生最大的性能压力。如证书下载流程:产品测试的脚本尽可能融合到一个页面中,避免频繁录入提交的
14、操作;如证书下载流程:用户注册-申请证书-下载证书内部测试中,建议将所有的流程放在一个JSP页面中进行处理,这样会对被测设备产生最大压力,能够最大化的发现产品存在的问题。Vuser Generator-录制Web协议26n Java Vuser根据测试流程,直接进行Java接口的调用,编写测试脚本LoadRunner对Java版本的支持,需要根据实际情况进行确认。如果版本不正确,编译过程会体现相关的错误信息。可以指定JVM堆栈大小从目前的使用情况来看,不是很适合进行稳定性测试。适用产品:NetSign、NetPass、NetCert;有JavaAPI的都可以支持。Vuser Generator
15、-录制Java协议27n Java Vuser 调用问题可以和脚本放在同一个目录;但只有当前的虚拟用户脚本可以调用;放在LR调用的JDK lib目录下,所有用户脚本都可以调用;多台agent同时调用java vuser时建议使用这种方式多台计算机联机测试,所有运行测试脚本的客户机必须安装JDK环境并正确设置路径。Vuser Generator-录制Java协议28Vuser Generator-录制Java协议29Vuser Generator-录制Java协议30nJava脚本转换web脚本使用Java协议脚本可以轻松转变为web协议脚本,将java脚本中的内容按照Java语法变成JSP页面
16、,并部署在WAS中即可。Vuser Generator-录制Java协议31n Web Services基于WSDL文件的录制(宏远证券项目测试)Vuser Generator-录制Web Services32n Windows Sockets(直接发送数据)对于windows socket协议进行通信的C/S结构的应用程序,可以使用windows sockets类型的Vuser来录制之间的通信。Windows sockets是非常底层的协议,适用于录制一些低级通信会话。lrs_create_socket(“socket1”,“TCP”,“RemoteHost=192.168.3.246:10
17、001”,LrsLastArg);/建立连接lrs_send(“socket1”,“buf0”,LrsLastArg);/发送数据lrs_receive(“socket1”,“buf1”,LrsLastArg);/接收数据lrs_close_socket(“socket1”);/关闭连接;WSRData 2 1send buf0 1000100312303456 recv buf1 128Vuser Generator-录制windows Socket33n Windows Socket(调用DLL)适用范围:一类是不适合录制其功能点的业务系统的性能测试;另外一类是基于C+语言开发的业务系统的
18、性能测试。特点是调用动态库容易,难点是DLL中的动作开发实现。Vuser Generator-录制windows Socket34Vuser Generator-录制windows Socket35n 脚本编写 Vuser_init:初始化调用部分,一般为创建连接,加载DLL库等;如:lrs_create_socket(“socke”,“TCP”,“RemoteHost=66.8.5.197:9000”,LrsLastArg);/建立连接lr_load_dll(C:certsm2v11dlllibeay32.dll);/Load DLLlr_load_dll(C:certsm2v11dllss
19、leay32.dll);Action:发送接收数据,对数据进行判断等;调用DLL中的动作函数,进行操作;lrs_send(socke,buf0,LrsLastArg);lrs_receive(socke,buf1,LrsLastArg);num=runconnect_doublecert(0,0,150000);/函数调用 Vuser_end:关闭连接,是否DLL等Vuser Generator-录制windows Socket36Vuser Generator-脚本模式Web37Vuser Generator-脚本模式Java协议38Vuser Generator-脚本模式Socket39n
20、 参数化参数化是LR的一大特色,通过参数化功能实现了用户行为的差异化。参数化实际是用参数替换一些常量。当脚本运行时,Vuser将使用指定数据源中的值来替换参数。参数的数据源可以是一个文件,也可以是内部生成的变量,可以是数据库中的查询结果。优点:减少脚本的大小和数量虚拟用户脚本更接近真实的用户行为Vuser Generator-脚本增强-参数化40n 参数类型Date/Time:时间类型的参数Group Name:使用虚拟用户所在的组名称代替参数Load Generator Name:使用虚拟用户所在的Load Generator机器名来替换Iteration Number:使用该测试脚本当前循
21、环的次数来生成参数。Random Number:随机数。可以设置产生随机数的范围。Unique Number:唯一的数。在属性中可以设置第一个数以及递增的数的大小。递增含义:假如起始数为1,递增为5,那么第一个用户第一次循环取值为1,第二次循环取值为2;第二个用户第一次循环取值为6,第二次为7;Vuser Generator-脚本增强-参数化41n 参数类型Vuser ID:使用虚拟用户的ID来代替参数值,该ID是由Controller来控制的。Vuser中,Vuser ID为1。File:可以从属性文件中设置编辑文件,添加内容,也可以从数据库中提取数据。User Defined Functi
22、on:从开发的dll中获取数据。Vuser Generator-脚本增强-参数化42n File类型Vuser Generator-脚本增强-参数化43n File类型-如何获取每行数据Sequential:按照顺序一行行的读取,每次当Vuser访问数据表时都返回到下一个可用的数据行。如果表中没有足够的值,返回到表的第一个值,一直循环到测试结束。强调虚拟用户的一致性,每个虚拟用户运行到该点时取值一致。Random:每次Vuser访问数据表时都分配一个随机值。Unique:唯一的值。为每个Vuser的参数分配一个唯一的值;Unique强调用户的差异性,即每个用户取到的参数值不一致。Same li
23、ne as xxxx:如果一个脚本中定义了多个参数,其中某些参数应该是对应的,如Seed和SN;用户名和密码等;Vuser Generator-脚本增强-参数化44n File类型-何时访问数据表更新参数Update value on 定义了何时访问数据表更新参数值。Vuser Generator-脚本增强-参数化45n File类型-何时访问数据表更新参数Each iteration:每次迭代时访问数据表获得下一个值。在一次迭代中一个参数可能会出现多次。如用户名、密码出现两次,如果希望这两次的参数取一样的值,就选择此项。用户名和密码两个参数只在不同的迭代之间进行参数的更新,在同一次迭代中取同
24、一个值。Each occurrence:该参数的每次出现都需要更新值。即一次迭代中参数如果多次出现将会取不同的值。Once:在一个Vuser中同一个参数取同一个值。Vuser Generator-脚本增强-参数化46n 集合点(Rendezvous)集合点可以控制各个vuser以便在同一时刻执行任务。借助集合点,可以在LoadRunner中实现真正意义上的完全一样的并发。使用集合点,可以在系统上模拟较重的用户负载。当某个Vuser达到该集合点时,Controller会将其保留,直到参与该集合的全部Vuser都到达。当满足条件时,Controller将释放Vuser,这样可以产生非常密集的同一类
25、用户操作或请求。如下,在验证口令时增加集合点,提供最密集的同时验证操作。Vuser Generator-脚本增强-集合点47n 检查点检查Web服务器返回的网页结果是否正确。VuGen支持在脚本中插入Text/Imag检查点。Web_find:主要针对HTML页面显示的内容进行搜索。有时候在页面显示正确的情况下也无法搜索到判断信息。(属于丢弃的方法)Web_reg_find 针对HTML源文件进行搜索。Vuser Generator-脚本增强-检查点48n Web_reg_find用法web_reg_find(Text=ABC,SaveCount=abc_count,LAST);web_url
26、(Step,URL=.,LAST);if(strcmp(lr_eval_string(abc_count),0)=0)Action A else Action B 特点:该函数必须写在要查找的内容请求之前,一般情况下都会写在如下六个函数之前:Web_custom_request(),web_image(),web_link(),web_submit_data(),web_submit_form(),web_url().Vuser Generator-脚本增强-检查点49web_find()和web_reg_find()的区别:这两个函数函数类型不同,web_find()是普通函数,web_re
27、g_find()是注册函数;2.VU run time设置中的“enable image and text check”对 web_find有效,而对web_reg_find无效。3.web_find()只能只用在基于HTML模式录制的脚本中,而web_reg_find()没有此限制;4.web_find()是在返回的页面中进行内容查找,web_reg_find()是在缓存中进行查找、web_find()在执行效率上不如web_reg_find(),web_reg_find先注册的优势是脚本能够一边接收Server的数据缓冲,一边进行查找,提高了查找的效率5.web_reg_find的参数与w
28、eb_find并不完全一样,其中有个参数叫做 SaveCount,它能够记录查找匹配的次数。而web_find的机制是一旦查找匹配成功,就立即返回,并不继续查找和记录匹配次数。6.用web_reg_find 的优先级要远远高于web_find(),所以 web_find()已经属于向后兼容的功能,不再推荐使用;Web_find和Web_reg_find区别50n 关联将一条语句的结果当作另一条语句的输入来链接语句;把脚本中某些写死的数据,转变成是撷取自服务器所送的、动态的、每次都不一样的数据。通常使用web_reg_save_para函数进行关联,也是从页面源文件查找需要的字符串。Vuser
29、Generator-脚本增强-关联51如页面源码部分:FlightDeparture timeCost Blue Sky Air 2308am$378 Blue Sky Air 2311pm$337 Vuser Generator-脚本增强-关联52Vuser Generator-脚本增强-关联/*This web_reg_save_param call applies to the following action function:web_submit_form.*/web_reg_save_param(outFlightVal,LB=outboundFlight value=,RB=ch
30、ecked,LAST);web_submit_form(reservations.pl,Snapshot=t4.inf,ITEMDATA,.LAST);/Now use the saved outFlightVal web_submit_form(reservations.pl_2,Snapshot=t5.inf,ITEMDATA,Name=outboundFlight,Value=outFlightVal,ENDITEM,Name=reserveFlights.x,Value=92,ENDITEM,Name=reserveFlights.y,Value=10,ENDITEM,LAST);Pa
31、rameter Substitution:parameter outFlightVal=230;378;11/20/2003*/53n Lr_save_string 将非空的字符串保存到指定的参数中。如将字符串“777”保存到emp_id变量中。Vuser Generator-常用函数54n lr_eval_string返回参数中的实际字符串值Vuser Generator-常用函数55Controller56Analysis57LoadRunner负载测试流程规划负载测试创建Vuser脚本定义场景运行场景分析结果n 规划负载测试:定义性能测试要求,例如并发用户数量、典型业务流程和要求的响应时
32、间等n 创建Vuser脚本:在自动化脚本中录制最终用户的行为,或者根据用户行为编写测试脚本;n 定义场景:使用LoadRunner Controller设置负载测试环境;n 运行场景:使用LoadRunner Controller驱动、管理并监控负载测试;n 分析结果:使用LoadRunner Analysis创建图和报告并评估性能;58n 规划阶段(测试目标、测试范围、测试组织、测试时间)n 准备阶段(测试环境、测试数据、测试脚本、测试程序)n 执行阶段(响应时间基准测试、负载测试、压力测试、容量测试、稳定性测试)n 调试阶段(收集/分析测试结果、定位瓶颈、性能调优)n 报告阶段(测试结果确
33、认、测试目标完成确认、测试报告编制)LoadRunner负载测试流程59LR测试过程-测试目标n 测试目标一般包含应用系统要达到的性能指标n 系统处理的最大并发用户数n 系统运行高峰时期,响应时间小于X秒n TPS不低于多少n 服务器资源利用率不超过XXn 运行7*24小时,无明显内存泄漏现象60n操作系统监控 CPU(top、vmstat)内存 IO:(iostat、iotop)文件系统空间监控 网络监控(iptraf)LR测试过程-测试监控61n Linux系统监控Iostat vmstatmore/proc/cpuinfo more/proc/meminfofreempstatnmonp
34、s/pstreesarnetstat tcpdumpLR测试过程-测试监控62n中间件监控 CPU 执行线程数 数据库连接数 队列状态 WAS、Weblogic启动内存大小,jvm大小以及输出 日志输出LR测试过程-测试监控63n 调优基本原则n 某个部分不是性能瓶颈,不用尝试优化n 优化是为系统提供足够的资源并且充分利用资源,不是无节制的扩充资源LR测试过程-调优64n LoadRunner测试过程中性能没有达到预期值?查看服务器的配置、CPU利用率等 看网络带宽是否满负荷(双向通道)不能忽视压力机的配置 单独验证应用服务器的性能 单独验证数据库的性能 注意数据库的驱动版本 中间件系统文件句柄LR测试过程-问题定位65