性能测试,负载测试,压力测试以及容量测试有什么联系与区别

时间:2022-06-01 19:21:56

1.负载测试,英文是Load testing。 

负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载(如逐渐增加模拟用户的数量)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统占用的资源(如CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、内存泄漏、不能实时同步等问题。负载测试更多地体现了一种方法或一种技术。 负载测试将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。 

负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行,不是为了破坏系统。此外,负载测试还要评估性能特征,例如,响应时间、事务处理速率和其他与时间相关的方面。 

 关注点是how much 

2.压力测试,英文是Stress Testing。 

 压力测试可以被看作是负载测试的一种,即高负载下的负载测试,或者说压力测试采用负载测试技术。 

强度或压力测试是在一种需要异常数量、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈。异常情况主要指那些峰值、极限值、大量数据的长时间处理等,关注: 

 Spike testing:短时间的极端负载测试  Extreme testing:在过量用户下的负载测试  Hammer testing:连续执行所有能做的操作 例如: 

 连接或模拟了最大(实际或实际允许)数量的客户机; 

 所有客户机在长时间内执行相同的、性能可能最不稳定的重要业务功能;  已达到最大的数据库大小,而且同时执行多个查询或报表事务; 

 当中断的正常频率为每秒一至两个时,运行每秒产生十个中断的测试用例;  运行可能导致操作系统崩溃或大量数据对磁盘进行存取操作的测试用例等。 压力测试可以分为稳定性测试和破坏性测试: 

 稳定性压力测试:在选定的压力值下,持续运行24小时以上的测试。通过压力测试,可以考察各项性能指标是否在指定范围内,有无内存泄漏、有无功能性故障等。 

 破坏性压力测试:在压力稳定性测试中可能会出现一些问题,如系统性能明显降低,但很难暴露出其真实的原因。通过破坏性不断加压的手段,往往能快速造成系统的崩溃或让问题明显的暴露出来。 

 在压力测试中,会给程序加上一些跟踪机制(如log,日志等),然后必须要查看监视系统、服务器等性能的日志文件,找出问题出现的关键时间或检查测试运行参数,通过分析问题或参数从而有目的地调整测试策略或测试环境,使压力测试结果真实地反映出软件的性能。 

3.性能测试,英文performance testing 

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。 系统的性能指标,一般应在产品需求文档中有明确定义,有三种形式描述软件系统的性能指标: 

 给出产品性能的主要指标,如在100000记录中查询一个特定数据的时间为0.5秒。  以某个已发布的版本为基线,如比上一个版本的性能提高30-50%。  和竞争对手的同类产品比较。 性能测试,根据其目的分为: 

 产品性能质量测试,通过测试,决定产品是否达到产品规格书所要求的性能指标(非

功能性需求)  基准值测试,通过对当前产品的性能测试,确定产品具体的性能指标,建立性能指

标基准。基准值,作为后继产品发布的性能参考(在新版本中,性能指标要求只升不降)或和竞争对手产品比较的参考。  性能规划测试,通过不断的测试,确定所需要的硬件配置(内存、CPU、网络等)、

软件配置,以满足实现定义的性能指标要求。这种测试,对于软件系统的部署 是非常有意义的。同时,也可以进一步了解硬件参数、软件参数对系统性能的影响程度,从而保证系统具有很好的扩充性或事先制定较好的系统增容的计划。 性能测试的方法,主要有: 

 稳定压力加载,一次性将负载加到某个水平,持续一段时间,也称为flat测试。  逐渐加载或交替加载到某个负载水平,也称为“ramp-up”测试。 

 峰谷测试,确定从系统高峰时间的负载转为几乎空闲、再攀升到高负载这样峰值交

替情况下的系统性能状态/指标。这种测试兼有容量测试的特点或属于容量测试的一部分。 性能测试,一般都通过测试工具来模拟人为的操作而进行。性能测试的重点在于测试环境的建立、前期数据的设计与后期数据的分析。因为性能测试需要 获得一定特定条件下(如100、200、500、1000个实时的连接)的系统占用资源(CPU、内存等)数据或系统行为表现,而且还要依靠测试工具或软 件系统记录下这些指标变化的数据结果。例如,如果对一个Browser/Server结构的网络实时在线的培训系统软件进行测试,系统性能焦点是在不同数 量的并发连接下,服务器的CPU、内存的占用率、客户端的响应时间等…… 

测试过程中,并发连接的不断增加(负载的增加)在系统性能上的表现越来越明显。在系统性能测试时,加载过程中,每到一个测试点时须让系统平稳运 行一段时间后再获取数据,以消除不同测试点的相互影响。所以,尽量模拟不同的加载方式来进行系统的性能测试。除此之外,还可以测试TCP、HTTPS等不 同连接方式下的数据, 进行比较。通过比较和分析,可以清楚知道系统的性能状况,以及什么样的条件下系统性能达到最佳状况、什么地方是性能的瓶颈。性能测试要求测试环境应尽量与 产品运行环境保持一致,应单独运行,尽量避免与其他软件同时使用。 4.容量测试,英文Volume Testing 

通过性能测试,如果找到了系统的极限或苛刻的环境中系统的性能表现,在一定的程度上,我们完成了容量测试。 

容量可以看作系统性能指标中一个特定环境下的一个特定性能指标,即设定的界限或极限值。 

容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、 数据库记录数等),系统在其极限值状态下没有出现任何软件故障或还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。对软件容量的测试,能让软件开发商或用户了解该软件系统的承载能力或提供服务的能力,如某个电子商务网站所能承受的、同时进行交易或结算的在线 用户数。知道了系统的实际容量,如果不能满足设计要求,就应该寻求新的技术解决方案,以提高系统的容量。有了对软件负载的准确预测,不仅能对软件系统在实 际使用中的性能状况充满信心,同时也可以帮助用户经济地规划应用系统,优化系统的部署。 

 关注点是how much,而不是how fast 例如: 

 通过编辑一个巨大的文件来测试文字处理软件  通过发送一个巨大的作业来测试打印机  通过成千上万的用户邮箱来测试邮件服务器 

 有一种比较特别的容量测试是叫作“零容量测试”,它是给系统加上空任务来测试的。 5.总结 

