大家好,我叫令狐冲,是五岳剑派中华山派的大师兄。我在华山派负责性能测试工作已经有五年的时间了,但是有一个问题我始终搞不明白。这个问题说出来还怪不好意思的,其实是个很基础的问题,就是负载测试和压力测试到底有什么区别。做为大师兄,说我搞不懂这个问题是很没有面子的事情,所以五年来我一直装作已经明白了。直到今天衡山派的莫大先生问起我这个问题,我答不上来,自觉对不起师父,并为我自己不求甚解的学习态度深深地感到惭愧。于是我回来请教了师父岳不群。他是这样告诉我的:

 

压力测试

 

对系统不断施加压力的测试,是通过确定一个系统的瓶颈或不能接收用户请求的性能点,来获得系统能提供的最大服务级别的测试。例如测试一个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

是的,我同意劳德诺的

 

令狐冲 09:22:22

我的目的不是要给客户讲

令狐冲 09:22:27

最终目的是我自己要搞清楚

令狐冲 09:22:34

因为我越做发现自己没搞清楚

令狐冲 09:23:45

至少我现在知道一件事

令狐冲 09:24:13

现在我所知道的性能测试这方面的高手里面,理解也是有分歧的

仪琳 09:24:17

令狐大哥越来越自信了

令狐冲 09:24:28

 

陆大有 09:26:36

In software testing, stress testing often refers to tests that put a greater emphasis on robustness, availability, and error handling under a heavy load,

rather than on what would be considered correct behavior under normal circumstances. In particular, the goals of such tests may be to ensure the software

doesn't crash in conditions of insufficient computational resources (such as memory or disk space), unusually high concurrency, or denial of service attacks.

陆大有 09:26:44

 

林平之 09:26:57

这是什么??

陆大有 09:27:12

维基百科上的解释,也是一家之言……

高根明 09:27:27

百家争鸣

令狐冲 09:27:33

令狐冲 09:27:41

目前就先百家争鸣吧

高根明 09:27:46

对一个问题的解释越多,其实是好事。

令狐冲 09:27:56

但我们学武功至少要选一门吧

林平之 09:28:09

没有一个绝对的标准

令狐冲 09:28:11

入门的时候没办法全学吧

令狐冲 09:28:19

所以我得选一门学

高根明 09:28:25

说明大家都在关注,有关注就有思考,有思考就有争论,有争论就有结果,有结果,就会有一些进步。

陆大有 09:28:26

在心里,我是同意那种说压力测试是高负载的说法

令狐冲 09:28:48

是的

林平之 09:28:54

高根明

令狐冲 09:29:00

目前没有定论,不代表我们不能去追求定论

高根明 09:29:02

令狐冲 09:29:07

标准啊

令狐冲 09:29:15

IT界不是看重标准吗

令狐冲 09:29:23

最终一定要有个标准出来的

高根明 09:29:25

很多事情,都有绝对的定论。但是,这正式有意思的地方。

令狐冲 09:29:29

不然大家怎么做事

林平之 09:29:39

那么stessLoad testing到底有什么区别呢??

施戴子 09:29:43

兄弟,你说你啥时候给客户讲压力测试、负载测试这种概念?

高根明 09:29:50

当然,标准是有的。比如,什么样的门派隶属于名门正派。

林平之 09:29:54

那还要很久

陆大有 09:29:55

标准,这个标准由谁来搞呢?国家标准局,出个国家标准出来?

林平之 09:30:08

他们只知道,要保证系统的性能

施戴子 09:30:23

说一下你将在什么场景讲这种概念性的东西?

陆大有 09:30:33

对啊,我目前的想法,就是不要给客户说这么多理论上的东西

劳德诺 09:30:37

给自己员工培训的时候。

 

劳德诺 09:31:01

或者吹牛的时候。

林平之 09:31:07

在跟自己的员工,或者同行说的时候比较多用这些概念,有的时候也跟客户讲

陆大有 09:31:10

搞明白问题在哪儿,就可以了,而关于这些理论的问题,选一个自己喜欢的或者自己认可的,给别人吹去就可以了

陆大有 09:31:27

但是千万要有一点,要能自圆其说

令狐冲 09:31:33

一个是培训的时候

