background image

负载测试、压力测试和性能测试的区别

负载测试

(Load testing)、压力测试(Stress Test,应称为强度测试)和性能测试,这三个概

念常常引起混淆,难以区分,从而造成不正确的理解和错误的使用。之前,也有不少讨论,
比较有名的,应归为

Grig Gheorghiu's 的两篇博客:

  

Performance vs. load vs. stress testing

  

More on performance vs. load testing

  负载测试、压力测试和性能测试的测试目的不同,但其手段和方法在一定程度上比较相
似,通常会使用相同的测试环境和测试工具,而且都会监控系统所占用资源的情况以及其
它相应的性能指标,这也是造成人们容易产生概念混淆的主要原因。
  我们知道,软件总是运行在一定的环境下,这种环境包括支撑软件运行的软硬件环境
和影响软件运行的外部条件。为了让客户使用软件系统感到满意,必须确保系统运行良好,
达到高安全、高可靠和高性能。其中,系统是否具有高性能的运行特征,不仅取决于系统本
身的设计和程序算法,而且取决于系统的运行环境。系统的运行环境会依赖于一些关键因素,
例如:
  系统架构,如分布式服务器集群还是集中式主机系统等。
  硬件配置,如服务器的配置,

CPU、内存等配置越高,系统的性能会越好。

  网络带宽,随着带宽的提高,客户端访问服务器的速度会有较大的改善。
  支撑软件的选定,如选定不同的数据库管理系统

(Oracle、MySQL 等)和 web 应用服务器

(Tomcat、GlassFish、Jboss、WebLogic 等),对应用系统的性能都有影响。
  外部负载,同时有多少个用户连接、用户上载文件大小、数据库中的记录数等都会对系
统的性能有影响。一般来说,系统负载越大,系统的性能会降低。
  从上面可以看出,使系统的性能达到一个最好的状态,不仅通过对处在特定环境下的
系统进行测试以完成相关的验证,而且往往要根据测试的结果,对系统的设计、代码和配置
等进行调整,提高系统的性能。许多时候,系统性能的改善是测试、调整、再测试、再调整、

…一个持续改进的过程,这就是我们经常说的性能调优(perormance tuning)。
  在了解了这样一个背景之后,就比较容易理解为什么在性能测试中常常要谈负载测试。
从测试的目的出发、从用户的需求出发,就比较容易区分性能测试、负载测试和压力测试。性
能测试是为了获得系统在某种特定的条件下

(包括特定的负载条件下)的性能指标数据,而

负载测试、压力测试是为了发现软件系统中所存在的问题,包括性能瓶颈、内存泄漏等。通过
负载测试,也是为了获得系统正常工作时所能承受的最大负载,这时负载测试就成为容量
测试。通过压力测试,可以知道在什么极限情况下系统会崩溃、系统是否具有自我恢复性等,
但更多的是为了确定系统的稳定性。
  那么,如何给负载测试、压力测试下个定义呢

?根据上述讨论,我们可以给出如下的定

义:
  负载测试是模拟实际软件系统所承受的负载条件的系统负荷,通过不断加载

(如逐渐增

加模拟用户的数量

)或其它加载方式来观察不同负载下系统的响应时间和数据吞吐量、系统

占用的资源

(如 CPU、内存)等,以检验系统的行为和特性,以发现系统可能存在的性能瓶颈、