關(guān)于性能測試需要知道的
隨著各企業(yè)的業(yè)務(wù)發(fā)展、用戶量以及數(shù)據(jù)量的不斷增加,系統(tǒng)承載的壓力也會隨之增加,服務(wù)系統(tǒng)的性能好壞又嚴重影響企業(yè)的利益。因此,性能測試重要性與需求越來越強烈。

常見的性能測試目的
性能測試是確定系統(tǒng)在特定工作負載下的穩(wěn)定性和響應(yīng)能力。在進行性能測試之前,首先是要明確性能測試的目的,目的不同,對應(yīng)的解決方案會有很大差異,最常見的性能測試目的(或契機)有三種:

(1) 評測當前系統(tǒng)性能
通過性能測試了解系統(tǒng)當前的性能是否達到預(yù)期。例如:新系統(tǒng)上線前、技術(shù)升級后,都會進行性能測試,確保系統(tǒng)在線上穩(wěn)定可靠地運行。
(2) 尋找瓶頸,優(yōu)化性能
系統(tǒng)已知有性能問題,進行測試尋找瓶頸,以便優(yōu)化其性能。例如:用戶提出業(yè)務(wù)操作響應(yīng)時間長,需要定位問題,調(diào)整性能;系統(tǒng)運行一段時間后,速度變慢,尋找瓶頸,進而優(yōu)化
(3) 預(yù)測系統(tǒng)未來的性能、可擴展性
通過性能測試預(yù)測系統(tǒng)在未來達到一定負載量的情況下,系統(tǒng)的性能表現(xiàn)。為的是提前預(yù)防并降低風險。擴展能力非常好的系統(tǒng),性能是隨資源擴展呈線性或接近線性提升。
性能測試的不同類型

(1) 基準測試
基準測試:系統(tǒng)較低壓力時,查看系統(tǒng)的運行狀況并記錄相關(guān)數(shù)作為基礎(chǔ)參考。
(2) 負載測試
負載測試是通過逐漸增加系統(tǒng)負載,測試系統(tǒng)性能的變化,并最終確定在滿足性能指標的情況下,系統(tǒng)能承受的最大負載量的測試。目標:確定系統(tǒng)的性能容量(如系統(tǒng)在保證一定響應(yīng)時間情況下能夠允許多少并發(fā)用戶的訪問),系統(tǒng)各項指標,如吞吐量、響應(yīng)時間、CPU負載、內(nèi)存使用等如何決定系統(tǒng)的性能。
(3) 壓力測試
壓力測試通過確定一個系統(tǒng)的瓶頸或者不能接受的性能點,來獲得系統(tǒng)能提供的最大服務(wù)級別的測試。目標:壓力測試是為了發(fā)現(xiàn)在什么條件下您的應(yīng)用程序的性能會變得不可接受。
(4) 并發(fā)性能測試
負載測試和壓力測試通常被合稱為并發(fā)性能測試。即大并發(fā)場景下的系統(tǒng)性能,多用戶同時訪問時,檢測系統(tǒng)是否能夠穩(wěn)定運行。
(5) 大數(shù)據(jù)量測試
大數(shù)據(jù)量測試包括獨立的數(shù)據(jù)量測試和綜合數(shù)據(jù)量測試。獨立的數(shù)據(jù)量測試指針對某些系統(tǒng)存儲、傳輸、統(tǒng)計、查詢等業(yè)務(wù)進行的大數(shù)據(jù)量測試。綜合數(shù)據(jù)量測試指系統(tǒng)在具備一定數(shù)據(jù)量時,在負載壓力測試下,考察業(yè)務(wù)是否能夠正常運行的測試。目標:測試數(shù)據(jù)量較大時系統(tǒng)的性能狀況。
(6) 容量測試
容量測試的目的是通過測試預(yù)先分析出反映軟件系統(tǒng)應(yīng)用特征的某項指標的極限值(如最大并發(fā)用戶數(shù)),系統(tǒng)在其極限狀態(tài)下沒有出現(xiàn)任何軟件故障且能正常運行。
(7) 配置測試
通過對被測系統(tǒng)軟硬環(huán)境的調(diào)整,了解各種不同環(huán)境對系統(tǒng)性能的影響程度,從而找到系統(tǒng)各項資源的最優(yōu)分配原則。
(8) 穩(wěn)定性測試
穩(wěn)定性是通過給系統(tǒng)加載一定的壓力,讓系統(tǒng)持續(xù)運行一段時間(通常為7x24小時),檢測系統(tǒng)是否能夠穩(wěn)定運行。穩(wěn)定性測試也稱為疲勞強度測試,屬于可靠性測試的范疇。目標:測試系統(tǒng)長時間無故障穩(wěn)定運行的能力
(9) 失效恢復(fù)測試
失效恢復(fù)測試是針對有冗余備份或負載均衡的系統(tǒng)來說,檢驗如果系統(tǒng)局部發(fā)生故障,系統(tǒng)災(zāi)備措施是否可以正常啟動,用戶是否可以繼續(xù)使用。(如:集群、熱備等) 目標:通過實施失效恢復(fù)測試,評估系統(tǒng)的健壯性和可恢復(fù)性。
在實際項目當中,可根據(jù)不同的性能測試目的,選相對應(yīng)的性能測試方式。
性能測試的監(jiān)控指標
在進行各類性能測試時,需要同步檢測系統(tǒng)各項性能指標,從而分析系統(tǒng)的實際的響應(yīng)能力與穩(wěn)定性等。常用的性能監(jiān)測指標有四類:業(yè)務(wù)性能指標、資源性能指標、中間件監(jiān)測指標、數(shù)據(jù)庫監(jiān)測指標。

