负载测试(Load testing)、压力测试(Stress Test,应称为强度测试)和性能测试,这三个概念常常引起混淆,难以区分,从而造成不正确的理解和错误的使用。

负载测试、压力测试和性能测试的测试目的不同,但其手段和方法在一定程度上比较相似,通常会使用相同的测试环境和测试工具,而且都会监控系统所占用资源的情况以及其它相应的性能指标,这也是造成人们容易产生概念混淆的主要原因。

我们知道,软件总是运行在一定的环境下,这种环境包括支撑软件运行的软硬件环境和影响软件运行的外部条件。为了让客户使用软件系统感到满意,必须确保系统运行良好,达到高安全、高可靠和高性能。其中,系统是否具有高性能的运行特征,不仅取决于系统本身的设计和程序算法,而且取决于系统的运行环境。系统的运行环境会依赖于一些关键因素,例如:

  1. 系统架构,如分布式服务器集群还是集中式主机系统等。
  2. 硬件配置,如服务器的配置,CPU、内存等配置越高,系统的性能会越好。
  3. 网络带宽,随着带宽的提高,客户端访问服务器的速度会有较大的改善。
  4. 支撑软件的选定,如选定不同的数据库管理系统(Oracle、MySQL等)和web应用服务器(Tomcat、GlassFish、Jboss、WebLogic等),对应用系统的性能都有影响。
  5. 外部负载,同时有多少个用户连接、用户上载文件大小、数据库中的记录数等都会对系统的性能有影响。一般来说,系统负载越大,系统的性能会降低。

从上面可以看出,使系统的性能达到一个最好的状态,不仅通过对处在特定环境下的系统进行测试以完成相关的验证,而且往往要根据测试的结果,对系统的设计、代码和配置等进行调整,提高系统的性能。许多时候,系统性能的改善是测试、调整、再测试、再调整、……一个持续改进的过程,这就是我们经常说的性能调优(perormance tuning)。

在了解了这样一个背景之后,就比较容易理解为什么在性能测试中常常要谈负载测试。从测试的目的出发、从用户的需求出发,就比较容易区分性能测试、负载测试和压力测试。性能测试是为了获得系统在某种特定的条件下(包括特定的负载条件下)的性能指标数据,而负载测试、压力测试是为了发现软件系统中所存在的问题,包括性能瓶颈、内存泄漏等。通过负载测试,也是为了获得系统正常工作时所能承受的最大负载,这时负载测试就成为容量测试。通过压力测试,可以知道在什么极限情况下系统会崩溃、系统是否具有自我恢复性等,但更多的是为了确定系统的稳定性。

那么,如何给负载测试、压力测试下个定义呢?根据上述讨论,我们可以给出如下的定义:

负载测试

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

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

压力测试

压力测试是在强负载(大数据量、大量并发用户等)下的测试,查看应用系统在峰值使用情况下操作行为,从而有效地发现系统的某项功能隐患、系统是否具有良好的容错能力和可恢复能力。压力测试分为高负载下的长时间(如24小时以上)的稳定性压力测试和极限负载情况下导致系统崩溃的破坏性压力测试。

压力测试可以被看作是负载测试的一种,即高负载下的负载测试,或者说压力测试采用负载测试技术。通过压力测试,可以更快地发现内存泄漏问题,还可以更快地发现影响系统稳定性的问题。例如,在正常负载情况下,某些功能不能正常使用或系统出错的概率比较低,可能一个月只出现一次,但在高负载(压力测试)下,可能一天就出现,从而发现有缺陷的功能或其它系统问题。通过负载测试,可以证明这一点,某个电子商务网站的订单提交功能,在10个并发用户时错误率是零,在50个并发用户时错误率是1%,而在200个并发用户时错误率是20%。

通过负载测试和压力测试都可以获得系统正常工作时的极限负载或最大容量。容量测试,自然也是采用负载测试技术来实现,而在破坏性的压力测试中,容量的确定可以看作是一种副产品——间接结果。

综合所述,负载测试、压力测试和性能测试的概念可以概括如下:

        负载测试是通过改变系统负载方式、增加负载等来发现系统中所存在的性能问题。负载测试是一种测试方法,可以为性能测试、压力测试所采用。负载测试的加载方式也有很多种,可以根据测试需要来选择。

        性能测试是为获取或验证系统性能指标而进行测试。多数情况下,性能测试会在不同负载情况下进行。

        压力测试通常是在高负载情况下来对系统的稳定性进行测试,更有效地发现系统稳定性的隐患和系统在负载峰值的条件下功能隐患等。

压力测试是会制定一个时间的。

