大家好,我叫令狐冲,是五岳剑派中华山派的大师兄。我在华山派负责 性能测试 工作已经有五年的时间了,但是有一个问题我始终搞不明白。这个问题说出来还" name="description" />
压力测试
对系统不断施加压力的测试,是通过确定一个系统的瓶颈或不能接收用户请求的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个Web站点在大量的负荷下,系统的事务响应时间何时会变得不可接受或事务不能正常执行。
压力测试的目的是发现在什么条件下系统的性能变得不可接受,并通过对应用程序施加越来越大的负载,直到发现应用程序性能下降的拐点。压力测试和负载测试有些类似,但是通常把负载测试描述成一种特定类型的压力测试——例如增加用户数量或延长压力时间以对应用程序进行压力测试。
负载测试
对系统不断地增加压力或增加一定压力下的持续时间,直到系统的一些性能指标达到极限,例如响应时间超过预定指标或某种资源已经达到饱和状态。这种测试可以找到系统的处理极限,为系统调优提供依据。
压力测试侧重压力大小,而负载测试往往强调压力持续的时间。
似乎有点道理,有点豁然开朗的感觉。可是我还不死心,我还想听听风清扬老前辈是怎么说的。一问之下,他给出的答案和师父果然不一样,他是这样说的:
1.负载测试
在这里,负载测试指的是最常见的验证一般性能需求而进行的性能测试,在上面我们提到了用户最常见的性能需求就是“既要马儿跑,又要马儿少吃草”。因此负载测试主要是考察软件系统在既定负载下的性能表现。我们对负载测试可以有如下理解:
(1)负载测试是站在用户的角度去观察在一定条件下软件系统的性能表现。
(2)负载测试的预期结果是用户的性能需求得到满足。此指标一般体现为响应时间、交易容量、并发容量、资源使用率等。
2.压力测试
压力测试是为了考察系统在极端条件下的表现,极端条件可以是超负荷的交易量和并发用户数。注意,这个极端条件并不一定是用户的性能需求,可能要远远高于用户的性能需求。可以这样理解,压力测试和负载测试不同的是,压力测试的预期结果就是系统出现问题,而我们要考察的是系统处理问题的方式。比如说,我们期待一个系统在面临压力的情况下能够保持稳定,处理速度可以变慢,但不能系统崩溃。因此,压力测试是能让我们识别系统的弱点和在极限负载下程序将如何运行。
这下我又糊涂了。师父教我做性能测试这么多年了,而且也是公认的性能测试高手,都出过好几本关于性能测试的书籍了。我知道他告诉我的那些,实际上就是从他写的其中一本书中摘抄过来的。可是我也知道,风清扬老前辈更是高手中的高手,他说的应该也不会错才是。而他们两个人的说法又很明显不一致。我到底应该听谁的呢?
于是我开了QQ,和师兄弟们在群里面聊了一下,想听听他们的意见。聊天记录摘要如下:
岳灵珊09:14:00
负载测试和压力测试的区别?这个需要讨论吗?
令狐冲09:14:01
不需要吗?
岳灵珊09:14:02
需要吗?
令狐冲09:14:03
不需要吗?
岳灵珊09:14:04
需要吗?
令狐冲09:14:05
只是讨论一下而已嘛,何必那么认真呢?不需要吗?
岳灵珊09:14:10
知道那意思不就得了?
令狐冲 09:14:15
问题是不知道
陆大有09:14:14
我觉得没必要这么细分,因为在实际中,这两个都是穿插进行的
令狐冲09:14:19
虽然我们不要死背概念,但是如果相差太远也不好
劳德诺09:14:17
概念上还是有区别的
陆大有 09:15:29
听他们的干吗?你最终是要应用在实际当中去的,实践的时候不会严格根据这两个概念来做场景吧?
令狐冲 09:15:52
还是要的
令狐冲 09:16:11
而且你在做测试的时候都不知道自己在做什么,怎么说服自己
高根明 09:16:20
概念有必要厘清。
令狐冲 09:16:28
我也这么觉得
令狐冲 09:16:40
别人提过来的需求说要做压力测试
陆大有 09:16:45
问题是实际当中,你不会严格根据这俩来进行区分场景的,ok?
令狐冲 09:17:07
我在想他们的意思也许并不一定就是要做压力测试
岳灵珊 09:17:08
我觉得沟通清楚就没问题
高根明 09:17:26
可以按照概念来实施场景,但是,不能概念化。
岳灵珊 09:17:40
把你的想法和他们说清楚,同意就ok了
劳德诺 09:17:55
性能测试,一般都有一些性能指标。我们来检查系统是否达到了这些性能指标。
负载测试,是让系统放开了去跑,在系统资源占用可接受的情况下,看看系统最好的表现是什么。
压力测试,是系统快不行了,比如内存快没了,CPU很高,在这个时候进行测试,看系统有什么样的表现。
令狐冲 09:18:04
(2008-07-09 09:16:45) 陆大有(5947956)
问题是实际当中,你不会严格根据这俩来进行区分场景的,ok?
那你就是录脚本,设并发用户数,运行,ok?
施戴子 09:18:07
搞清楚你测试的目的,然后设计相应的测试策略不就行了
施戴子 09:18:23
何必拘泥于这些说法呢
令狐冲 09:18:44
劳德诺的说话是上面的第一种
劳德诺 09:19:12
这也是通常的讲法吧。
令狐冲 09:19:15
当你做测试的时候,想让自己上升到一个高度,就必须要理论化
令狐冲 09:19:30
否则你很难说服客户甚至说服自己
施戴子 09:19:30
就像“莲花白”这种菜一样
“连花白”、“洋白菜”不都是一种东西么。
陆大有 09:19:32
错,我的目的是找出瓶颈,并尽可能优化,计划是前提,而我做计划的时候,是要根据实际来做,而不会完全根据这些概念把场景区分的那么清楚,标明哪个是压力哪个是负载
令狐冲 09:19:34
大家想是不是这个道理
劳德诺 09:20:03
这三个概念,所要做的事情的目的是不一样的.....
令狐冲 09:20:12
施戴子(52344359) 09:19:30
就像“莲花白”这种菜一样
“连花白”、“洋白菜”不都是一种东西么。
和这个意思不同,这个比喻不恰当
令狐冲 09:20:20
是的
梁发 09:20:36
支持令狐冲
陆大有 09:20:38
对于客户而言,你给他讲的东西,都是他不是很清楚的,你说什么,基本就是什么了,只要你的言行一致,那他就不会找茬
令狐冲 09:20:57
令狐冲 09:21:09
陆大有,这个是我刚做性能测试时的想法
令狐冲 09:21:15
初学者都这样想的
劳德诺 09:21:14
晕,你和客户讲概念干嘛?
令狐冲 09:21:20
可以理解
梁发 09:21:20
测试目的不同 测试策略也不同。
陆大有 09:21:22
好吧,你比我高级……
令狐冲 09:21:27
令狐冲 09:21:34
是我想要比你高级
令狐冲 09:21:40
目前还不是
陆大有 09:21:45
谢谢,我承认你比我高级
梁发 09:22:02
作为性能测试人员 必须牢记客户提出的需求属于哪种性能测试目的
令狐冲 09:22:12
是的,我同意劳德诺的