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

 

壓力測試

 

對系統(tǒng)不斷施加壓力的測試,是通過確定一個系統(tǒng)的瓶頸或不能接收用戶請求的性能點,來獲得系統(tǒng)能提供的最大服務(wù)級別的測試。例如測試一個Web站點在大量的負(fù)荷下,系統(tǒng)的事務(wù)響應(yīng)時間何時會變得不可接受或事務(wù)不能正常執(zhí)行。

 

壓力測試的目的是發(fā)現(xiàn)在什么條件下系統(tǒng)的性能變得不可接受,并通過對應(yīng)用程序施加越來越大的負(fù)載,直到發(fā)現(xiàn)應(yīng)用程序性能下降的拐點。壓力測試和負(fù)載測試有些類似,但是通常把負(fù)載測試描述成一種特定類型的壓力測試——例如增加用戶數(shù)量或延長壓力時間以對應(yīng)用程序進行壓力測試。

 

負(fù)載測試

 

對系統(tǒng)不斷地增加壓力或增加一定壓力下的持續(xù)時間,直到系統(tǒng)的一些性能指標(biāo)達到極限,例如響應(yīng)時間超過預(yù)定指標(biāo)或某種資源已經(jīng)達到飽和狀態(tài)。這種測試可以找到系統(tǒng)的處理極限,為系統(tǒng)調(diào)優(yōu)提供依據(jù)。

 

壓力測試側(cè)重壓力大小,而負(fù)載測試往往強調(diào)壓力持續(xù)的時間。

 

似乎有點道理,有點豁然開朗的感覺。可是我還不死心,我還想聽聽風(fēng)清揚老前輩是怎么說的。一問之下,他給出的答案和師父果然不一樣,他是這樣說的:

1.負(fù)載測試

 

在這里,負(fù)載測試指的是最常見的驗證一般性能需求而進行的性能測試,在上面我們提到了用戶最常見的性能需求就是既要馬兒跑,又要馬兒少吃草。因此負(fù)載測試主要是考察軟件系統(tǒng)在既定負(fù)載下的性能表現(xiàn)。我們對負(fù)載測試可以有如下理解:

 

(1)負(fù)載測試是站在用戶的角度去觀察在一定條件下軟件系統(tǒng)的性能表現(xiàn)。

 

(2)負(fù)載測試的預(yù)期結(jié)果是用戶的性能需求得到滿足。此指標(biāo)一般體現(xiàn)為響應(yīng)時間、交易容量、并發(fā)容量、資源使用率等。

 

2.壓力測試

 

壓力測試是為了考察系統(tǒng)在極端條件下的表現(xiàn),極端條件可以是超負(fù)荷的交易量和并發(fā)用戶數(shù)。注意,這個極端條件并不一定是用戶的性能需求,可能要遠(yuǎn)遠(yuǎn)高于用戶的性能需求。可以這樣理解,壓力測試和負(fù)載測試不同的是,壓力測試的預(yù)期結(jié)果就是系統(tǒng)出現(xiàn)問題,而我們要考察的是系統(tǒng)處理問題的方式。比如說,我們期待一個系統(tǒng)在面臨壓力的情況下能夠保持穩(wěn)定,處理速度可以變慢,但不能系統(tǒng)崩潰。因此,壓力測試是能讓我們識別系統(tǒng)的弱點和在極限負(fù)載下程序?qū)⑷绾芜\行。

 

這下我又糊涂了。師父教我做性能測試這么多年了,而且也是公認(rèn)的性能測試高手,都出過好幾本關(guān)于性能測試的書籍了。我知道他告訴我的那些,實際上就是從他寫的其中一本書中摘抄過來的。可是我也知道,風(fēng)清揚老前輩更是高手中的高手,他說的應(yīng)該也不會錯才是。而他們兩個人的說法又很明顯不一致。我到底應(yīng)該聽誰的呢?

于是我開了QQ,和師兄弟們在群里面聊了一下,想聽聽他們的意見。聊天記錄摘要如下:

岳靈珊09:14:00

負(fù)載測試和壓力測試的區(qū)別?這個需要討論嗎?

令狐沖09:14:01

不需要嗎?

岳靈珊09:14:02

需要嗎?

令狐沖09:14:03

不需要嗎?

岳靈珊09:14:04

需要嗎?

令狐沖09:14:05

只是討論一下而已嘛,何必那么認(rèn)真呢?不需要嗎?

岳靈珊09:14:10

知道那意思不就得了?

令狐沖 09:14:15

問題是不知道

陸大有09:14:14

我覺得沒必要這么細(xì)分,因為在實際中,這兩個都是穿插進行的

令狐沖09:14:19

雖然我們不要死背概念,但是如果相差太遠(yuǎn)也不好

