Jmeter性能測試系列-場景用例設(shè)計

性能測試過程中,首先應(yīng)該設(shè)計測試場景,模擬真實業(yè)務(wù)發(fā)生的情境,然后是針對場景設(shè)計腳本。

為了真實的反映被測對象可能存在的性能問題,需要盡可能模擬被測對象可能發(fā)生瓶頸的業(yè)務(wù)場景。測試需求分析過程中已經(jīng)確定了需要測試的業(yè)務(wù)類型,在此,則需要設(shè)計針對每種或綜合業(yè)務(wù)的測試場景。
性能測試場景通常包括單業(yè)務(wù)基準測試、單業(yè)務(wù)壓力測試、單業(yè)務(wù)負載測試、綜合業(yè)務(wù)基準測試、綜合業(yè)務(wù)壓力測試、綜合業(yè)務(wù)負載測試、綜合業(yè)務(wù)穩(wěn)定性測試等7種常用測試場景:
單業(yè)務(wù)基準測試
測試某個具體業(yè)務(wù)是否滿足系統(tǒng)設(shè)計或用戶期望的性能指標,如用戶期望系統(tǒng)支付接口支持50個用戶并發(fā)支付,如果滿足了,則認為基準測試完成,否則失敗?;鶞蕼y試過程中,性能指標的任何一項均需成功,才認為基準測試完成。基準測試可分為并發(fā)基準及業(yè)務(wù)量基準兩種,其目的都在于驗證是否滿足預(yù)期目標設(shè)定。
單業(yè)務(wù)壓力測試
測試某個具體業(yè)務(wù)在最大負載下,持續(xù)服務(wù)的時長,以此驗證被測業(yè)務(wù)的穩(wěn)定性。壓力測試過程中所設(shè)計的負載,是以系統(tǒng)基準負載為標準,如系統(tǒng)基準負載為50個并發(fā)用戶,則壓力測試的負載設(shè)為50個,通過運行時長的變化,驗證服務(wù)器在系統(tǒng)預(yù)設(shè)負載下持續(xù)服務(wù)的能力。具體的時長從需求分析、運行日志、系統(tǒng)設(shè)計規(guī)劃等來源獲取。
單業(yè)務(wù)負載測試
測試某個具體業(yè)務(wù)能夠承受的最大負載,驗證被測業(yè)務(wù)能夠承受的最大負載數(shù),如系統(tǒng)基準負載為50個,則通過多次測試,逐步加大負載,最終獲得被測業(yè)務(wù)的最佳負載。在最佳負載下,系統(tǒng)仍需滿足各項性能指標。
綜合業(yè)務(wù)基準測試
與單業(yè)務(wù)基準測試類似,但綜合業(yè)務(wù)需考慮業(yè)務(wù)與業(yè)務(wù)間的聯(lián)系,如果相互之間存在資源爭用,則需單獨組合測試。
假設(shè)系統(tǒng)需測試的業(yè)務(wù)有三個:A、B、C,綜合業(yè)務(wù)基準測試是將ABC一起運行,那么加上A、B、C三個基準測試,共計4個基準測試場景,分別是ABC、A、B、C,但A與C存在資源爭用,則需單獨將A與C組合,構(gòu)成一個單獨的測試場景,則一共為ABC、A、B、C、AC等5個基準測試場景。
綜合業(yè)務(wù)測試中的數(shù)據(jù)分配,根據(jù)實際業(yè)務(wù)、用戶需求、運行日志、運營規(guī)劃等分析確定。
假設(shè)某銀行柜員交易系統(tǒng),1個小時內(nèi)有4個柜員進行存款操作,6個柜員進行開戶操作,10個柜員進行查詢操作,則綜合業(yè)務(wù)的負載比例設(shè)置為:
存款業(yè)務(wù)占比:4/(4+6+10)=20%
開戶業(yè)務(wù)占比:6/(4+6+10)=30%
查詢業(yè)務(wù)占比:10/(4+6+10)=50%
綜合業(yè)務(wù)壓力測試與單業(yè)務(wù)壓力測試類似
綜合業(yè)務(wù)負載測試與單業(yè)務(wù)負載測試類似
綜合業(yè)務(wù)穩(wěn)定性測試
綜合業(yè)務(wù)穩(wěn)定性測試通常為核心業(yè)務(wù)在基準負載的基礎(chǔ)上運行相對長的時間,驗證服務(wù)器持續(xù)提供穩(wěn)定服務(wù)的能力。穩(wěn)定性場景測試的時間由需求方設(shè)定,一般為7*24小時不間斷執(zhí)行。
通過上述分析,根據(jù)ECShop平臺業(yè)務(wù)模型確定本次性能測試的場景主要為登錄并發(fā)基準測試、登陸業(yè)務(wù)量基準測試、商品隨機瀏覽購買并發(fā)基準測試、商品隨機瀏覽購買業(yè)務(wù)量基準測試等四個場景。
場景設(shè)計中需設(shè)置線程數(shù)
當(dāng)需求未明確指出時該如何確定呢?
以本次測試為例,要求在2小時內(nèi)支持5萬次用戶登錄,可通過如下計算方法獲取線程數(shù):
Total_Thread=BC/(T*60*60/t)
T:考察時間段,如此處的2小時。
t:單用戶單次業(yè)務(wù)消耗時間,即單個用戶完成一次業(yè)務(wù)過程所消耗的時間,盡可能模擬用戶的真實行為。
BC:業(yè)務(wù)量,如此處的5萬。
利用Jmeter測試單次業(yè)務(wù)消耗時間,代入公式即可獲得執(zhí)行2小時5萬用戶登錄所需的線程數(shù)。
(用戶登錄單次響應(yīng)時間)
如上圖所示,ECShop用戶登錄系統(tǒng)單次消耗時間采用90%抽樣為:88+135=223毫秒,如果加上模擬用戶輸入用戶名及密碼、登錄成功后等待返回主頁、退出后等待返回主頁等操作的思考時間,以5秒、3秒、3秒計算,則單用戶訪問ECShop登錄所消耗時間為:0.223秒+5秒+3秒+3秒=11.223秒。
則代入上述公式,獲得模擬2小時5萬用戶登錄所需的線程數(shù)為:
Total_Thread=50000/(2*60*60/11.223)=77.88
因線程個數(shù)無法為小數(shù),故取整為78個線程數(shù)。
同樣方法,計算用戶登錄后隨機選擇商品瀏覽的消耗時間,然后計算出線程數(shù),具體數(shù)據(jù)如下:
(隨機購買商品單次交易時間)
如上圖所示,ECShop用戶登錄后隨機購買商品單次消耗時間采用90%抽樣為:
40+56+50+100+43+47+106+71+84+75=672毫秒,如果加上模擬用戶輸入用戶名及密碼5秒、成功登錄等待返回主頁3秒、加入購物車5秒、編寫收貨信息5秒、編寫快遞及付款方式5秒、退出等待返回主頁3秒等操作的思考時間,共計26秒計算,則單用戶訪問ECShop登錄后隨機購買商品的時間為:0.672秒+5秒+3秒+5秒+5秒+5秒+3秒=26.672秒。
則代入上述公式,獲得模擬2小時5萬用戶登錄所需的線程數(shù)為:
Total_Thread=50000/(2*60*60/26.672)=185.18
因線程個數(shù)無法為小數(shù),故取整為186個線程數(shù),但該數(shù)據(jù)已經(jīng)超過該業(yè)務(wù)要求100線程并發(fā)的基準,故以100個線程為基準,執(zhí)行業(yè)務(wù)量測試。
根據(jù)上述分析數(shù)據(jù),設(shè)計本次測試的四個場景:登錄模塊并發(fā)測試場景、登錄模塊業(yè)務(wù)量測試場景、隨機購買并發(fā)測試場景、隨機購買業(yè)務(wù)量測試場景。

(登錄業(yè)務(wù)并發(fā)基準測試場景用例)

(登錄業(yè)務(wù)量基準測試場景用例)

(隨機購買并發(fā)量基準測試場景用例)

(隨機購買業(yè)務(wù)量基準測試場景用例)
至此,本次測試所需的場景全部設(shè)計完成。接下來,可進行測試腳本的設(shè)計。
