什么是压力测试,如何做压力测试?
一、什么是壓力測試?
軟件壓力測試是一種基本的質量保證行為,它是每個重要軟件測試工作的一部分。軟件壓力測試的基本思路很簡單:不是在常規(guī)條件下運行手動或自動測試,而是在計算機數量較少或系統(tǒng)資源匱乏的條件下運行測試。通常要進行軟件壓力測試的資源包括內部內存、CPU可用性、磁盤空間和網絡帶寬。壓力測試涵蓋,性能測試,負載測試,并發(fā)測試等等,這些測試點常常交織耦合在一起。
二、壓力測試存在哪些問題?
1、操作系統(tǒng)默認安裝,在未做任何優(yōu)化的情況下實施壓力測試
2、未考慮磁盤IO對軟件的影響
3、網絡軟件測試,沒有考慮到TCP特點
4、各種超時參數優(yōu)化
5、測試客戶端未優(yōu)化
6、并發(fā)理解有誤
7、WEB服務器,數據庫,等等服務器未優(yōu)化
如果上面幾項沒有做優(yōu)化,壓力測試數據基本沒有任何參考價值,任何一項沒有優(yōu)化,都會導致你的壓力測試數據出現偏差。下面我來逐條說明:
(1)操作系統(tǒng)問題,操作系統(tǒng)是大眾化軟件,出廠優(yōu)化都是面向大眾,不可能為某個領域做單獨優(yōu)化。所以我們第一步需要優(yōu)化操作系統(tǒng)。Linux 系統(tǒng)優(yōu)化內核參數,Windows 系統(tǒng)優(yōu)化注冊表等等。
(2)磁盤IO這是最容易出現瓶頸的地方,常常是CPU還沒有達到極限,磁盤已經不堪重負。
(3)TCP連接幾乎所有B/S,C/S軟件都是采用多線程,或者多進程技術。這種技術有個特點,開發(fā)者將程序設計為線程可自動伸縮模式,開啟進程后會啟動少量線程,當連接不斷提高后,線程數逐漸增加,隨著線程運行結束后,線程逐漸減少。這樣的設計會更有效地利用硬件資源,在程序空閑時將硬件資源讓給其他進程。少有軟件設計為開啟服務獨占資源。這樣測試軟件做壓力測試,不能一次并發(fā)很多請求,而是要采用逐漸增加的方式,否則第一次測試會有一部們并發(fā)不能及時響應,導致測試數據偏差。另外也你可以多做幾次壓力請求(讓多線程工作起來),從第三次開始記錄測試數據,忽略前面兩次的測試數據。提示:另一個問題是TCP連接復用,這也是一個重要配置項。如果這項沒有配置,測試出的數據也會有偏差。
(4)超時參數在壓力測試中是非常重要的參數,例如從WEB到數據庫連接超時是60秒,如果有一個SQL查詢超過300秒,那么后面的請求會持續(xù)排隊等待,當連接數達到數據庫的最大連接時,接下來的所有請求都是失敗的。通常我們的WEB服務器超時不會超過30秒,有時我設置為10秒,一旦出現超時,寧可讓該連接Timeout,不要讓他影響整體服務。
(5)客戶端很多網絡軟件需要從客戶端發(fā)出壓力測試請求,所以客戶端的優(yōu)化也是必須的,否則客戶端壓力出不去,服務端壓力進不來。
(6)并發(fā)很多人認為并發(fā),就是同一時間內的最大連接數,這是錯誤的。如果你寫過多線程程序,就會發(fā)現多線程運行時又規(guī)律的。是順序排隊運行的,根本不是同時運行的。 所以并發(fā)是指,相對時間內能完成的連接總和,例如,每秒并發(fā),每分鐘并發(fā)等等,通常我們以秒為單位。我們目前使用的操作系統(tǒng)叫分時操作系統(tǒng),這種系統(tǒng)的特點就是可能實現多用戶,多任務。操作系統(tǒng)將進程排隊(優(yōu)先級)輪詢運行,只不過這個操作太快了,使你認為多個進程在同時運行。
(7)服務器優(yōu)化主要B/S軟件壓力測試,WEB,緩存,數據庫等等服務器,都需要逐一優(yōu)化到最佳狀態(tài)。
三、為什么做壓力測試?
如果在軟件設計階段都將這些問題元素都考慮進去,同時開發(fā)階段嚴格執(zhí)行。那么開發(fā)出些軟件幾乎不用做這個勞人傷神的壓力測試。
所以在軟件設計階段就要考慮,靈活性,擴展性,可靠性與性能,還要考慮高可用與負載均衡。同時軟件優(yōu)化伴隨開發(fā),持續(xù)集成,持續(xù)測試,持續(xù)部署。
四、在哪里做壓力測試?
有些軟件需要封閉的環(huán)境測試,不能在共享資源的環(huán)境中做測試。所以你有必要做Vlan隔離,甚至獨立的路由器與交換機在封閉網絡中測試。
五、什么時間做壓力測試?
任何時間都可能做壓力測試,為什么我將“時間”重點提出呢?目前受地球自轉影響,經常閏秒,你不得不考慮這個問題。
六、壓力測試過程參與部門有哪些?
運維部門、開發(fā)部門、測試部門
七、如何做壓力測試?
下面我們舉一些例子,講述壓力測試方法,限于篇幅不可能面面俱到,我僅僅是給你提供思路。
測試前你需要一些監(jiān)控工具,事實監(jiān)控服務器的資源變化。
例如 Web 服務器壓力測試,測試場景是 nginx :
worker_processes 8; 處理器數
worker_rlimit_nofile 65530; 允許最多打開文件數
worker_connections 4096; 最大連接數數為
keepalive_timeout 65; 開啟復用連接
gzip on; 壓縮傳輸數據
怎么做壓力測試呢?你要最大化性能?還是相對性能?我們通常需要的是滿足需求就好的相對性能,而不是最大化性能。為什么呢?因為要最大化性能是要做出很多配置犧牲的,例如關閉日志,禁止訪問時間等等。
按照上面的配置你的測試用例應該是,每次并發(fā)4000 請求 8000~10000 次, 你不能并發(fā)8000 請求 4000 這樣測試。這是很多人常常犯的錯誤,所以測試者需要連接系統(tǒng)的配置參數,不能盲目使用數字實驗。
卓越軟件評測,一家專業(yè)的第三方軟件測評機構,提供各類軟件測試服務,并出具合格有效的測試報告。更多測試相關內容可以關注卓越軟件評測官網(https://www.zyscan.cn/),持續(xù)更新中!
總結
以上是生活随笔為你收集整理的什么是压力测试,如何做压力测试?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python twisted和flask
- 下一篇: (JAVA)IO缓冲区