勞德諾09:14:17

概念上還是有區(qū)別的

陸大有 09:15:29

聽他們的干嗎?你最終是要應(yīng)用在實際當(dāng)中去的,實踐的時候不會嚴(yán)格根據(jù)這兩個概念來做場景吧?

令狐沖 09:15:52

還是要的

令狐沖 09:16:11

而且你在做測試的時候都不知道自己在做什么,怎么說服自己

高根明 09:16:20

概念有必要厘清。

令狐沖 09:16:28

我也這么覺得

令狐沖 09:16:40

別人提過來的需求說要做壓力測試

陸大有 09:16:45

問題是實際當(dāng)中,你不會嚴(yán)格根據(jù)這倆來進行區(qū)分場景的,ok

令狐沖 09:17:07

我在想他們的意思也許并不一定就是要做壓力測試

岳靈珊 09:17:08

我覺得溝通清楚就沒問題

高根明 09:17:26

可以按照概念來實施場景,但是,不能概念化。

岳靈珊 09:17:40

把你的想法和他們說清楚,同意就ok

勞德諾 09:17:55

性能測試,一般都有一些性能指標(biāo)。我們來檢查系統(tǒng)是否達到了這些性能指標(biāo)。

負(fù)載測試,是讓系統(tǒng)放開了去跑,在系統(tǒng)資源占用可接受的情況下,看看系統(tǒng)最好的表現(xiàn)是什么。

壓力測試,是系統(tǒng)快不行了,比如內(nèi)存快沒了,CPU很高,在這個時候進行測試,看系統(tǒng)有什么樣的表現(xiàn)。

令狐沖 09:18:04

(2008-07-09 09:16:45)   陸大有(5947956)

問題是實際當(dāng)中,你不會嚴(yán)格根據(jù)這倆來進行區(qū)分場景的,ok

那你就是錄腳本,設(shè)并發(fā)用戶數(shù),運行,ok?

施戴子 09:18:07

搞清楚你測試的目的,然后設(shè)計相應(yīng)的測試策略不就行了

施戴子 09:18:23

何必拘泥于這些說法呢

令狐沖 09:18:44

勞德諾的說話是上面的第一種

勞德諾 09:19:12

這也是通常的講法吧。

令狐沖 09:19:15

當(dāng)你做測試的時候,想讓自己上升到一個高度,就必須要理論化

令狐沖 09:19:30

否則你很難說服客戶甚至說服自己

施戴子 09:19:30

就像“蓮花白”這種菜一樣

“連花白”、“洋白菜”不都是一種東西么。

陸大有 09:19:32

錯,我的目的是找出瓶頸,并盡可能優(yōu)化,計劃是前提,而我做計劃的時候,是要根據(jù)實際來做,而不會完全根據(jù)這些概念把場景區(qū)分的那么清楚,標(biāo)明哪個是壓力哪個是負(fù)載

令狐沖 09:19:34

大家想是不是這個道理

勞德諾 09:20:03

這三個概念,所要做的事情的目的是不一樣的.....

令狐沖 09:20:12

施戴子(52344359) 09:19:30

就像“蓮花白”這種菜一樣

“連花白”、“洋白菜”不都是一種東西么。

 

和這個意思不同,這個比喻不恰當(dāng)

令狐沖 09:20:20

是的

梁發(fā) 09:20:36

支持令狐沖

陸大有 09:20:38

對于客戶而言,你給他講的東西,都是他不是很清楚的,你說什么,基本就是什么了,只要你的言行一致,那他就不會找茬

令狐沖 09:20:57

 

令狐沖 09:21:09

陸大有,這個是我剛做性能測試時的想法

令狐沖 09:21:15

初學(xué)者都這樣想的

勞德諾 09:21:14

暈,你和客戶講概念干嘛?

令狐沖 09:21:20

可以理解

梁發(fā) 09:21:20

測試目的不同 測試策略也不同。

陸大有 09:21:22

好吧,你比我高級……

令狐沖 09:21:27

 

令狐沖 09:21:34

是我想要比你高級

令狐沖 09:21:40

目前還不是

陸大有 09:21:45

謝謝,我承認(rèn)你比我高級

梁發(fā) 09:22:02

作為性能測試人員 必須牢記客戶提出的需求屬于哪種性能測試目的

令狐沖 09:22:12

是的,我同意勞德諾的

 

令狐沖 09:22:22

我的目的不是要給客戶講

令狐沖 09:22:27

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

令狐沖 09:22:34

因為我越做發(fā)現(xiàn)自己沒搞清楚

令狐沖 09:23:45

至少我現(xiàn)在知道一件事

令狐沖 09:24:13

