以下內容引自: http://blog.csdn.net/shangyichen/article/details/5438528
什么叫壓力測試(Stress Testing)
什么叫壓力測試(Stress Testing)
在測試兩個字前面加上一個限定詞,就變成了很多測試。例如:壓力測試、負載測試、性能測試、功能測試等等。但究竟什么是壓力測試,初學者往往望文生義,都能說上一兩句。是啊,誰還不懂“壓力”是什么意思?誰還沒經歷過壓力?然而,壓力測試的真正含義和目的,它和其它測試(特別是負載測試)的區別,不是所有的軟件工程師都是掌握的。
按照Ron Patton在其《Software Testing》一書中的定義,壓力測試是一種破壞性測試,它故意讓軟件在比較少的資源環境下運行,如低內存、小硬盤、慢CPU上運行,考驗程序直至程序無法運行,從而發現軟件缺陷。用一句形象的話來比喻,就是讓軟件在飢餓狀態上運行。
下面有一個例子。
一般地,軟件應生成運行日志,當系統出現故障時能根據日志快速診斷出問題所在,或用於操作的責任追蹤和審計,這些日志文件可能記錄在本地磁盤上,工程師如想到要這一步,即系統運行情況要記錄在日志里,那么他就比完成學校老師作業進了一步。日志文件隨着時間的推移不斷膨脹,總有一天當前磁盤不夠用了,無法記錄新的日志,軟件設計者要想辦法解決這個問題,解決這個問題有兩個辦法:一是提示用戶系統無法記錄新的日志,讓用戶判斷有不要中斷系統運行;二是按照字母順序,將日志記錄到下一個磁盤,如D盤或E盤或F盤,如此等等。軟件工程師如能想到這一步,那么他又進了一步。如果將后續的D、E、F等所有的盤都用完了,再提醒用戶,或直接終止系統運行。
上述邏輯可用下面的偽程序表示:
1 If disk C has enough available space then 2 Write Log to C; 3 Else 4 If D disk exists then 5 If D has enough available space then 6 Write log to D; 7 Else 8 If E disk exist then 9 If E has enough available space then 10 Write Log to E; 11 Else 12 Prompt user: not available disk space for log; 13 End if 14 Else 15 Prompt user: not available disk space for log; 16 End if 17 End if 18 End if 19 End if |
在上面的例子中,如果對其進行壓力測試,就是選用一台很小配置的機器,各磁盤的剩余空間都很小。在這種情況下運行系統,很快機器上的所有磁盤空間都能被占滿,最后程序被迫終止。
這就是壓力測試的一個典型例子,將程序施加“壓力”,將其逼到沒法運行的地步。如果你選用的機器C盤足夠大,在你整個測試活動過程中,C盤不會本占滿,則執行到的語句只有1、2和19三行,如果你選用的機器,其C、D、E三個磁盤都很小,則日志很快就會占滿這幾個磁盤,則1-19的所有語句都能本執行。可以看出,有無壓力測試,對程序語句和邏輯分支的覆蓋是不一樣的。
很多人誤將負載測試和壓力測試混為一談,認為給程序的負載大,程序經受的壓力就大。其實不然,負載測試考驗的是系統的吞吐量,假如一個網站號稱能經受100萬個用戶同時訪問,那么就想方設法模擬出100萬個用戶對網站發起連接,觀察服務器能否正常作出反應。一般地,負載測試是給被測的系統“喂飽”,看看它能否吞下去,系統為了能吞下大的輸入,常常在內部機制上下工夫,或者擴大服務器的配置。
負載測試是盡量增加對系統的訪問,而壓力測試是盡量使系統在資源稀缺的環境下運行。二者區別很大。但不排斥兩個技術同時使用。