软件性能测试
在交替进行负荷和强迫测试时常用的术语
软件性能测试是在交替进行负荷和强迫测试时常用的术语。理想的“软件性能测试”(和其他类型的测试)应在需求文档或质量保证、测试计划中定义。软件性能测试一般包括负载测试软件压力测试
目的
为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。
基本概念
软件性能测试,英文是Performance Testing。
通常验证软件的性能在正常环境和系统条件下重复使用是否还能满足性能指标。或者执行同样任务时新版本不比旧版本慢。一般还检查系统记忆容量在运行程序时会不会流失(memory leak)。比如,验证程序保存一个巨大的文件新版本不比旧版本慢。
功能测试
SEI负载测试计划过程
目标:产生一个清晰、好理解、可验证的负载测试计划
内容:关注6个区域:目标、用户、用例、生产环境、测试环境、测试场景
工具:IBM、HP、OpenSource工具都支持。需有文档配合
RBI方法
目标:快速识别性能瓶颈
内容:重点测试“吞吐量”指标,因为RBI认定80%的系统性能瓶颈由吞吐量造成。
按照网络、硬件、数据库、应用服务器、代码的顺序自上而下分析性能
工具:IBM、HP、OpenSource工具都支持。需使用分析模块、根据Weblogic、Oracle区别有专门的工具实现RBI。
性能下降曲线分析法
目标:性能随着用户数的增加而出现下降趋势的曲线分析、查看性能下降的环境点与上下文。确定性能阀值。
内容:通过单用户区域、性能平坦区域、压力区域、性能拐点进行监控和分析。
工具:IBM、HP、OpenSource工具都支持。IBM报表功能更强。
HP(LoadRuner)性能分析法
特点:侧重于该厂商的性能分析方法、主要体现在需求收集、VU脚本。
测试阶段
对于互联网应用软件,性能是其质量的一个非常重要的组成部分。作为解决软件性能问题的重要手段,软件性能测试已经广为人们所熟悉,并受到很高的关注。一般而言,软件性能测试都是在项目的后期才开展,被测试的对象通常是已经具备一定稳定性的产品。而实际上,软件性能测试应贯穿于整个软件生命周期中,和功能测试一样,软件性能测试也分为几个阶段。
软件生命周期与软件性能测试
不论哪种软件生命周期模型需求分析、设计、编码、测试和运行维护这几个阶段都是其中的基本要素,只是在不同的软件生命周期模型中可能迭代、合并、拆分或重组这几个阶段,在此不做过多的描述。与其他几个阶段相对应,测试从软件开发过程按阶段可以划分为:单元测试集成测试系统测试,在其他的书上可能还能见到诸如确认测试验收测试等名词,但是前3种测试确实是最基本的测试活动,而其他的测试活动只是在某些软件开发过程中会发生。
值得注意的是,通常在谈论单元测试、集成测试和系统测试时,其实仅仅谈论的是不同阶段的功能测试;而当讨论软件性能测试时,绝大多数的情况是,一个已经开发完毕或基本开发完毕的软件,测试人员用一种或几种软件性能测试工具,以尽量模拟真实用户行为的方式对该软件进行并发操作,收集并比较不同场景的结果,然后对软件的性能进行分析,这个活动通常发生在系统测试阶段,甚至更往后的阶段,如运行维护阶段。
一直以来,软件性能测试跟单元测试集成测试似乎都是绝缘的。可是它们真的应该是绝缘的吗?没有任何理由可以说明软件性能测试跟单元测试、集成测试无关,除非你认为“这太难了,我不会做”。
测试术语
响应时间
我把“响应时间”的概念确定为“对请求作出响应所需要的时间”,把响应时间作`为用户视角的软件性能的主要体现。响应时间划分为“呈现时间”和“系统响应时间”两个部分。
其中“呈现时间”取决于数据在被客户端收到响应数据后呈现页面所消耗的时间、而“响应时间”指J2EE应用服务器从请求发出开始到客户端接受到数据所消耗的时间。软件性能测试一般不关注“呈现时间”,因为呈现时间很大程度上取决于客户端的表现。在这里我们没有使用很多软件性能测试定义中的概念——“系统响应时间”定义为“应用系统从请求发出开始到客户端接收到最后一个字节数据所消耗的时间”,没有使用这种标准的原因是,可以使用一些编程技巧在数据尚未完全接收完成时进行呈现来减少用户感受到的响应时间,对于HNDLZCGLXT的这个项目中,我们针对C/S系统采用前者标准,对于B/S我们依然采用后一种标准。
并发用户数
我把“并发用户数”与“同时在线数”进行区别对待,我的“并发用户数”的标准是:并发用户数取决于测试对象的目标业务场景,因此,在确定这个“并发用户数”前,必须(必要)先对用户的业务进行分解、分析出典型的业务场景(也就是用户最常使用、最关注的业务操作),然后基于场景采用某些方法(有多种计算并发用户数的数学模型与公式)获得“并发用户数”。
这样做的原因是:假设一个应用系统、最高峰有500人同时在线、但这500人却不是并发用户数、因为假设在一个时间点上、有50%的人在填写复杂的表格(填写表格动作对服务器没有任何负担、只有在“提交”动作的时候才会对服务器系统构成压力)、有40%的人在不停的从一个页面跳转到另外一个页面(不停发出请求与回应、产生服务器压力)、还有10%的人挂在线上,没有任何操作在发呆(没有对服务器构成压力的动作)。因此只有那40%的人真正对服务器产生了压力,从这里例子可以看出、并发用户数关心的是不但是业务并发用户数、还取决于业务逻辑、业务场景。因此我们需要本文第六部分软件性能测试文档4、5、6。
吞吐量
我把吞吐量定义为“单位时间内系统处理的客户请求的数量”,直接体现软件系统的性能承载能力,对于交互式应用系统来说、吞吐量反映的是服务器承受的压力、在容量规划的测试中、吞吐量是一个重要指标、它不但反映在中间件、数据库上、更加体现在硬件上。我们在以下方面利用这个指标:
(1) 用来协助设计软件性能测试场景,衡量软件性能测试是否达到了预计的设计目标、比如J2EE应用系统的连接池、数据库事务发生频率、事务发生次数。
(2) 用来协助分析性能瓶颈、参照本文第二部分总的RBI方法。
性能计数器
性能计数器式描述服务器或操作系统性能的一些数据指标、例如对WINDOWS来说使用内存数、CPU使用率、进程时间等都是常见的计数器。 [Page]
对于性能计数器这个指标来说、需要考虑到的不但有硬件计数器、web服务器计数器、Weblogic服务器计数器、Servlet性能计数器、EJB2的性能计数器、JSF性能计数器、JMS性能计数器。找到这些指标是使用性能计数器的第一步、关键是找到性能瓶颈、确定系统阀值、提供优化建议才是性能计数器使用的关键。性能计数器复杂而繁多、与代码上下文环境、系统配置情况、系统架构、开发方式、使用到的规范实现、工具、类库版本都有紧密的联系、在此不作赘述。
思考时间
我把思考时间确定为“休眠时间”。从业务系统的角度来说,这个时间指的是用户在惊醒操作时、每个请求之间的时间间隔、从自动化测试的角度来说、要真实的测试模拟用户操作、就必须在测试脚本中让各个操作之间等待一段时间、体现在脚本上就是在操作之间放置一个Think的函数,体现为脚本中两个请求语句之间的间隔时间、不同的测试工具提供了不同的函数或方法来实现思考时间、比如HP LoadRuner和IBM Rational Performance Tester的方式就完全不同。
测试要点
1、 软件性能测试是在功能测试完成之后进行。
2、 软件性能测试计划、方案一般与测试用例统一在一个文档里。
3、 测试环境应尽量与用户环境保持一致。
4、 软件性能测试一般使用测试工具和测试人员编制测试脚本来完成,软件性能测试的环境应单独运行尽量避免与其他软件同时使用。
5、 软件性能测试的重点在于前期数据的设计与后期数据的分析。
6、 软件性能测试的用例主要涉及到整个系统架构的问题,所以测试用例一旦生成,改动一般不大,所以做软件性能测试的重复使用率一般比较高。(说明:当系统中出现的某个功能点需要修改,它一般只会影响到功能测试的设计用例,而对于软件性能测试,很少影响到软件性能测试的设计用例。但是如果某个功能有较大的修改,软件性能测试也应该进行重新测试。)
小Tips
1、 软件性能测试指标的来源:测试的依据是产品的需求规格说明书;如果用户没有提出性能指标则根据用户需求、测试设计人员的经验来设计各项测试指标。
2、 软件性能测试的目的:通过测试确认软件是否满足产品的性能需求,同时发现系统中存在的性能瓶颈,起到优化系统的目的。
3、 软件性能测试的指标:服务器的各项指标(CPU使用率、内存占用率、硬盘占用率等)、后台数据库的各项指标和软件的响应时间:
(1) 操作系统有关的指标:CPU平均利用率、内存平均占用率、硬盘占用率、I/O数量、网络时延
(2) 数据库有关的指标:I/Owait、Mem平均使用率、cpu平均使用率、在一次I/O操作中所读的最大BLOCKS数、Log的增长情况、数据库的访问速度、数据库能支持的最大用户数、数据库CACHE命中率、不同数据库参数下的性能情况、锁的处理
(3) 软件有关的指标:交易的平均响应时间(从接收请求到回复响应的时间)、每秒交易数量(单位时间里的执行次数)、对中间件功能的调用、远程处理延迟
4、 查看性能指标的命令和方法:
vmstat:虚拟内存的统计(cpu/io)
iostat:设备的IO统计
netstat:网络活动信息统计
top:内存统计
cat /proc/meninfo:查看系统的总men大小
cat /proc/cpuinfo:查看系统总CPU大小
df –k:查看系统硬盘大小
free -m:查看内存使用情况
举例说明:
(1)查看CPU使用情况的命令
每5秒刷新一次,最右侧有CPU的占用率的数据:$ vmstat 5
top 然后按Shift+P,按照进程处理器占用率排序:$ top
(2)查看内存使用情况的命令
用free命令查看内存占用情况:$ free
top 然后按Shift+M, 按照进程内存占用率排序:$ top
(3)查看网络流量
参考资料
最新修订时间:2024-04-09 04:05
目录
概述
目的
基本概念
功能测试
参考资料