現(xiàn)在我所知道的性能測試這方面的高手里面,理解也是有分歧的

儀琳 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

但我們學(xué)武功至少要選一門吧

林平之 09:28:09

沒有一個絕對的標(biāo)準(zhǔn)

令狐沖 09:28:11

入門的時候沒辦法全學(xué)吧

令狐沖 09:28:19

所以我得選一門學(xué)

高根明 09:28:25

說明大家都在關(guān)注,有關(guān)注就有思考,有思考就有爭論,有爭論就有結(jié)果,有結(jié)果,就會有一些進步。

陸大有 09:28:26

在心里,我是同意那種說壓力測試是高負(fù)載的說法

令狐沖 09:28:48

是的

林平之 09:28:54

高根明

令狐沖 09:29:00

目前沒有定論,不代表我們不能去追求定論

高根明 09:29:02

令狐沖 09:29:07

標(biāo)準(zhǔn)啊

令狐沖 09:29:15

IT界不是看重標(biāo)準(zhǔn)嗎

令狐沖 09:29:23

最終一定要有個標(biāo)準(zhǔn)出來的

高根明 09:29:25

很多事情,都有絕對的定論。但是,這正式有意思的地方。

令狐沖 09:29:29

不然大家怎么做事

林平之 09:29:39

那么stessLoad testing到底有什么區(qū)別呢??

施戴子 09:29:43

兄弟,你說你啥時候給客戶講壓力測試、負(fù)載測試這種概念?

高根明 09:29:50

當(dāng)然,標(biāo)準(zhǔn)是有的。比如,什么樣的門派隸屬于名門正派。

林平之 09:29:54

那還要很久

陸大有 09:29:55

標(biāo)準(zhǔn),這個標(biāo)準(zhǔn)由誰來搞呢?國家標(biāo)準(zhǔn)局,出個國家標(biāo)準(zhǔn)出來?

林平之 09:30:08

他們只知道,要保證系統(tǒng)的性能

施戴子 09:30:23

說一下你將在什么場景講這種概念性的東西?

陸大有 09:30:33

對啊,我目前的想法,就是不要給客戶說這么多理論上的東西

勞德諾 09:30:37

給自己員工培訓(xùn)的時候。

 

勞德諾 09:31:01

或者吹牛的時候。

林平之 09:31:07

在跟自己的員工,或者同行說的時候比較多用這些概念,有的時候也跟客戶講

陸大有 09:31:10

搞明白問題在哪兒,就可以了,而關(guān)于這些理論的問題,選一個自己喜歡的或者自己認(rèn)可的,給別人吹去就可以了

陸大有 09:31:27

但是千萬要有一點,要能自圓其說

令狐沖 09:31:33

一個是培訓(xùn)的時候

令狐沖 09:31:43

還有一個是給客戶講解的時候

令狐沖 09:31:56

不然他們會問你為什么這樣搞,而不那樣搞

陸大有 09:32:12

 

令狐沖 09:32:14

既然你是專家,他們不懂沒關(guān)系,但你不能不懂,你必須給個明確的解釋

林平之 09:32:14

恩,基本上是這個理論,自圓其說

高根明 09:32:16

打消客戶的疑問,是主要工作之一。

林平之 09:32:21

因為客戶也不知道這些概念

令狐沖 09:32:26

是啊

陸大有 09:32:33

那選一個大家認(rèn)可的,也就是市面上流行的,給他們解釋去,即使你不認(rèn)可這個說法……

令狐沖 09:32:36

還有一個是我們自己的態(tài)度

令狐沖 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

客戶一般都會說,要做一下性能測試,比較少說,是做負(fù)載還是壓力。

施戴子 09:35:49

你需要告訴客戶的就是,

1、如何找到X,如何找到Z,以及Y?時,系統(tǒng)會崩潰。

2、如何提高XYZ

3、如何如何根據(jù)客戶提供的XYZ值得到系統(tǒng)的最小配置

 

令狐沖 09:36:17

是的

施戴子 09:36:18

 ,不告訴你,你把圖保存下來不就得了。

高根明 09:36:19

他們還會說,可勁的壓,看看多大勁,能把系統(tǒng)壓趴了。

令狐沖 09:36:24

但是也有的會說做壓力測試

令狐沖 09:36:40

但是他們嘴里說的壓力測試可能并不是我們說的壓力測試

高根明 09:36:40

是的。

令狐沖 09:36:47

這就是我今天拿來討論的起因

令狐沖 09:37:00

今天項目組的人跟我說要做壓力測試

高根明 09:37:00

負(fù)載測試,其實也可以理解為一種壓力測試。

陸大有 09:37:05

你明白他們所說的意思就可以了,千萬別較真以為他們所說的壓力測試就是今天咱們討論的壓力測試……

