JAVA性能測試初體驗

 

序言:自動化測試的時候,一直沒想過要去作性能,等到如今作性能的時候,才明白這自己就是一個必須都要經歷的過程,就像編程同樣,編寫小型軟件的時候,咱們不用過多關注架構和性能,可是等成長到必定時候,就會須要關注軟件的可複用性(這是由開發成本決定,這點能夠在軟件架構上去改善,常說的自動化框架也是爲了加強腳本的可複用性和可維護性)、性能瓶頸(這是由系統資源成本決定,空間和時間的調配)、可測試行(這能大大提升測試人員的測試效率,不少時候咱們要求開發提供一種測試的接口來方便測試人員進行測試)、可部署性(利用make、ant或者maven,可以大大提升軟件發佈效率,這也是持續集成中的一種手段)等所以,測試中的發展其實能夠有不少的,不只關注測試手段,還要關注如何在更多的途徑上提升測試效率。下面是對本次性能測試項目至今的一些簡單總結,歡迎指正。
1、性能測試項目的背景
性能測試緣起於產品存在大量背景數據時,程序響應時間過慢,並且在特定的狀況下有可能會形成一些數據上報丟失,因此須要定位。
產品爲C/S架構,採用的協議是snmp協議,運行在jvm上。
2、性能測試的策略
一、 測試目的的肯定
1) 系統監控,包括cpu、內存、線程使用狀況,在大數據狀況下,發現問題,幫助修正代碼結構,系統結構,提升系統的運行效率。
2) 肯定軟件運行資源需求指標。
二、 性能測試指標肯定
1) 肯定指標來源,主要包括:產品規格、行業標準、客戶需求與故障場景等
2) 肯定測試特性,例如:系統容量、及時性、穩定性、抗壓性、資源利用性等,這些特性能夠根據行業性能測試特性以及產品的相關特性來決定。
3) 肯定具體指標,包括數目和單位。
三、 性能測試技術儲備
其實性能測試能夠算得上是自動化測試的一種大數據測試
1) 測試場景準備:準備測試場景,能夠理解爲對背景數據的構造,其實能夠將這種構造理解爲另類的接口測試,例如:咱們的軟件服務器是應用SNMP協議進行通訊,設備端有一個agent,專門用來與軟件服務器端通訊,那麼能夠虛擬出這麼一個agent,保存相應的設備信息,虛擬過程能夠經過對在網的實際設備進行錄製,而後生成。
    互聯網中,客戶端與服務器的交涉是基於http接口協議,其通常的性能測試都是發送大量的http請求,其實這種過程有一個問題就是沒法模擬真實的背景數據,由於報文過於單一,而印象很深的是新浪一位朋友開發的tcpcopy工具,在傳輸層,將線上數據複製到測試場景下,從而成功模擬了真實場景環境,這是一種很好的測試方法。
(還有一種準備工做就是對測試服務器的選型,包括操做系統類型、CPU內核數目、內存數目等)
2) 測試數據準備:這其實就是接口數據,在互聯網中,這方面的模擬比較簡單,用不少工具,例如LR、jmeter、soaupi等均可以成功構造模擬http報文,從而查看服務器的響應。由於咱們採用的是snmp協議,因此業內沒有這樣的snmp接口工具,因此就本身基於snmp協議包開發了其snmp報文模擬工具。
3) 性能測試監控:性能測試過程當中,對軟件系統服務器的監控是關鍵,例如:web測試中,每每會對web服務器和數據庫服務器、操做系統的指標性能進行監控,由於咱們的軟件是運行在jvm上,因此直接採用jconsole或者jprofiler監控服務器的內存使用、cpu使用、各個線程使用狀況,還有對數據庫和操做系統的監控等。
四、 性能測試方法
1) 基於指標,進行測試數據構造測試,查看系統是否工做正常以及監測是否沒有問題。
2) 基於指標,在基於測試數據測試的同時,由測試人員參與進行操做,測試在特定環境下的系統工做狀況。
3) 客戶場景模擬測試。
4) 隨機測試,利用算法進行大量隨機數據構造。
3、性能測試調優
一、 性能測試是一個不斷探索和不斷完善的一個測試過程。
調優步驟:衡量系統現狀、設定調優目標、尋找性能瓶頸、性能調優、衡量是否到達目標(若是未到達目標,需從新尋找性能瓶頸)、性能調優結束
二、 衡量現狀,系統性能主要存在問題
1) 內存泄露
2) 內存佔用過大,響應速率慢
3) 線程數不斷增長,出現死鎖或空閒線程
4) 某些類實例化數目過多,佔用多餘的內存空間
三、  內存泄露
       1)檢驗方式:內存泄露須要進行時長測試,既將監控界面及系統界面所有打開,進行長時間運行(如12小時),觀察系統類的增加狀況。
       2)問題定位:若出現JVM的Heap持續增加或者Memory views通過時長測試,出現較大規模的紅色部分(增加部分),且沒法GC。
四、 系統內存佔用大
1) 檢驗方式:進行某些特定的操做,系統進行大量內存佔用或者數據讀寫操做。
2) 問題定位:若系統內存數突發性的增加,且以後不回落,說明某些模塊在持續性的佔用系統資源。或者出現JVM的Heap有增加,雖不是持續增加,但一直沒法回落。
五、  線程數目過多或死鎖
1) 檢驗方式:進行某些特定的操做,可使系統產生大量線程操做。
2) 問題定位:若系統線程數突發性的增加或持續增加,且以後不回落,說明某些模塊在持續性的佔用線程。或者觀察是否有許多線程來自同一個模塊、長期處於waiting或block狀態
六、 性能調優原則
調優過程當中,充分而不過度使用硬件資源、不要一遇到問題就去改善資源環境,而後,合理調整JVM,須要重點掌握一些JVM的參數,而且要善於分析系統架構和JVM的底層工做機制。

總結:性能測試是一個很漫長的過程,不論是作JVM性能測試、WEB架構方面的性能測試,其實道理是相通的,我的以爲,要作好性能測試,不只要對測試理解,更要對軟件架構和底層的服務器工做機制特別理解,否則,每每,你只能去簡單作一些所謂的性能測試操做,可是卻沒法針對不少場景提供有效的測試策略和調優建議。好的性能測試工程師應該是可以快速搭建場景定位問題、提供指標,而且可以對軟件系統架構提出有效建議。共勉之
——散步的SUN
相關文章
相關標籤/搜索