性能測試的概念
定義:軟件的性能是軟件的一種非功能特性,它關(guān)注的不是軟件是否能夠完成特定的功能,而是在完成該功能時展示出來的及時性。
由定義可知性能關(guān)注的是軟件的非功能特性,所以一般來說性能測試介入的時機是在功能測試完成之后。在系統(tǒng)基礎(chǔ)功能測試驗證完成、系統(tǒng)趨于穩(wěn)定的情況下,才會進行性能測試,否則性能測試是無意義的。另外,由定義中的及時性可知性能也是一種指標,可以用時間或其它指標來衡量,通常我們會使用某些工具或手段來檢測軟件的某些指標是否達到了要求,這就是性能測試。
性能測試定義:指通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統(tǒng)的各項性能指標進行測試。
性能測試類型
- 基準測試:在給系統(tǒng)施加較低壓力時,查看系統(tǒng)的運行狀況并記錄相關(guān)數(shù)做為基礎(chǔ)參考
- 負載測試:是指對系統(tǒng)不斷地增加壓力或增加一定壓力下的持續(xù)時間,直到-
系統(tǒng)的某項或多項性能指標達到安全臨界值,不斷加壓使系統(tǒng)達到瓶頸,為調(diào)優(yōu)提供參考數(shù)據(jù)。- 壓力測試:
(1)穩(wěn)定性壓力測試:在不同的給定的條件下(比如內(nèi)存的使用,一定時間段內(nèi)有多少請求等),系統(tǒng)表現(xiàn)出來的處理,反應能力(這里會考慮系統(tǒng)的容錯能力,恢復能力)
(2)破壞性壓力測試:不斷加壓,直至系統(tǒng)崩潰,掛掉,來得出系統(tǒng)的最大承受能力在哪兒- 穩(wěn)定性測試:在給系統(tǒng)加載一定業(yè)務(wù)壓力的情況下,使系統(tǒng)運行一段時間,以此檢測系統(tǒng)是否穩(wěn)定。
- 并發(fā)測試:測試多個用戶同時訪問同一個應用、同一個模塊或者數(shù)據(jù)記錄時是否存在死鎖或者其他性能問題,
- 失效恢復測試:針對有多余備份和負載均衡的系統(tǒng)設(shè)計,檢測如果系統(tǒng)局部發(fā)生故障,系統(tǒng)能否繼續(xù)使用
- 配置測試:通過對被測系統(tǒng)軟硬件環(huán)境的調(diào)整,了解各種不同環(huán)境對系統(tǒng)性能影響的程度,從而找到系統(tǒng)各項資源的最優(yōu)分配原則
性能測試應用場景(領(lǐng)域)
性能測試應用場景(領(lǐng)域)主要有:
能力驗證、規(guī)劃能力、性能調(diào)優(yōu)、缺陷發(fā)現(xiàn)、性能基準比較,
下表簡單介紹和對比了這幾個場景的各自用途和特點:
下表為性能測試應用領(lǐng)域與測試方法關(guān)聯(lián):
性能測試常用的指標
1、響應時間(Response Time)
定義:從用戶發(fā)送一個請求到用戶接收到服務(wù)器返回的響應數(shù)據(jù)這段時間就是響應時間
計算方法:Response time = (網(wǎng)絡(luò)時間 + 應用程序處理時間)
合理的響應時間 2/5/10 (2秒之內(nèi)給客戶響應被用戶認為是非常有吸引力的,5秒之內(nèi),比較糟糕,10秒之內(nèi),糟糕的用戶體驗,超過10秒,請求失?。?/p>
響應時間-負載對應關(guān)系:
圖中拐點說明:
1、響應時間突然增加
2、意味著系統(tǒng)的一種或多種資源利用達到的極限
3、通??梢岳霉拯c來進行性能測試分析與定位
2、吞吐量
定義:單位時間內(nèi)系統(tǒng)處理的客戶端請求的數(shù)量
計算方法:Throughput = (number of requests) / (total time)
吞吐量-負載對應關(guān)系:
①上升階段:吞吐量隨著負載的增加而增加,吞吐量和負載成正比;
②平穩(wěn)階段:吞吐量隨著負載的增加而保持穩(wěn)定,無太大變化或波動;
③下降階段:吞吐量隨著負載的增加而下降,吞吐量和負載成反比;
a1面積越大,說明系統(tǒng)的性能能力越強,a2面積越大,說明系統(tǒng)穩(wěn)定性越好,a3面積越大,說明系統(tǒng)的容錯能力越好
吞吐率
吞吐量/傳輸時間,即單位時間內(nèi)網(wǎng)絡(luò)上傳輸?shù)臄?shù)據(jù)量,也可以指單位時間內(nèi)處理客戶請求數(shù)量,它是衡量網(wǎng)絡(luò)性能的重要指標。
通常情況下,吞吐率用“字節(jié)數(shù)/秒”來衡量,當然,也可以用“請求數(shù)/秒”和“頁面數(shù)/秒”來衡量;
3、并發(fā)數(shù)
①狹義上的并發(fā):所有用戶在同一時間點進行同樣的操作,一般指同一類型的業(yè)務(wù)場景,比如1000個用戶同時登陸系統(tǒng);
②廣義上的并發(fā):多個用戶與系統(tǒng)發(fā)生了交互,這些業(yè)務(wù)場景可以是相同的也可以是不同的,交叉請求和處理較多;
4、資源利用率
資源指標與硬件資源消耗直接相關(guān),而系統(tǒng)指標則與用戶場景及需求直接相關(guān):
資源指標:
CPU使用率:指用戶進程與系統(tǒng)進程消耗的CPU時間百分比,長時間情況下,一般可接受上限不超過85%;
內(nèi)存利用率:內(nèi)存利用率=(1-空閑內(nèi)存/總內(nèi)存大小)*100%,一般至少有10%可用內(nèi)存,內(nèi)存使用率可接受上限為85%;
磁盤I/O: 磁盤主要用于存取數(shù)據(jù),因此當說到IO操作的時候,就會存在兩種相對應的操作,存數(shù)據(jù)的時候?qū)氖菍慖O操作,取數(shù)據(jù)的時候?qū)氖鞘亲xIO操作,一般使用% Disk Time(磁盤用于讀寫操作所占用的時間百分比)度量磁盤讀寫性能;
網(wǎng)絡(luò)帶寬:一般使用計數(shù)器Bytes Total/sec來度量,其表示為發(fā)送和接收字節(jié)的速率,包括幀字符在內(nèi);判斷網(wǎng)絡(luò)連接速度是否是瓶頸,可以用該計數(shù)器的值和目前網(wǎng)絡(luò)的帶寬比較;
系統(tǒng)指標:
并發(fā)用戶數(shù):單位時間內(nèi)與系統(tǒng)發(fā)生交互的用戶數(shù);
在線用戶數(shù):某段時間內(nèi)訪問系統(tǒng)的用戶數(shù),這些用戶并不一定同時向系統(tǒng)提交請求;
平均響應時間:系統(tǒng)處理事務(wù)的響應時間的平均值;事務(wù)的響應時間是從客戶端提交訪問請求到客戶端接收到服務(wù)器響應所消耗的時間;
事務(wù)成功率:性能測試中,定義事務(wù)用于度量一個或者多個業(yè)務(wù)流程的性能指標,如用戶登錄、保存訂單、提交訂單操作均可定義為事務(wù),單位時間內(nèi)系統(tǒng)可以成功完成多少個定義的事務(wù),在一定程度上反應了系統(tǒng)的處理能力,一般以事務(wù)成功率來度量;
超時錯誤率:主要指事務(wù)由于超時或系統(tǒng)內(nèi)部其它錯誤導致失敗占總事務(wù)的比率;
資源利用-負載對應關(guān)系:
圖中拐點說明:
1、服務(wù)器某件資源使用逐漸達到飽和
2、通常可以利用拐點來進行性能測試分析與定位
5、其它常用概念:
TPS
Transaction Per Second:每秒事務(wù)數(shù),指服務(wù)器在單位時間內(nèi)(秒)可以處理的事務(wù)數(shù)量,一般以request/second為單位;
QPS是查詢,而TPS是事務(wù),事務(wù)是查詢的入口,也包含其他類型的業(yè)務(wù)場景,因此QPS應該是TPS的子集!
QPS
Query Per Second:每秒查詢率,指服務(wù)器在單位時間內(nèi)(秒)處理的查詢請求速率;
TPS和QPS都是衡量系統(tǒng)處理能力的重要指標,一般和并發(fā)結(jié)合起來判斷系統(tǒng)的處理能力;
Thinking Time
思考時間,在性能測試中,模擬用戶的真實操作場景。用戶操作的事務(wù)與事務(wù)之間是有一定間隔的,此時間內(nèi)是不對服務(wù)器產(chǎn)生壓力的,引入這個概念是為了并發(fā)測試(有交叉業(yè)務(wù)場景)時,業(yè)務(wù)場景比率更符合真實業(yè)務(wù)場景;
PV
Page View:頁面瀏覽量,通常是衡量一個頁面甚至網(wǎng)站流量的重要指標;
細分的話,有獨立訪問者數(shù)量、重復訪問者數(shù)量、單獨頁面訪問數(shù)量、用戶停留時間等類型;
RT/ART
Response Time/average Response Time:響應時間/平均響應時間,指一個事務(wù)花費多長時間完成;
一般來說,性能測試中平均響應時間更有代表意義。細分的話,還有最小最大響應時間,50%、90%用戶響應時間等;
性能測試流程
需求分析
需要分析的系統(tǒng)信息
需要分析的業(yè)務(wù)信息
性能需求評估
在實施性能測試之前,我們需要對被測系統(tǒng)做相應的評估,主要目的是明確是否需要做性能測試。如果確定需要做性能測試,需要進一步確立性能測試點和指標,明確該測什么、性能指標是多少,測試通過or不通過的標準?性能指標也會根據(jù)情況評估,要求被測系統(tǒng)能滿足將來一定時間段的業(yè)務(wù)壓力。
業(yè)務(wù)角度:
系統(tǒng)是公司內(nèi)部 or 對外?系統(tǒng)使用的人數(shù)的多少?
系統(tǒng)角度:
a)系統(tǒng)架構(gòu):b)數(shù)據(jù)庫要求:c)系統(tǒng)特殊要求:
確定性能測試點:
關(guān)鍵業(yè)務(wù):
確定被測項目是否屬于關(guān)鍵業(yè)務(wù),有哪些主要的業(yè)務(wù)邏輯點,特別是跟交易相關(guān)的功能點。例如轉(zhuǎn)賬,扣款等接口。如果項目(或功能點)不屬于關(guān)鍵業(yè)務(wù)(或關(guān)鍵業(yè)務(wù)點)日請求量:
確定被測項目各功能點的日請求量(可以統(tǒng)計不同時間粒度下的請求量如:小時,日,周,月)。如果日請求量很高,系統(tǒng)壓力很大,而且又是關(guān)鍵業(yè)務(wù),該項目需要做性能測試,而且關(guān)鍵業(yè)務(wù)點,可以被確定為性能點邏輯復雜度:
判定被測項目各功能點的邏輯復雜度。如果一個主要業(yè)務(wù)的日請求量不高,但是邏輯很復雜,則也需要通過性能測試。原因是,在分布式方式的調(diào)用中,當某一個環(huán)節(jié)響應較慢,就會影響到其它環(huán)節(jié),造成雪崩效應。運營推廣活動:
根據(jù)運營的推廣計劃來判定待測系統(tǒng)未來的壓力。未雨綢繆、防患于未然、降低運營風險是性能測試的主要目標。被測系統(tǒng)的性能不僅能滿足當前壓力,更需要滿足未來一定時間段內(nèi)的壓力。因此,事先了解運營推廣計劃,對性能點的制定有很大的作用。例如,運營計劃做活動,要求系統(tǒng)每天能支撐多少 PV、多少 UV,或者一個季度后,需要能支撐多大的訪問量等等數(shù)據(jù)。當新項目(或功能點)屬于運營重點推廣計劃范疇之內(nèi),則該項目(或功能點)也需要做性能測試。
建立性能指標
a.選取核心業(yè)務(wù)流程(重要程度/頻繁)
b.并發(fā)用戶數(shù)
c.事物吞吐需求
d.響應時間需求
e.系統(tǒng)占用資源需求
f.可擴展性需求
建立系統(tǒng)負載模型
業(yè)務(wù)層面:
(a)核心業(yè)務(wù)流程吞吐率
(b)高峰期業(yè)務(wù)分布時段系統(tǒng)負載:
(a) 高峰/平常場景吞吐率
(b)CPU/IO/MEM/NETWORK數(shù)據(jù)來源:
(a)服務(wù)器端監(jiān)控
(b)數(shù)據(jù)庫日志
(c)用戶提出需求
制定測試計劃的實施時間和方案
預設(shè)本次性能測試各子模塊的起止時間和結(jié)束時間
測試環(huán)境的配置:局域網(wǎng),虛擬機,操縱系統(tǒng),數(shù)據(jù)庫,中間件
參與人員:誰負責哪些任務(wù),測試策略。
產(chǎn)出:測試方案,分析結(jié)果
搭建測試環(huán)境
測試機環(huán)境
執(zhí)行機環(huán)境:這個就是用來生成負載的執(zhí)行機,通常需要在物理機上運行。
負載工具:JDK/Eclipse/LoadRuner or Jmeter或Galting等
監(jiān)控工具:準備性能測試時的服務(wù)器資源、JVM、數(shù)據(jù)庫監(jiān)控工具,以便進行后續(xù)的性能測試分析與調(diào)優(yōu)
服務(wù)器環(huán)境
系統(tǒng)運行環(huán)境:這個通常就是我們的測試環(huán)境,Linux系統(tǒng)/數(shù)據(jù)庫/應用服務(wù)/各種監(jiān)控工具。
大部分公司的測試環(huán)境會低于生產(chǎn)環(huán)境,同時還需要考慮到不同的硬件配置是否會是制約系統(tǒng)性能的重要因素!因此在測試環(huán)境中,需要部署多個不同的測試環(huán)境,在不同的硬件配置上檢查應用系統(tǒng)的性能,配置大概是如下幾類:
①數(shù)據(jù)庫服務(wù)器
②應用服務(wù)器
③負載模擬器
④軟件運行環(huán)境,
平臺并對不同配置下系統(tǒng)的測試結(jié)果進行分析,得出最優(yōu)結(jié)果(最適合當前系統(tǒng)的配置)
測試場景設(shè)計
通過和業(yè)務(wù)部門溝通以及以往用戶操作習慣,確定用戶操作習慣模式,以及不同的場景用戶數(shù)量,操作次數(shù),確定測試指標,以及性能監(jiān)控等
測試用例設(shè)計和腳本開發(fā)
選擇LoadRuner或者Jmeter,我使用的是Jmeter。
我使用Jmeter的工具進行錄制,
(PS:能直接寫腳本就自己寫盡量少錄制,錄制有時候會有干擾)
對腳本進行修改,增強腳本,讓腳本更符合業(yè)務(wù)邏輯,可用性更強。
(1)參數(shù)化用戶輸入
(2)關(guān)聯(lián)數(shù)據(jù)
(3)增加事物
(4增加檢查點)
調(diào)試腳本
(1)Vugen單次回放
(2)Vugen多次回放
(3)Controller單腳本多用戶
(4)Controller多腳本多用戶
(5)查看回放日志
驗證腳本
(1)通過檢查點驗證
(2)通過查看后臺服務(wù)器日志驗證
(3)通過測試系統(tǒng)查看運行后臺變化
(4)利用SQL語句查詢/插入/更新/修改,查看效果
測試數(shù)據(jù)準備
獲取數(shù)據(jù)有兩種方式:
(1)拉取生產(chǎn)數(shù)據(jù),盡量保持數(shù)據(jù)一致以及量級足夠
(2)利用腳本自動生成數(shù)據(jù)或者利用測試工具生成數(shù)據(jù),(如:利用JDBC預埋數(shù)據(jù))
a)負載測試數(shù)據(jù):并發(fā)測試時需要多少數(shù)據(jù)?比如登錄場景?
b)DB數(shù)據(jù)量大小:為了盡量符合生產(chǎn)場景,需要模擬線上大量數(shù)據(jù)情況,那么要往數(shù)據(jù)庫里提前插入一定的數(shù)據(jù)量。
性能測試執(zhí)行和管理
執(zhí)行測試腳本
在已部署好的測試環(huán)境中,按照業(yè)務(wù)場景和編號,按順序執(zhí)行我們已經(jīng)設(shè)計好的測試腳本
測試結(jié)果記錄
根據(jù)測試采用的工具不同,結(jié)果的記錄也有不同的形式;展現(xiàn)方式:折線圖,統(tǒng)計圖,表格等,現(xiàn)在大多的性能測試工具都提供比較完整的界面圖形化的測試結(jié)果,當然,對于服務(wù)器的資源使用等情況,可以利用一些計數(shù)器或第三方監(jiān)控工具來對其進行記錄,執(zhí)行完測試后,對結(jié)果進行整理分析,
性能測試結(jié)果分析與調(diào)優(yōu)
測試環(huán)境的系統(tǒng)性能分析
根據(jù)之前記錄得到的測試結(jié)果,經(jīng)過計算,與預定的性能指標進行對比,確定是否達到了我們需要的結(jié)果;如未達到,查看具體的瓶頸點,然后根據(jù)瓶頸點的具體數(shù)據(jù),
瓶頸定位分析
吞吐量:二八原則 (即:80%的業(yè)務(wù)在20%的時間內(nèi)完成/正太分布)
響應時間:2/5/10原則
內(nèi)存,磁盤,IO,進程,網(wǎng)絡(luò)分析
硬件,操作系統(tǒng),中間件,應用瓶頸
進行具體情況具體分析
性能調(diào)優(yōu)
時間資源,人力資源
硬件資源,擴展性,影響
硬件設(shè)備對系統(tǒng)性能表現(xiàn)的影響分析
配置幾個不同的測試環(huán)境,故可以根據(jù)不同測試環(huán)境的硬件資源使用狀況圖進行分析,確定瓶頸是再數(shù)據(jù)庫服務(wù)器、應用服務(wù)器抑或其他方面,然后針對性的進行優(yōu)化等操作
其他影響因素分析
影響系統(tǒng)性能的因素很多,可以從用戶能感受到的場景分析,哪里比較慢,哪里速度尚可,這里可以根據(jù)2\5\8原則對其進行分析;
至于其他諸如網(wǎng)絡(luò)帶寬、操作動作、存儲池、線程實現(xiàn)、服務(wù)器處理機制等一系列的影響因素,具體問題具體分析,
測試中發(fā)現(xiàn)的問題
在性能測試執(zhí)行過程中,可能會發(fā)現(xiàn)某些功能上的不足或存在的缺陷,以及需要優(yōu)化的地方,需要多次執(zhí)行測試。
測試報告和跟蹤
性能測試報告是性能測試的里程碑,通過報告能展示出性能測試的最終成果,展示系統(tǒng)性能是否符合需求,是否有性能隱患
性能測試報告中需要闡明:
性能測試目標、
性能測試環(huán)境、
性能測試數(shù)據(jù)構(gòu)造規(guī)則、
性能測試策略、
性能測試結(jié)果、
性能測試調(diào)優(yōu)說明、
性能測試過程中遇到的問題和解決辦法等。
性能測試工程師完成該次性能測試后,需要將測試結(jié)果進行備案,并做為下次性能測試的基線標準,具體包括性能測試結(jié)果數(shù)據(jù)、性能測試瓶頸和調(diào)優(yōu)方案等。同時需要將測試過程中遇到的問題,包括代碼瓶頸、配置項問題、數(shù)據(jù)問題和溝通問題,以及解決辦法或解決方案,進行知識沉淀。