陸大有 09:37:13

那還不把自己煩惱死啊

施戴子 09:37:15

溝通的時候,如果不能確認(rèn)別人到底是說的什么,你需要怎么做?

令狐沖 09:37:20

我現(xiàn)在就是煩惱啊

陸大有 09:37:29

轉(zhuǎn)換描述方式

林平之 09:37:32

小氣鬼

高根明 09:37:57

通過溝通,清晰的知道客戶的真是需求是什么。

施戴子 09:38:11

當(dāng)然是反饋!

當(dāng)他說了我們要做壓力測試,你可以問,是不是要找到系統(tǒng)快崩潰時的用戶數(shù)

陸大有 09:38:39

也就是用不同的方式以及語言來描述客戶內(nèi)心所需要的那個目標(biāo)

施戴子 09:38:56

他有可能說是,有可能說,我要的是某個業(yè)務(wù)滿足規(guī)定的最大時間,最大能支撐多少用戶

林平之 09:38:58

但是系統(tǒng)快崩潰的用戶數(shù)有的時候是沒有意義的

林平之 09:39:10

那個時候響應(yīng)時間已經(jīng)很長??

施戴子 09:39:24

有意義,你得規(guī)劃好,你的系統(tǒng)至少需要什么環(huán)境來支撐。

令狐沖 09:39:24

這就是問題所在

令狐沖 09:39:33

對于用戶沒意義

施戴子 09:39:35

以便客戶購買機器

 

令狐沖 09:39:38

但對于開發(fā)人員有意義

令狐沖 09:39:44

站的角度不同

高根明 09:39:54

不同角色,關(guān)注的點,是不一樣的。

施戴子 09:40:12

你跟客戶吹的時候,就要把XYZ值的意義拿出來,說出各個值對他們的意義。

林平之 09:40:13

但是你想系統(tǒng)在瀕臨崩潰之前其實已經(jīng)在響應(yīng)時間上不能被用戶接受了

高根明 09:40:24

而且,這些角色從自己的位置出發(fā),理解問題的方式也是有所不同。

令狐沖 09:40:33

但做為開發(fā)人員來說,他還是想知道這個值

令狐沖 09:40:40

啥時候我的系統(tǒng)會崩了,為啥會崩了

施戴子 09:41:03

不能接受是不能接受,假設(shè)說把應(yīng)用服務(wù)器都弄崩了,需要手工重啟,你說這種情況客戶會同意么。

令狐沖 09:41:20

今天討論還是不錯的

令狐沖 09:41:22

有收獲

任盈盈 09:41:49

林平之(29949260) 09:40:13

但是你想系統(tǒng)在瀕臨崩潰之前其實已經(jīng)在響應(yīng)時間上不能被用戶接受了

施戴子 09:41:53

崩了意思是,系統(tǒng)不再提供服務(wù),需要你重啟你的應(yīng)用。

這樣就需要客戶投入額外的人力去解決這個事

林平之 09:42:07

哦,這種情況應(yīng)該測試,但是在這種情況下你怎么看你的事務(wù)情況的,這種情況下肯定已經(jīng)有大量的事務(wù)fail

施戴子 09:42:07

并且需要隨時關(guān)注,這是客戶不能接受的

陸大有 09:42:19

這個時候,就可以用客戶來壓開發(fā)了……

令狐沖 09:42:19

看來大家還是多數(shù)是傾向于剛才的第一種廉潔

令狐沖 09:42:21

說法

施戴子 09:42:42

令狐沖你提的問題,把意見整理一下,給個結(jié)論出來。

令狐沖 09:42:47

好的

任盈盈 09:42:48

很多系統(tǒng)要求,在壓力非常大的時候,你可以非常慢,也可以拒絕服務(wù),但不能崩,象網(wǎng)游的主頁

陸大有 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

內(nèi)緊外松。

施戴子 09:43:36

現(xiàn)在暫停討論,30分鐘后,等令狐沖把這個問題的結(jié)果給出來。如有必要進行第二輪討論

林平之 09:43:39

但是是否運行被拒絕服務(wù),但不崩潰的現(xiàn)象呢??

令狐沖 09:43:44

 

林平之 09:43:48

哈哈

令狐沖 09:43:49

30分鐘太少了

令狐沖 09:43:53

我現(xiàn)在還要寫方案

令狐沖 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秒吧,會告訴你服務(wù)器忙。120秒資源下載,告訴你下載超時。 但一般他不DOWN的。 當(dāng)時時間可以改

勞德諾 09:45:04

好啊。

林平之 09:45:07

為什么不是我先排

林平之 09:45:12

 我先說的

勞德諾 09:45:34

行,我排林平之后邊。

 

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

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

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