業(yè)務(wù)性能指標
- 每秒交易數(shù)(TPS):每秒鐘系統(tǒng)能夠處理的交易或事務(wù)的數(shù)量
- 響應(yīng)時間:從請求端發(fā)起請求開始,到請求端接收到服務(wù)器端的返回結(jié)束,這個過程所耗費的時間。
- 并發(fā)用戶數(shù):指系統(tǒng)可以同時承載的正常使用系統(tǒng)功能的用戶的數(shù)量,即在給定的時間段內(nèi)正在使用系統(tǒng)的用戶數(shù)。
- 在線用戶數(shù):沒有提交請求,會話狀態(tài)在線的用戶數(shù)。
- 吞吐量:指系統(tǒng)在單位時間內(nèi)處理請求的數(shù)量。即在給定時間段內(nèi)系統(tǒng)完成的交易數(shù)量。
(1) 響應(yīng)時間行業(yè)標準
- 互聯(lián)網(wǎng)企業(yè):500毫秒以下,例如淘寶業(yè)務(wù)10毫秒左右。
- 金融企業(yè):1秒以下為佳,部分復(fù)雜業(yè)務(wù)3秒以下。
- 保險企業(yè):3秒以下為佳。
- 制造業(yè):5秒以下為佳。
- 時間窗口:不同數(shù)據(jù)量結(jié)果是不一樣的,大數(shù)據(jù)量的情況下,2小時內(nèi)完成。
(2) TPS行業(yè)標準
- 互聯(lián)網(wǎng)企業(yè):500毫秒以下,如某寶業(yè)務(wù)10毫秒左右。
- 金融行業(yè):1000TPS~50000TPS,不包括互聯(lián)網(wǎng)化的活動
- 保險行業(yè):100TPS~100000TPS,不包括互聯(lián)網(wǎng)化的活動
- 制造行業(yè):10TPS~5000TPS
- 互聯(lián)網(wǎng)電子商務(wù):10000TPS~1000000TPS
- 互聯(lián)網(wǎng)中型網(wǎng)站:1000TPS~50000TPS
- 互聯(lián)網(wǎng)小型網(wǎng)站: 500TPS~10000TPS
資源性能
- CPU指標:主要指的CPU使用率、利用率,包括用戶態(tài)(user)、系統(tǒng)態(tài)(sys)、等待態(tài)(wait)、空閑態(tài)(idle)。一般情況下,CPU使用率、利用率要低于警戒值范圍75%。
- 內(nèi)存/SWAP:內(nèi)存利用率100%并不代表內(nèi)存有瓶頸,衡量系統(tǒng)內(nèi)有瓶頸主要靠SWAP(與虛擬內(nèi)存交換)交換空間利用率,一般情況下,SWAP交換空間利用率要低于70%,太多的交換將會引起系統(tǒng)性能低下。
- 磁盤吞吐量:磁盤吞吐量是指在無磁盤故障的情況下單位時間內(nèi)通過磁盤的數(shù)據(jù)量。磁盤繁忙率,磁盤隊列數(shù),平均服務(wù)時間,平均等待時間,空間利用率。其中磁盤繁忙率是直接反映磁盤是否有瓶頸的重要依據(jù),一般情況下,磁盤繁忙率要低于70%。
- 網(wǎng)絡(luò)吞吐量:網(wǎng)絡(luò)吞吐量是指在無網(wǎng)絡(luò)故障的情況下單位時間內(nèi)通過的網(wǎng)絡(luò)的數(shù)據(jù)數(shù)量。一般情況下不能超過設(shè)備或鏈路最大傳輸能力的70%。


資源性能(CPU、內(nèi)存、磁盤)行業(yè)標準:
- CPU 利用率要低于業(yè)界警戒值范圍之內(nèi),即小于或者等于75%;
- CPU sys%小于或者等于30%;
- CPU wait%小于或者等于5%
- SWAP交換空間利用率低于70%
- 磁盤繁忙率低于70%
- 網(wǎng)絡(luò)吞吐不能超過最大傳輸能力70%
中間件指標
中間件監(jiān)測指標主要包括JVM、線程池、JDBC連接池,常用的中間件如:Tomcat、Weblogic等。

