大家好,我叫令狐沖,是五岳劍派中華山派的大師兄。我在華山派負責性能測試工作已經有五年的時間了,但是有一個問題我始終搞不明白。這個問題說出來還怪不好意思的,其實是個很基礎的問題,就是負載測試和壓力測試到底有什么區別。做為大師兄,說我搞不懂這個問題是很沒有面子的事情,所以五年來我一直裝作已經明白了。直到今天衡山派的莫大先生問起我這個問題,我答不上來,自覺對不起師父,并為我自己不求甚解的學習態度深深地感到慚愧。于是我回來請教了師父岳不群。他是這樣告訴我的:

 

壓力測試

 

對系統不斷施加壓力的測試,是通過確定一個系統的瓶頸或不能接收用戶請求的性能點,來獲得系統能提供的最大服務級別的測試。例如測試一個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

行,我排林平之后邊。

 

總結:以上就是今天早上在群里討論的情況。我也知道,這樣的討論也許是沒有結果的,但是正如五師弟所說,對一個問題的解釋越多,其實是好事。說明大家都在關注,有關注就有思考,有思考就有爭論,有爭論就有結果,有結果,就會有一些進步。
   后來,風老前輩告訴我:“我們華山派其實是分成劍宗和氣宗兩派的。劍宗和氣宗雖然對劍法的理解不太相同,但同樣都可以練成高手。而且除了華山派之外,江湖上還有其它四岳的劍派,甚至還有少林、武當、青城等不同的派別,但是不同的武功最終是殊途同歸的,目前雖然沒有統一的標準,但是有一點是肯定的:性能測試是江湖上最高深的一門武學,只有將心中所學的所有系統知識融會貫通,做到劍氣合一,才能成為真正的高手。”

我聽得悠然神往,劍氣合一,那是何等高深的境界!不知我令狐沖今生今世是否能修煉到這種境界,想到此處,我忍不住插口問道:“你見過這種真正的高手嗎?”

風老前輩抬起頭望向遠方,盯住天邊飄過的一朵白云,幽幽地道:“沒有。不過很多年以前,曾經有過一個。他的名字叫做獨狐求敗。”