關鍵字:性能測試 性能測試設計 測試場景 結果分析
随着企業需求的日益增長以及計算技術的不斷進步,企業級系統的應用已經從早期的單機時代轉換到了服務成千上萬個使用者的網際網路時代。随着企業業務量的增 加,企業的應用系統承載的負荷越來越重,對應用系統的要求越來越高。系統性能的好壞直接影響企業對外提供服務的品質,而性能測試在軟體的品質保證中起着重 要的作用。
本人結合自己的經驗,從技術角度簡單讨論一下軟體性能測試的測試過程。軟體性能測試過程分為三個階段:
● 性能測試設計
● 性能測試執行
● 測試結果分析
1.性能測試設計
性能測試設計是性能測試過程中一個非常重要的環節,性能測試設計的好壞直接關系到測試的充分性和測試結果的有效性。
性能測試設計階段主要包括性能需求分析、測試場景制定等。
1.1 性能需求分析
性能需求分析主要包括測試目的和性能名額确定。
(1)确定測試目的
進行需求分析,首先要明确性能測試目的,測試目的不同直接影響後序的性能測試場景的制定。測試目的可以總結為三類:符合性驗證、性能考察、性能調優。
● 符合性驗證―主要驗證軟體是否滿足規定的性能名額要求。如測試軟體在某一條件下的平均響應時間,或者吞吐率,或者并發使用者數等是否滿足規定的要求。
● 性能考察―主要測試軟體在某種條件下運作的性能狀況。如測試軟體所能支援的最大并發使用者數或者最大資料量,軟體在不同環境下的性能狀況,随使用者數量的變化或者資料量的變化情況下軟體的性能變化狀況等。
● 性能調優―主要是通過性能測試找出軟體的性能瓶頸,分析出引起軟體性能缺陷的原因,并進行針對性的性能優化,以改進軟體性能。如對軟體進行性能測試,确定是軟體否存在性能方面的問題,并定位性能瓶頸,對其進行性能優化。
将測試需求與上述目的進行比較,确定出本次測試的測試目的。
(2)确定性能名額
此處确定的性能名額指的是性能需求中要求的,且通過性能測試直接得到的性能名額,主要包括響應時間、吞吐率、資源使用率、交易成功率等,是測試結果分析 和判斷的依據。性能測試需要有明确的性能名額,某些軟體系統具有明确的性能名額,而有的軟體系統則需要和使用者一起,通過對軟體系統的業務特點、技術特點、 應用情況等進行綜合分析來獲得。
如,一軟體系統,要求1個小時内必須完成7 200筆業務。可以得出每秒需要完成的業務為7 200/3 600=2筆,則可以得出該系統需要關注的性能名額為伺服器處理請求的能力,即吞吐率,值為2筆/秒。
1.2 測試場景制定
測試場景是指導測試執行的依據。測試場景主要是模拟軟體系統一些實際的應用情況,包括測試時執行的業務、每種業務執行的使用者數量、模拟的總使用者 數、資料庫資料量、使用者增長方式、測試循環方式、使用者退出方式、執行過程中的相關參數設定等,還包括測試中需要監視的性能計數器,主要是伺服器端作業系統 相關的計數器、應用伺服器相關的計數器、資料庫相關的計數器等。不同的測試目的,其測試場景是不同的。
● 符合性驗證主要是驗證軟體性能是否符合使用者使用的要求,則測試中應模拟軟體系統的實際使用情況。如,在各功能操作中加入适當的思考時間和疊代間隔時間,用 戶增長方式采用逐漸加壓方式等。軟體實際使用時,主要是多使用者執行多項功能操作,是以測試場景主要是多使用者、多任務的并發測試。當軟體系統有長時間連續運 行的情況時,還需要有疲勞測試的測試場景。
● 性能考察中對于測試軟體性能極限的情況,如支援的最大使用者數、最大的資料量等,測試場景應該盡可能的模拟極限情況。為了保證測試中對軟體施加足夠的壓力, 使用者增長方式采用同時加載,思考時間、疊代間隔時間都忽略等。測試軟體性能極限,需要不斷調整影響軟體性能的要素,并分别進行并發測試。如,測試軟體支援 的最大并發使用者數,應不斷調整并發使用者數,在每組使用者數下對系統進行并發測試。對于有長時間運作要求的軟體系統,則需要進行疲勞測試。
性能考察中檢測軟體在不同條件下的性能狀況時(非性能極限),測試場景應該盡可能與實際使用情況相接近,與符合性驗證類似。
● 性能調優主要是為了軟體實際應用中的性能優化,則測試中應模拟軟體系統實際應用中的多使用者、多任務的并發測試場景,與符合性驗證類似。為了驗證軟體系統是否存在記憶體洩漏等問題,還需要對其進行疲勞測試。
2.性能測試執行
根據制定的測試場景,開始執行測試。測試執行不僅包括測試場景的執行,還包括測試場景執行前的一些準備工作,如,測試環境搭建、測試腳本準備、測試場景布置、測試場景執行等。
2.1 測試環境搭建
測試環境主要包括軟體運作的軟硬體環境和資料環境。
首先,需要根據測試執行方案搭建測試環境。確定測試結果的有效性,要求搭建一個獨立、無毒、逼真的軟、硬體環境及網絡環境,安裝調試被測軟體,安裝測試工具等。
其次,需要準備測試資料。以有利于測試為原則,可以自己準備,也可以從使用者處獲得滿足要求的測試資料,或通過以上兩種方式相結合獲得。自己準備的資料要符合業務規範,同時避免增加垃圾資料。準備好測試資料後,應及時備份資料庫。
2.2 測試腳本準備
根據測試執行方案中制定的測試功能,準備測試腳本。測試腳本可以通過測試工具來準備,也可以通過自己編寫來完成。
準備測試腳本前,首先确定測試功能運作無誤,防止影響測試結果。測試腳本錄制或編寫完畢後,需要進行相應的編輯,如參數化、調試等,并需要驗證測試腳本的有效性:
(1)首先,進行單腳本單使用者驗證,驗證每個測試腳本運作與實際功能操作是否相符。如增加功能的腳本,既要保證腳本可以成功運作,還要保證資料庫中有相應的增加資料。
(2)其次,進行單腳本多使用者驗證,驗證每個測試腳本的資料池是否有效。
(3)最後,進行多腳本多使用者驗證,驗證測試腳本是否可以并發運作。
2.3 測試場景布置
根據制定的測試場景布置各測試場景,包括測試腳本及其對應的虛拟使用者數、對應的運作參數、使用者增長方式、測試循環方式、使用者退出方式、需要監視的性能計數器等。
2.4 測試場景執行
測試場景布置完畢後,開始執行測試場景。測試中,測試人員要監視測試運作情況,如有過多錯誤,應及時停止方案的運作,查找錯誤原因。若是因為外 界原因(如網絡不穩定等)或者運作參數設定問題,則需要進行相應的調整再運作方案。如果不是外界原因和運作參數設定問題,則儲存測試結果,以便進行結果分 析,找出問題原因。執行所有的測試場景,及時彙總測試結果,為下一步結果分析做準備。
為了保證方案運作的有效性,在執行測試前,要将資料庫恢複到腳本準備前的原始狀态。在運作中,所有相關裝置不要進行與測試無關的操作,以避免影響測試結果。
3.測試結果分析
測試結果分析是性能測試中的一個重要部分,同時也是一個難點。不同的軟體系統,不同的性能名額,結果分析方法都是不一樣的。下面給出一個簡單的結果分析方法。
首先,檢視運作結果中是否有錯誤出現,可以結合運作日志資訊來查找。若有錯誤資訊,則需要進一步分析,根據錯誤資訊查找原因。如,測試結果中出現逾時錯誤,可能的原因有:
a. 硬體有瓶頸,如cpu、記憶體等;
b. 程式算法有問題;
c. 應用服務的相關參數設定有問題;
d. 程式中處理有關表的時候檢查字段太多。
接下來,對這幾個可能的原因進一步分析,以确定出具體的原因。
若運作結果沒有出現錯誤,則根據關注的性能名額進行分析。首先對網絡進行分析,排除網絡問題,對伺服器硬體(cpu、記憶體、磁盤i/o)進行相 關分析,确定是否是硬體瓶頸引起的性能問題,然後對應用伺服器配置進行分析,确認是否是由于應用伺服器本身的配置引起的性能問題,然後對資料庫進行性能分 析,重點是索引、資料庫cache、死鎖等問題的分析,排除上述因素後,再對程式代碼進行分析,找出導緻性能問題的因素。
測試結果分析是一項複雜而又重要的部分,涉及的内容比較多,需要根據實際測試情況來進行分析。
本文出自seven的測試人生公衆号最新内容請見作者的github頁:http://qaseven.github.io/