令狐冲 09:31:43

还有一个是给客户讲解的时候

令狐冲 09:31:56

不然他们会问你为什么这样搞,而不那样搞

陆大有 09:32:12

 

令狐冲 09:32:14

既然你是专家,他们不懂没关系,但你不能不懂,你必须给个明确的解释

林平之 09:32:14

恩,基本上是这个理论,自圆其说

高根明 09:32:16

打消客户的疑问,是主要工作之一。

林平之 09:32:21

因为客户也不知道这些概念

令狐冲 09:32:26

是啊

陆大有 09:32:33

那选一个大家认可的,也就是市面上流行的,给他们解释去,即使你不认可这个说法……

令狐冲 09:32:36

还有一个是我们自己的态度

令狐冲 09:32:43

一方面我们自己也没底

令狐冲 09:32:59

心里没底的事情我做起来也不爽

施戴子 09:33:10

 

劳德诺 09:33:18

有时候心里没底也要上。

施戴子 09:33:22

你把这个图描述清楚就行了

施戴子 09:33:32

并不需要那么书面的概念来支撑

陆大有 09:34:00

这个图不错,保存,谢谢四师兄

林平之 09:35:43

这个图来自哪里,我也觉得不错,收藏

高根明 09:35:44

客户一般都会说,要做一下性能测试,比较少说,是做负载还是压力。

施戴子 09:35:49

你需要告诉客户的就是,

1、如何找到X,如何找到Z,以及Y?时,系统会崩溃。

2、如何提高XYZ

3、如何如何根据客户提供的XYZ值得到系统的最小配置

 

令狐冲 09:36:17

是的

施戴子 09:36:18

 ,不告诉你,你把图保存下来不就得了。

高根明 09:36:19

他们还会说,可劲的压,看看多大劲,能把系统压趴了。

令狐冲 09:36:24

但是也有的会说做压力测试

令狐冲 09:36:40

但是他们嘴里说的压力测试可能并不是我们说的压力测试

高根明 09:36:40

是的。

令狐冲 09:36:47

这就是我今天拿来讨论的起因

令狐冲 09:37:00

今天项目组的人跟我说要做压力测试

高根明 09:37:00

负载测试,其实也可以理解为一种压力测试。

陆大有 09:37:05

你明白他们所说的意思就可以了,千万别较真以为他们所说的压力测试就是今天咱们讨论的压力测试……

陆大有 09:37:13

那还不把自己烦恼死啊

施戴子 09:37:15

沟通的时候,如果不能确认别人到底是说的什么,你需要怎么做?

令狐冲 09:37:20

我现在就是烦恼啊

陆大有 09:37:29

转换描述方式

林平之 09:37:32

小气鬼

高根明 09:37:57

通过沟通,清晰的知道客户的真是需求是什么。

施戴子 09:38:11

当然是反馈!

当他说了我们要做压力测试,你可以问,是不是要找到系统快崩溃时的用户数

陆大有 09:38:39

也就是用不同的方式以及语言来描述客户内心所需要的那个目标

施戴子 09:38:56

他有可能说是,有可能说,我要的是某个业务满足规定的最大时间,最大能支撑多少用户

林平之 09:38:58

但是系统快崩溃的用户数有的时候是没有意义的

林平之 09:39:10

那个时候响应时间已经很长??

施戴子 09:39:24

有意义,你得规划好,你的系统至少需要什么环境来支撑。

令狐冲 09:39:24

这就是问题所在

令狐冲 09:39:33

对于用户没意义

施戴子 09:39:35

以便客户购买机器

 

令狐冲 09:39:38

但对于开发人员有意义

令狐冲 09:39:44

站的角度不同

高根明 09:39:54

不同角色,关注的点,是不一样的。

施戴子 09:40:12

你跟客户吹的时候,就要把XYZ值的意义拿出来,说出各个值对他们的意义。

林平之 09:40:13

但是你想系统在濒临崩溃之前其实已经在响应时间上不能被用户接受了

高根明 09:40:24

而且,这些角色从自己的位置出发,理解问题的方式也是有所不同。

令狐冲 09:40:33

但做为开发人员来说,他还是想知道这个值

令狐冲 09:40:40

啥时候我的系统会崩了,为啥会崩了