压力测试可以看作是容量测试、性能测试和可靠性测试的一种手段,不是直接的测试目标。压力测试的重点在于发现功能性测试所不易发现的系统方面的缺陷。而容量测试和性能测试是系统测试的主要目标内容,也就是确定软件产品或系统的非功能性方面的质量特征,包括具体的特征值。容量测试和性能测试更着力于提供性能与容量方面的数据,为软件系统部署、维护、质量改进服务,并可以帮助市场定位、销售人员对客户的解释、广告宣传等服务。压力测试、容量测试、性能测试,测试的方法相似、相通,在实际测试工作中,往往结合起来进行,以提高测试效率。一般会设置专门的性能测试实验室,完成这些工作。即使用虚拟的手段模 拟实际操作,所需要的客户端有时还是很大的,所以性能测试实验室的投资较大。  

 负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。负

载测试是一种测试方法,可以为性能测试、压力测试所采用。负载测试的加载方式也有很多种,可以根据测试需要来选择。 

 压力测试是在给系统不断加压,增加并发量,直到崩溃,找到系统所能承受的极限值。  容量测试是在预先分析的极限值下,系统是否还能正常运行。比如系统考虑预期的业

务处理量会增加,这个业务数据量可以根据现在的实际业务数据量和一个增加的速度得到未来的业务数据量,然后根据计算得到的业务数据量作为一个容量来测试,当业务数据量到了预期的时候,系统跑起来是否一切正常。  

6. 负载测试与性能测试 

负载测试是为了发现系统的性能问题,负载测试需要通过系统性能特性或行为来发现问题,从而为性能改进提供帮助,从这个意义看,负载测试可以看作性能测试的一部分。但它们两者的目的是不一样的,负载测试是为了发现缺陷,而性能测试是为了获取性能指标。因为性能测试过程中,也可以不调整负载,而是在同样负载情况下改变系统的结构、改变算法、改变硬件配置等等来得到性能指标数据,从这个意义看,负载测试可以看作是性能测试所采用的一种技术,即性能测试使用负载测试的技术、使用负载测试的工具。性能测试要获得在不同的负载情况下的性能指标数据。