`
newleague
  • 浏览: 1504580 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

我对性能测试、压力测试、负载测试的理解(转)

阅读更多

斗胆在此发表一些个人理解与看法,权作抛砖引玉,望各路英雄能各抒己见,不吝赐教。

  首先,我们看一下来自百度百科的定义:

  1、性能测试:是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。

  2、负载测试:负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。

  3、压力测试:是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。

  我在这里简单谈一下我对三个概念的看法。

  一、性能测试

  性能测试的目的是找到系统在某种条件下的瓶颈,前提是这种条件在软件或服务的实际应用中可能发生。例如百度主页会同时有10万人访问,这是可能的。因此测试10万个Vuser同时Hit是有意义的,但是会不会有10亿人同时访问?显然不会,至少在当今不会,因此测试的数据量定在10亿个Vuser是无意义的,这种行为不靠谱。因此,在这一点上我们可以得出结论,具有清晰的、有意义的并且意义确定的预期值是进行一次性能测试的关键要素。

  所以,我们在进行性能测试之前,首先要明确两个值:一个是系统负载预期值,一个是系统响应时间的预期值。有了这两个目标,才可以使用对系统持续增加负载的方法来观察系统的瓶颈所在。

  那么性能测试就是简单的添加负载测试吗?显然不是。前面说过,性能测试的目的是要找出系统的瓶颈所在,而系统的瓶颈可能存在于各种方面。在代码方面,比较差的算法、硬代码多的模块等低效率的代码可能产生瓶颈;在数据库方面,冗余或者复杂的数据可能产生瓶颈;操作系统方面,CPU、磁盘、I/O系统、总线及兼容性等方面可能产生瓶颈;而在通信传输层面上,交换(路由)的转发效率、网络硬件质量等都可能引发系统瓶颈。对于以上这些可能引发瓶颈的原因,我们可以进行所谓白盒测试来找到问题的关键。各种层面上的问题,都有相应的测试工具或测试设备的支持,如果没有合适的工具,也可以自己进行设计。例如一些CPU监控工具、代码检测、数据库事件探查器、Chariot等,以及网络分析仪、数据分析仪等通信分析仪器。这些都是性能测试的利器。

  我们在性能测试出现瓶颈时,需要及时的调试对应的系统问题,但是如果在调试完成之后,系统表现好了一些,但是仍然没有达到预期目标,这个时候我们就应该把目光放在系统的其他层面上。由于一个系统是由多个子系统协作的,因此各个子系统之间有着密切的关联性。以WEB系统为例,当代码层以及数据库层都进行清洗之后,还可以通过其他途径提高系统的性能,以突破瓶颈,达到预期目标。

  性能测试的另外一个目的是要建立一组被测系统的基准数据,系统在同样的测试环境与测试条件下,表现应当符合或优于基准数据的要求,否则测试不通过。另外,基准数据也可以为其他类似的系统提供预期数据及预期返回时间的数值参考。

  本文出自alitester的51Testing软件测试博客:http://www.51testing.com/?271947

  二、负载测试

  负载测试的范围个人认为比性能测试要狭窄一些,负载测试通常定义为给被测系统加上它所能操作的最大任务数的过程。负载测试考验系统的两个指标,一个是系统的容量,一个是系统的耐久性。

  测试系统容量是指给系统添加大数据量的文件或者数据,让系统进行处理并实时观察系统的表现情况。例如大数据量文件输入让系统处理(我们很熟悉的操作,亲们知道是啥意思吧?),大访问量的输入处理等。目的是找到系统能添加负载的最大量。而测试系统耐久性则指的是给出数量巨大的任务,让系统始终处于高负荷量的运行状态,并观察记录系统表现情况的测试方式。目的是找到系统所谓的“疲劳点”。例如运行多少时间之后系统返回时间开始变大,系统什么时候处理时间变得缓慢等都是考察的内容。

  负载测试实现的前提是要先准备巨大的数据量,例如上百兆的文件、上万的用户等。负载测试不会以使系统崩溃为目的,因此负载测试的期望值一般以满足使用需求为主,不需要太夸张的数值。

  三、压力测试

  任何能使系统崩溃的测试都可以称之为压力测试。这一点我在会上已经多次说过了。比如给出超出系统期望值两倍(一般业内共识是两倍)的数据量让系统处理,或者突然断开与数据库的连接然后再恢复,甚至是在服务器上运行消耗CPU、磁盘等资源的任务,总而言之,压力测试就是要想方设法的给系统添加压力,让系统出现故障,然后观察系统在出现故障时的反应以及故障恢复的能力。例如系统是缓慢死亡的还是猝死的,是不是保存了崩溃前的数据,故障恢复的时间有多久,恢复之后能不能返回原先的工作状态等等,只要是有利于提高系统在大压力情况下的表现的,都是考察的内容。

  综上所述,性能测试、负载测试以及压力测试貌似是差别很大的测试方式,到底是不是这样呢?让我们回到我在会上提到的测试一个Wiki系统并发500次点击量的例子。

  在这个例子中,我提到我们的测试者使用了LoadRunner,让Vuser从50一直增加到1000的过程中,观察系统的表现,重点关注响应数以及响应时间这两个量。在这个例子中,当系统添加到50个Vuser时点击数及响应数都保持在100左右,系统表现良好,而当添加到250直至1000个 Vuser之后,系统点击数仍然保持在100,而响应时间最后超过了150秒,最后系统崩溃。

  那么这次测试到底测了些什么呢?或者这次测试到底算什么方式的测试呢?我们来分析一下。首先,我们设定了一个系统预期值500次点击量,没有设置响应时间,因为在正常情况下,点击就应该马上有响应,因此响应时间应该为零。这是性能测试和负载测试的基本要求。其次,当系统添加到250个Vuser之后,点击数仍然还是100,出现瓶颈了,而找系统的各种瓶颈正是性能测试的主要任务(此时CPU监控显示使用率为96%)。然后,我们给出了一个大数据量的访问,500个Vuser,这个值系统在4分钟到6分钟的时间之内,勉强还能跑起来,这是负载测试的典型情况,当然500个Vuser是期望值所定的,负载测试是否最大只能是这个数值还有待商榷。最后Vuser增加到1000,系统崩溃,这是压力测试的目的。在这次测试实践中,我们通过性能测试知道了系统目前的最大瓶颈在哪里;通过负载测试了解到500个Vuser条件下至少还能跑起来,因此可以试一下提高CPU性能是否能提高系统性能;通过压力测试了解到系统的响应时间是缓慢增加的,崩溃过程是逐渐进行的。因此可以着手进行系统优化,然后准备下一次测试。

  上面这个例子说明,一次测试可以包含性能测试、负载测试以及压力测试三个方面的内容。它们并不是必须独立进行测试的。其实真正到了测试操作环节,性能测试、负载测试、压力测试都是基本一致的,只是各自所关注的东西不一样罢了。

  吾辈愚见,实属班门弄斧。望各位达人体谅伏案打字之苦,不吝赐教一二,授业解惑,不胜感激。此致。

 

http://www.51testing.com/html/96/n-106496.html

分享到:
评论

相关推荐

    性能测试方案 作压力,负载测试

    在教学环境下进行性能测试,通常是为了教育学生如何模拟真实世界中的使用场景,理解系统在极限条件下的行为,以及发现潜在的性能瓶颈。本方案以Bugzilla为例,一个开源的缺陷跟踪系统,来说明如何制定和执行性能测试...

    VSTS 性能测试 压力测试 性能分析

    在IT行业中,性能测试和压力测试是评估软件系统能力的关键环节。Visual Studio Team System (VSTS) 提供了强大的工具来执行、监控和分析这些测试,确保应用在高负载下仍能保持稳定和高效。本篇文章将深入探讨如何...

    jmeter性能测试报告.docx

    JMeter是一款广泛使用的开源性能测试工具,适用于模拟多种负载条件,进行负载测试、压力测试、并发测试和容量测试,以验证系统的性能表现。 1.1 性能测试概念 性能测试包括负载测试和压力测试,前者用于了解系统在...

    负载测试、压力测试和性能测试的区别是什么?

    负载测试(Loadtesting)、压力测试(StressTest,应称为强度测试)和性能测试,这三个概念常常引起混淆,难以区分,从而造成不正确的理解和错误的使用。之前,也有不少讨论,比较有名的,应归为GrigGheorghiu's的两篇...

    深入理解性能测试概念

    本文将通过一个生动的故事,帮助我们更好地理解性能测试、压力测试和容量测试这三个核心概念。 ### 性能测试:确保系统在正常工作条件下的表现 故事中的农夫寻找一匹能够承载三袋大米的骡子,类似于用户对系统提出...

    软件测试中的性能测试与负载测试技巧2.pptx

    ### 软件测试中的性能测试与负载测试技巧 #### 第一章:简介 ##### 1.1 什么是性能测试与负载测试? - **性能测试**:旨在评估系统在特定工作负载下的表现,如响应时间、吞吐量、资源利用率等。 - **负载测试**:...

    jmeter-压力测试报告-超细

    首先,JMeter是一款由Apache软件基金会开发的负载和性能测试工具,适用于Web应用、FTP服务器、数据库和其他协议的服务。它支持多线程,可以模拟多个并发用户,以检查系统在高负载下的表现。"jmeter-压力测试报告-...

    性能测试入门 性能测试入门

    性能测试是软件开发过程中的重要环节,主要用于评估和优化系统的...通过学习和实践这些性能测试知识,你可以更好地理解和执行性能测试任务,提升系统的整体性能,确保软件产品能够满足用户的需求并具备良好的用户体验。

    全栈性能测试修炼宝典

    性能测试类型包括负载测试、压力测试、耐久测试、稳定性测试等,每种测试都有其特定的目的和应用场景。 负载测试是确定系统在正常和预期的工作负载下表现如何,以验证系统能否处理预期的用户数量。压力测试则是逐步...

    性能测试pdf电子书

    性能测试可以细分为负载测试、压力测试、稳定性测试等多种类型,其中负载测试用来确定系统在实际工作压力下的表现,压力测试用来评估系统在超过正常工作负荷时的极限和崩溃点,稳定性测试则关注系统长时间运行的稳定...

    负载测试与性能测试.pdf

    负载测试与性能测试是软件质量保证的重要组成部分,主要关注系统在高负载和压力环境下的表现。这两个术语虽然经常一起使用,但它们之间存在微妙的差异。 1. **性能测试(Performance Test)**: 性能测试旨在评估...

    软件测试课件(性能测试)PPT

    《软件测试:深入理解性能测试》 在软件开发过程中,测试是不可或缺的一环,它确保了产品的质量和稳定性。尤其在性能测试领域,我们关注的是软件在各种条件下的运行效率、响应速度以及系统资源的利用情况。这个...

    软件性能测试过程详解与案例剖析

    性能测试的应用领域包括了性能测试、负载测试、压力测试、配置测试、并发测试、可靠性测试、失效恢复测试等多种方法,这些方法各有侧重点,但都服务于软件性能的评估和优化。书中也对性能测试的应用领域进行了分析,...

    RabbitMQ性能测试报告

    本次测试的主要目标是对RabbitMQ服务进行单机性能压力测试,旨在了解其在不同工作负载下的性能表现,以及其处理能力和稳定性。通过测试,我们可以确定RabbitMQ在不同场景下的吞吐量、延迟和资源消耗情况,从而为其在...

    淘宝性能测试白皮书V1.0

    性能测试类型是性能测试的重要组成部分,包括性能测试、负载测试、压力测试、稳定性测试等。性能测试关注系统的响应时间和处理能力;负载测试主要了解系统在不同负载下的表现;压力测试用来找出系统的瓶颈;稳定性...

    性能测试报告-demo模板

    性能测试报告-demo模板 性能测试报告是软件测试中的一种重要文档,旨在评估软件系统的性能,以确保软件系统能够满足用户的需求。以下是性能测试报告的详细知识点: 一、性能测试的目的 性能测试的主要目的是评估...

    压力测试(负载测试)工具.rar

    JMeter支持多种测试类型,包括功能测试、性能测试、负载测试和压力测试,旨在模拟大量并发用户,以评估系统的稳定性和性能极限。 ### JMeter组件 1. **线程组(Thread Group)**:这是测试计划的基本构建块,代表...

    Jmeter性能测试报告模板

    以上是对Jmeter性能测试报告模板中的知识点进行的详细解析。通过这份报告,读者可以了解到如何进行性能测试、如何分析测试结果以及如何根据测试结果进行优化。这对于提高软件产品的质量和性能至关重要。

Global site tag (gtag.js) - Google Analytics