中間件監(jiān)控內(nèi)容及行業(yè)標準:
- 線程數(shù)最小設(shè)置50和最大設(shè)置200比較合適。
- JDBC最小設(shè)置50和最大設(shè)置200比較合適。
- JVM最小堆大小和最大堆大小分別設(shè)置1024M比較合適。
數(shù)據(jù)庫性能指標
- SQL:執(zhí)行SQL耗時
- 吞吐量:每秒事務(wù)次數(shù)(TPS),每秒查詢次數(shù)(QPS)
- 鎖:鎖等待次數(shù)和鎖等待時間
- 命中率:索引緩沖區(qū)命中率、線程緩存命中率、表緩存命中率、查詢緩存命中率等。

數(shù)據(jù)庫監(jiān)控內(nèi)容及行業(yè)標準:
- SQL耗時越小越好,一般情況下微秒級別。
- 命中率越高越好,一般情況下不能低于95%。
- 鎖等待次數(shù)越低越好,等待時間越短越好。
- 操作系統(tǒng)內(nèi)核參數(shù)主要包括信號量、進程、文件句柄。
性能測試流程
首先要制定測試計劃,明確目的、策略等。以測試計劃為依據(jù),逐步開展性能測試工作。

明確性能測試目標
確定本次性能測試的目標,包括性能測試對象、需求范圍,以及性能指標達標要求,即測試退出條件。
制定性能測試計劃
確定了測試對象和測試需求之后,需要制定一份性能測試計劃,指導(dǎo)性能測試工作的進行。包括:簡介、測試環(huán)境、測試場景、測試數(shù)據(jù)、測試策略、測試時間與人員安排。
(1) 測試環(huán)境
描述性能測試環(huán)境的物理架構(gòu)。
(2) 測試場景
針對各業(yè)務(wù)功能模塊,設(shè)計不同測試類型(穩(wěn)定性測試、負載測試、壓力測試)等的單場景、組合場景測試。
(3) 測試數(shù)據(jù)
描述各性能測試場景下的數(shù)據(jù)量要求,加壓多大數(shù)據(jù)量需要提前與業(yè)務(wù)側(cè)對齊目標,系統(tǒng)現(xiàn)存數(shù)據(jù)體量以及每年增長幅度也可以通過與業(yè)務(wù)人員(產(chǎn)品經(jīng)理)確定,當然也可以一些經(jīng)驗方法或公式來估算。比如:有并發(fā)用戶數(shù)與峰值公式,以及二八原理估算方法。
- 【并發(fā)用戶數(shù)公式】:C = nL/T。C:平均的并發(fā)用戶數(shù);n:平均每天訪問用戶數(shù)(login session的數(shù)量);L:一天內(nèi)用戶從登錄到退出的平均時間(login session的平均長度);T:考察的時間段長度(一天內(nèi)多長時間有用戶使用系統(tǒng));
- 【并發(fā)用戶數(shù)峰值公式】:C'≈C+3*根號C。其中:C:公式1中的平均并發(fā)用戶數(shù);
- 【二八原理估算測試強度】:每個工作日中80%的業(yè)務(wù)在20%的時間內(nèi)完成。例如:每年業(yè)務(wù)集中在8個月,每個月20個工作日,每個工作日8小時,即每天80%的業(yè)務(wù)的在1.6小時完成。去年全年處理業(yè)務(wù)約100萬筆,其中15%的業(yè)務(wù)處理中每筆業(yè)務(wù)需對應(yīng)用服務(wù)器提交7次請求;其中70%的業(yè)務(wù)處理中每筆業(yè)務(wù)需對服務(wù)器提交5次請求;其余15%的業(yè)務(wù)處理中每筆業(yè)務(wù)需對應(yīng)用服務(wù)器提交3次請求。(根據(jù)以往統(tǒng)計結(jié)果,每年的業(yè)務(wù)增量為15%,考慮到今后3年業(yè)務(wù)發(fā)展的需要,測試需按現(xiàn)有業(yè)務(wù)量的兩倍進行。)

(4)性能測試策略
描述性能測試方法和流程與工具等。需要進行哪幾種類型的測試。
(5) 測試時間與人員安排
描述參與性能測試的人員,以及性能測試時間計劃。
執(zhí)行性能測試
依據(jù)性能測試計劃進行實施測試,準備測試環(huán)境、構(gòu)造測試數(shù)據(jù) 、執(zhí)行測試用例 、記錄測試結(jié)果。在此過程中,如發(fā)現(xiàn)性能問題,提交Bug,修正Bug。

性能測試報告
完成性能測試之后,編寫性能測試報告,整理總結(jié)本次性能測試的背景、目的、測試范圍、測試指標需求、測試環(huán)境與工具、測試內(nèi)容、測試結(jié)果與分析等。
其中測試結(jié)果與分析主要是羅列測試指標結(jié)果數(shù)據(jù)及圖表,并且對測試的結(jié)果及發(fā)現(xiàn)的性能問題進行總結(jié)、分析。性能測試報告樣例參見下圖:

性能測試工具
為了更高效的進行性能測試,選用適合的測試工具非常關(guān)鍵,下面列舉了一些常用的性能測試工具供參考。






