负载测试、压力测试和性能测试的区别相关推荐

  1. 负载测试压力测试强度测试稳定性测试

    你看,如标题所示,测试可以分为这么多种.实际上,这只是一种性能测试的分类.按照不同的标准,还可以有别的划分. 1.按开发阶段:单元测试.集成测试.系统测试.验收测试 2.按测试实施组织:α测试(开发方 ...

  2. Android App专项测试-压力测试篇

    小伙伴们大家好,今天主要分享的主题是Android App专项测试.如何进行Android App专项测试压力测试呢?我们主要通过Android平台的一门工具Monkey.在学习本门课程之前,如果你具 ...

  3. EMQTT测试--压力测试

    之前写过一篇是关于emqtt安装和测试的,不过是在windows上 这次介绍一下压力测试 压力测试选择emqtt官方推荐的emqtt_benchmark emqtt官网推荐 emqtt_benchma ...

  4. QPS和TPS的区别、负载和压力测试的区别

    作为软件测试工程师,你应该要分清楚QPS和TPS的区别. QPS/TPS QPS(Queries Per Second):每秒查询率,是一台服务器每秒能够响应的查询次数,是对一个特定的查询服务器在规定 ...

  5. Jmeter负载和压力测试

    负载和压力的区别: 负载测试:在一定的工作负荷下,给系统造成du的负zhi荷及系统响应的时间. 压力测试:在一定的负荷条件下,长时间连续运行系统给系统性能造成的影响. TPS和QPS的区别: tps可 ...

  6. 开源的负载测试/压力测试工具 NBomber

    负载测试和压力测试对于确保 web 应用的性能和可缩放性非常重要.尽管它们的某些测试是相同的,但目标不同. 负载测试:测试应用是否可以在特定情况下处理指定的用户负载,同时仍满足响应目标.应用在正常状态 ...

  7. JMeter之负载阶梯压力测试

    适用场景:在实际的测试场景中,有时需要模拟阶梯型施压的场景,即:从某个点开始不断增加压力,直到达到某一值,然后持续运行一段时间,再继续加压,循环往复直到达到预期峰值,运行一段时间,然后再分批次退出.需 ...

  8. php项目通过不了压力测试,压力测试 – Apache ab测试和失败 – Apache或PHP配置问题?...

    我写了一个RESTful Web服务,成为使用PHP和Restler库的移动应用程序的支柱.它运行在运行Windows Server 2008 R2,PHP 5.3.5,Apache 2.2.17和M ...

  9. 性能测试、压力测试和负载测试有什么区别

    性能测试   性能测试主要测试系统的性能是否满足用户的要求,即在特定运行条件下验证系统的能力状况.性能测试主要是通过自动化测试工具模拟正常.峰值及异常负载状况,对系统的各项性能指标进行测试,测试中得到 ...

  10. 压力测试和负载测试区别_如何理解与区分软件性能测试、负载测试、稳定性测试、压力测试...

    性能测试.负载测试.稳定性测试.压力测试之间有何区别?刚开始自己也不能很好的区分,随着一些具体性能测试实践的开展,大概有一个基本的认识,总结如下: 首先,大致了解下软件产品的性能受哪些因素的影响 我们 ...

最新文章

  1. 【ES6】Promise对象详解
  2. python namedtuple用法_Python namedtuple(命名元组)使用实例
  3. python四大软件-Python未来可能面临的四大转折
  4. 计算机信息系统安全保护条例最新,计算机信息系统安全保护条例.doc
  5. 【图文详解】JAVA字面量和变量
  6. mongDB批量插值
  7. Array | 74. Search a 2D Matrix
  8. esp32 micropython spiffs_spiffs 文件系统在esp32中的应用
  9. 灰度与NFL纽约巨人队达成合作,成为NFL球队首个加密赞助商
  10. Android开发笔记(三十三)文本文件和图片文件的读写
  11. os,shutil操作——批量修改文件名,移动文件,读取文件
  12. css取消聚焦边框[Chrome,Safari]
  13. RabbitMQ之前的那些事
  14. python中的匿名函数_Python匿名函数详解
  15. android常用的动态分析工具,Android逆向-4.IDA工具介绍-动态分析界面简单介绍-Go语言中文社区...
  16. icloud 照片同步_如何确保Mac和iPhone的照片同步到iCloud
  17. flash中如何制作播放和暂停按钮(as3.0)
  18. 如何生成一个APP_ID
  19. 什么是Android逆向?如何学习安卓逆向?Android逆向自学笔记入门到实战
  20. 1036. 跟奥巴马一起编程(15)

热门文章

  1. CBSsport的NBA直播数据整理小结一下……
  2. Andriod SQLite3 数据库损坏,优化,修复,备份方案研究
  3. visual studio 和visual studio code 的区别是什么?
  4. Mouse as a Paint-Brush - 鼠标作为画笔
  5. 微信小程序短信验证登录
  6. Vue粒子特效(vue-particles插件) 粒子星空图
  7. 线性回归(四)---Lasso回归
  8. Latex中TikZ绘制3D圆锥体
  9. python浓缩(10)
  10. csv文件转换为shapefile并导出