施戴子 09:41:03

不能接受是不能接受,假设说把应用服务器都弄崩了,需要手工重启,你说这种情况客户会同意么。

令狐冲 09:41:20

今天讨论还是不错的

令狐冲 09:41:22

有收获

任盈盈 09:41:49

林平之(29949260) 09:40:13

但是你想系统在濒临崩溃之前其实已经在响应时间上不能被用户接受了

施戴子 09:41:53

崩了意思是,系统不再提供服务,需要你重启你的应用。

这样就需要客户投入额外的人力去解决这个事

林平之 09:42:07

哦,这种情况应该测试,但是在这种情况下你怎么看你的事务情况的,这种情况下肯定已经有大量的事务fail

施戴子 09:42:07

并且需要随时关注,这是客户不能接受的

陆大有 09:42:19

这个时候,就可以用客户来压开发了……

令狐冲 09:42:19

看来大家还是多数是倾向于刚才的第一种廉洁

令狐冲 09:42:21

说法

施戴子 09:42:42

令狐冲你提的问题,把意见整理一下,给个结论出来。

令狐冲 09:42:47

好的

任盈盈 09:42:48

很多系统要求,在压力非常大的时候,你可以非常慢,也可以拒绝服务,但不能崩,象网游的主页

陆大有 09:42:48

up

林平之 09:42:56

是呀,整理一下

令狐冲 09:43:03

我会整理的

高根明 09:43:05

可以挂起,不能宕机。

林平之 09:43:18

令狐冲 09:43:20

哈哈

令狐冲 09:43:21

劳德诺 09:43:23

同意任盈盈......

令狐冲 09:43:24

有效果

高根明 09:43:32

内紧外松。

施戴子 09:43:36

现在暂停讨论,30分钟后,等令狐冲把这个问题的结果给出来。如有必要进行第二轮讨论

林平之 09:43:39

但是是否运行被拒绝服务,但不崩溃的现象呢??

令狐冲 09:43:44

 

林平之 09:43:48

哈哈

令狐冲 09:43:49

30分钟太少了

令狐冲 09:43:53

我现在还要写方案

令狐冲 09:43:57

尽快吧

林平之 09:44:09

另外我也想提出一个问题

施戴子 09:44:12

不行,你先整理这个,30分钟足够了。

林平之 09:44:19

希望能在第二轮中进行讨论

施戴子 09:44:20

第二轮你可以不参加讨论。

劳德诺 09:44:31

我也有问题......

林平之 09:44:38

Hoho令狐冲整理

施戴子 09:44:53

劳德诺,你的问题排下一轮吧。

任盈盈 09:44:57

TOMCAT有机制的,比如连接超时30秒吧,会告诉你服务器忙。120秒资源下载,告诉你下载超时。 但一般他不DOWN的。 当时时间可以改

劳德诺 09:45:04

好啊。

林平之 09:45:07

为什么不是我先排

林平之 09:45:12

 我先说的

劳德诺 09:45:34

行,我排林平之后边。

 

总结:以上就是今天早上在群里讨论的情况。我也知道,这样的讨论也许是没有结果的,但是正如五师弟所说,对一个问题的解释越多,其实是好事。说明大家都在关注,有关注就有思考,有思考就有争论,有争论就有结果,有结果,就会有一些进步。
   后来,风老前辈告诉我:“我们华山派其实是分成剑宗和气宗两派的。剑宗和气宗虽然对剑法的理解不太相同,但同样都可以练成高手。而且除了华山派之外,江湖上还有其它四岳的剑派,甚至还有少林、武当、青城等不同的派别,但是不同的武功最终是殊途同归的,目前虽然没有统一的标准,但是有一点是肯定的:性能测试是江湖上最高深的一门武学,只有将心中所学的所有系统知识融会贯通,做到剑气合一,才能成为真正的高手。”

我听得悠然神往,剑气合一,那是何等高深的境界!不知我令狐冲今生今世是否能修炼到这种境界,想到此处,我忍不住插口问道:“你见过这种真正的高手吗?”

风老前辈抬起头望向远方,盯住天边飘过的一朵白云,幽幽地道:“没有。不过很多年以前,曾经有过一个。他的名字叫做独狐求败。”