性能测试常见⾯试题
常见性能测试问题
注:删除线显⽰的部分代表不常见或者我们课程内容没有太多涉及
1、性能测试包含了哪些软件测试(⾄少举出3种)?
参考答案:负载测试;压⼒测试;容量测试;
负载测试(Load Testing):负载测试是⼀种主要为了测试软件系统是否达到需求⽂档设计的⽬标,譬如软件在⼀定时期内,最⼤⽀持多少并发⽤户数,软件请求出错率等,测试的主要是软件系统的性能。
压⼒测试(Stress Testing):强度测试也就是压⼒测试,压⼒测试主要是为了测试硬件系统是否达到需求⽂档设计的性能⽬标,譬如在⼀定时期内,系统的cpu利⽤率,内存使⽤率,磁盘I/O吞吐率,⽹络吞吐量等,压⼒测试和负载测试最⼤的差别在于测试⽬的不同。
容量测试(Volume Testing):确定系统最⼤承受量,譬如系统最⼤⽤户数,最⼤存储量,最多处理的数据流量等。
或者在下⾯选择⼏项:
并发测试- 测试多⽤户并发访问同⼀个应⽤、模块、数据时是否产⽣隐藏的并发问题基准测试 - ⽐较新的或未知测试对象与已知参照标准(如现有软件或评测标准)的性能。争⽤测试:- 核实测试对象对于多个主⾓对相同资源(数据记录、内存等)的请求的处理是否可以接受。
性能配置 - 核实在操作条件保持不变的情况下,测试对象在使⽤不同配置时其性能⾏为的可接受性。
负载测试- 核实在保持配置不变的情况下,测试对象在不同操作条件(如不同⽤户数、事务数等)下性能⾏为的可接受性。
强度测试- 核实测试对象性能⾏为在异常或极端条件(如资源减少或⽤户数过多)之下的可接受性。
容量测试- 核实测试⽤户同时使⽤软件程序的最⼤数量
2、请问什么是性能测试、负载测试、压⼒测试?
性能测试是指在⼀定的条件下(指定的软硬件,⽹络环境等)通过⾃动化的测试⼯具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进⾏测试。
负载测试、压⼒测试参考答案如上题。
3、在给定的测试环境下进⾏,考虑被测系统的业务压⼒量和典型场景?
负载测试
负载测试是⽤来测定系统饱和状态、确定阀值。其特点有:
(1)这种⽅法的⽬的是到系统处理能⼒的极限;通过“检测、加压、阀值”⼿段到如“响应时间不超过10秒”,“平均CPU利⽤率低于65%”等指标。
(2)这种性能测试⽅法需要在给定的测试环境下进⾏,通常也需要考虑被测系统的业务压⼒量和典型场景、另外HP Mercury LoadRuner在使⽤该⽅法进⾏“加压”的时候必须选择典型场景。
(3)这种性能测试⽅法⼀般⽤来了解系统的性能容量,或者是配合性能调优的时候来使⽤。特别是该的Weblogic 和库的性能调优。
4、什么时候可以开始执⾏性能测试?
在产品相对⽐较稳定,功能测试结束后。灵活性⽐较强。
5、简述性能测试的步骤。
熟悉应⽤
了解应⽤的架构、功能逻辑
测试需求
1、需要将开发给定的需求转为吞吐量和响应时间。
2、根据测试⽬的,细化需求
测试准备
测试准备包括测试客户端机器准备、测试数据准备、测试脚本编写准备。
测试执⾏
测试的执⾏中,需要监控测试客户端和服务器性能,监控服务器端应⽤情况:
客户端的系统资源(cpu、io、memory)情况
服务端的系统资源(cpu、io、memory)情况
服务器的jvm运⾏情况
服务端的应⽤情况,看是否有异常
响应时间、吞吐量等指标
系统资源监控,linux下可以采⽤的⼯具有:vmstat、top、meminfo等。
JVM的监控,可以⽤jprofiler⼯具,linux下⾯的jmap、jhat等。
响应时间、吞吐量等,由grinder提供。
上述这些信息,⼀般在测试结束后,均需要归档整理,已备后续详细分析
每次测试运⾏完以后,肯定会增加很多数据,需要考虑本次执⾏对数据量的影响,如果数据量的变化对后续测试会有影响,则需要清理数据。
测试分析
测试结果分析,性能问题定位,测试报告评估
6、你如何识别性能瓶颈?
RBI⽅法
重点测试“吞吐量”指标,因为RBI认定80%的系统性能瓶颈由吞吐量造成。
按照⽹络、硬件、数据库、应⽤服务器、代码的顺序⾃上⽽下分析性能
⼯具:IBM、HP、OpenSource⼯具都⽀持。需使⽤分析模块、根据Weblogic、Oracle 区别有专门的⼯具实现RBI。
7、性能测试时,是不是必须进⾏参数化?为什么要创建参数?LoadRunner中如何创建参数?
是。模拟⽤户真实的业务操作。
创建参数列表,⽤参数替换固定的⽂本。
8、你如何设计负载?标准是什么?
负载测试计划多少⽤户数量、使⽤什么类型的机器、以及在什么环境下进⾏。主要基于两个重要的⽂档,任务分布图和事务信息,任务分布图告诉我们在负载时间段内,某⼀个事务使⽤的⽤户数,⾼峰使⽤率及低峰使⽤率均来⾃该⽂档;事务信息告诉我们事务名及优先级,在设计场景时可以参考。
9、解释5个常⽤的性能指标的名称与具体含义。
响应时间、并发⽤户数,吞吐量,性能计数器,TPS,HPS
响应时间:指的是“系统响应时间”定义为应⽤系统从发出请求开始到客户端接收到响应所消耗的时间。把它作为⽤户视⾓的软件性能的主要体现。
最⼤并发⽤户数:有两种理解⽅式,⼀种是从业务的⾓度来模拟真实的⽤户访问,体现的是业务并发⽤户数,指在同⼀时间段内访问系统的⽤户数量。另⼀种是从服务器端承受的压⼒来考虑,这⾥的“并发⽤户数”指的是同时向服务器端发出请求的客户数,该概念⼀般结合并发测试(Concurrency Testing)使⽤,体现的是服务端承受的最⼤并发访问数。
吞吐量是指“单位时间内系统处理的客户请求的数量”,直接体现软件系统的性能承载能⼒。
性能计数器(Counter)是描述服务器或操作系统性能的⼀些数据指标。例如,对Windows 系统来说,使⽤内存数(Memory In Usage),进程时间(Total Process Time)等都是常见的计数器。
思考时间(Think Time),也被称为“休眠时间”,从业务的⾓度来说,这个时间指的是⽤户在进⾏操作时,每个请求之间的间隔时间。从⾃动化测试实现的⾓度来说,要真实地模拟⽤户操作,就必须在测试脚本中让各个操作之间等待⼀段时间,体现在脚本中,具体⽽⾔,就是在操作之间放置⼀个Think 的函数,使得脚本在执⾏两个操作之间等待⼀段时间。
TPS:Transaction per second,每秒钟系统能够处理的交易或者事务的数量。它是衡量系统处理能⼒的重要指标。
点击率:HPS,每秒钟⽤户向WEB服务器提交的HTTP请求数。
10、描述不同的⾓⾊(⽤户、产品开发⼈员、系统管理员)各⾃关注的软件性能要点。
⽤户:重点关注打开速度及响应时间
开发:重点关注响应时间和数据库交互
管理员:重点关注⽤户感受到的软件性能;如何利⽤管理功能进⾏性能调优;如何利⽤其他软硬件⼿段进⾏性能调优
11、请分别针对性能测试、负载测试和压⼒测试试举⼀个简单的例⼦?
性能测试例⼦:公司开发了⼀个⼩型项⽬管理系统,上线前需要做负载、压⼒、⼤数据量、强度测试等。
负载测试:逐步加压,从⽽得到“响应时间不超过10秒”,“服务器平均CPU利⽤率低于85%”等指标阀值。
压⼒测试:逐步加压,从⽽使“响应时间超过10秒”,“服务器平均CPU利⽤率⾼于90%”等指标来确定系统能承受的最⼤负载量。
12、请问您是如何得到性能测试需求?怎样针对需求设计、分析是否达到需求?
1.在查看需求⽂档,从中提取性能测试需求,
2.与⽤户交流,了解实际使⽤情况。
3.结合业务信息设计操作场景总结出需测试的性能关键指标。
4.执⾏⽤例后根据提取关键性能指标来分析是否满⾜性能需求。
5.根据历史项⽬经验来确定性能需求。
13、简述使⽤Loadrunner的步骤
制定性能测试计划—>开发测试脚本—>设计测试场景—>执⾏测试场景—>监控测试场景—>分析测试结果(具体内容可以详细说明)
如:
1、脚本编写过程(从录制或编写,到优化过程<;参数化,思考时间,⽂本/图像检查,
关联,事务和集合点设置等>)
2、性能测试场景设置分析过程
3、脚本执⾏和监控过程(怎么设置监控,怎么观察集合点和每个⽤户的执⾏情况等)
4、测试结果分析中常见的各种计数器(如:cpu,内存,硬盘怎么看等)
14.什么是集合点?设置集合点有什么意义?Loadrunner中设置集合点的函数
是哪个?lr中的集合点跟场景设置中全部初始化后在运⾏有什么区别?
在性能测试过程中,需要模拟⼤量⽤户在同⼀时刻,访问系统并同时操作某⼀任务,可以通过配置集合点来实现,多个⽤户同时进⾏某操作;
集合点可以在服务器上创建密集的⽤户负载,使LoadRunner能够测试服务器在负载状态下的性能。
设置集合点函数:lr_rendezvous("Meeting"); // Meeting是集合点名称
设置集合点可以让⼤量虚拟⽤户在同⼀时刻进⾏系统访问,从⽽做到真正的并发;⽽场景中全部初始化以后再运⾏,有可能只是做到了部分并发,并没有做到所有⽤户同⼀时间并发。
15、为什么要创建参数?如何创建参数?
LoadRunner在录制脚本的时候,只是忠实的记录了所有从客户端发送到服务器的数据,⽽在进⾏性能测试的时候,为了更接近真实的模拟现实应⽤,对于某些信息需要每次提交不同的数据,或者使⽤多个不同的值进⾏循环输⼊。这时,在LoadRunner中就可以进⾏参数化设置,以使⽤多个不同的值提交应⽤请求。
【参数化】:使⽤指定数据源中的值来替换脚本录制⽣成的语句中的参数。
【参数化好处】
减少脚本的⼤⼩
提供使⽤不同的值执⾏脚本的能⼒,更加真实的模拟现实应⽤。
【参数化步骤】
⽤参数替换Vuser脚本中的常量值
为参数设置属性和数据源
16、什么是关联?请解释⼀下⾃动关联和⼿动关联的不同。
【关联的定义】简单的说:就是把脚本中某些写死(固定)的数据,转变成动态的数据,或者说将前⾯语句的结果数据保存下来,然后在后⾯的语句提交请求时使⽤这些数据。
【需要关联的前提条件】:
客户端需要从服务器端返回数据中获取部分数据,并将这些部分数据处理后作为⾃⼰下⼀次请求的⼀部分发出。(常见的如session值)
【⾃动关联与⼿⼯关联的不同】:⾃动关联是在脚本录制过程中,VuGen会根据已经制定好的规则,⾃动出需要关联的值或脚本录制完成后,执⾏脚本⼀次,通过Correlation Studio⾃动出需要关联的数据,并建⽴关联;
⽽⼿动关联是需要录制两份相同业务流程的脚本,输⼊的数据要相同,利⽤WinDiff
⼯具,出两份脚本之间不同之处,也就是需要关联的数据,再通过web_reg_save_param 函数⼿动建⽴关联,将脚本中⽤到关联的数据参数化。(或者通过经验直接去response中去,当然这个更⿇烦,效率也不⾼)
17、你如何出哪⾥需要关联?请给⼀些你所在项⽬的实例。
1、录制两份相同业务流程的脚本,输⼊的数据要相同
2、利⽤BeyondComparePortable或是WinDiff⼯具,出两份脚本之间不同之处,也就是需要关联的数据
3、通过web_reg_save_param函数⼿动建⽴关联,将脚本中⽤到关联的数据参数化。
⽰例:
通过录制两份脚本,进⾏对⽐,可知jsessionid、sap-ext-sid、sap-wd-cltwndid、sap-wd-tstamp需要进⾏关联。
18、哪个函数是⽤来截取虚拟⽤户脚本中的动态值?(⼿⼯关联)
Web_reg_save_param函数主要根据需要做关联的动态数据前⾯和后⾯的固定字符串来识别、提取动态数据,所以在做关联时,需要出动态数据的左、右边界字符串。
1.函数原型:
int web_reg_save_param (const char *ParamName, , LAST);
2.参数说明:
ParamNam:存放动态数据的参数名称
List of Attributes:其它属性,包含Notfound、LB、RB、RelFrameID、Search、ORD、SaveOffset、Convert、SaveLen。Notfound:指当不到要的动态数据时,怎么处理。
Notfound=error,当不到动态数据时,发出⼀个错误信息,为LoadRunner的默认值。
Notfound=warning,当不到动态数据时,不发出错误信息,只发出警告,脚本会继续执⾏下去不会中断。
LB:动态数据的左边界字符串,该参数为必选参数,并区分⼤⼩写。
RB:动态数据的右边界字符串,该参数为必选参数,并区分⼤⼩写。
ORD:指提取第⼏次出现的左边界的数据,该参数为可选参数,默认值是1。假如值为All,则查所有符合条件的数据并把这些数据存储在数组中。
Search:搜寻的范围。可以是Headers(只搜寻Headers)、Body(只搜寻Body部分,不搜寻Headers)、Noresources(只搜寻Body部分,不搜寻Header与Resource)或是All (搜寻全部范围,此为默认值),该参数为可选参数。
RelFrameID:相对于URL⽽⾔,欲搜寻的⽹页的Frame,此属性可以是All或是具体的数字,该参数为可选参数。SaveOffset:当到符合的动态数据时,从第⼏个字符开始才存储到参数中,该参数为可选参数,此属性值不可为负数,其默认值是0.
Convert:可能的值有两种:
HTML_TO_URL:将HTML-encoded数据转成URL-encoded数据格式。
HTML_TO_TEXT:将HTML-encoded数据转成纯⽂字数据格式。
SaveLen:从Offset开始算起,到指定长度内的字符串,才储存到参数中,该参数为可选参数,默认值为-1,表⽰储存到结尾整个字符串。
19、你如何调试LoadRunner脚本?
通常采⽤以下⽅法调试LoadRunner测试脚本
断点
【⽅法】在脚本的任意⼀⾏上按右键菜单或F9增加断点。
单步跟踪
字符串截取指定字符后的文字
【⽅法】通过菜单命令VUser—>Run Step by Step或F10,可以控制脚本以语句为单位执⾏。
⽇志输出
【⽅法】通过⽇志输出函数lr_message、lr_log_message、lr_output_message输出。
20、你在LR中如何编写⾃定义函数?请给出⼀些你在以前进⾏的项⽬中编写的函数。
在编写⽤户⾃定义函数之前,需要⾸先为函数创建外部库(DLL)⽂件,将这些库⽂件放在bin⽬录下,⼀旦库⽂件已经被添加并且将⽤户⾃定义函数作为参数,函数应该为以下格式:declspec (dllexport) char* (char*, char*)
21、在运⾏设置下你能更改那些设置?
可以修改Run Logic、pacing、Log、Think Time等,可以测试实际需要,修改相关选项。
22、你在不同的环境下如何设置迭代?
在“运⾏时设置”中设置,如下图所⽰:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。