過去,數(shù)據(jù)分析和測試的關(guān)系好像大部是體現(xiàn)在測試報(bào)告的各種圖表——大部分人都不太關(guān)注的圖表。而今天想拿壓測中的兩個(gè)例子,說明下用數(shù)據(jù)分析的方法真的可以讓測試變得更好。
1、確定壓力測試模型
在壓力測試過程中,壓力測試模型讓我們的測試更有針對(duì)性。之前的一個(gè)做法是,我們會(huì)以目前線上的交易量為基礎(chǔ),推算一個(gè)未來某時(shí)間的交易量,得到一天的交易量,在折算在工作的8小時(shí)或其他幾個(gè)小時(shí)內(nèi)去處理,得到一個(gè)預(yù)期各交易類型的tps,計(jì)算出并發(fā)的用戶數(shù)。在設(shè)置并發(fā)、預(yù)熱、減少壓力的策略等等。這種測試方法下,我們可以得到這樣一個(gè)理論上的交易量-時(shí)間圖:

但很奇怪的是,我們明明有線上的數(shù)據(jù),為什么不直按照線上的數(shù)據(jù)放大幾倍為未來的交易量級(jí),直接進(jìn)行測試呢?
所以我們拿了線上的脫敏數(shù)據(jù),分析了一個(gè)月的交易數(shù)據(jù),把每天按分鐘劃分為1440時(shí)間點(diǎn),計(jì)算每個(gè)時(shí)間點(diǎn)交易量的平均值,這樣的到了1440個(gè)交易量的點(diǎn):

按照這個(gè)量的X倍的到每分鐘的交易量和計(jì)算分鐘的并發(fā)數(shù)進(jìn)行壓力測試。
另一個(gè)就是金額,以前通常的做法會(huì)選擇一定范圍內(nèi)的隨機(jī)金額。但是在交易類系統(tǒng)中,金額在風(fēng)控、費(fèi)率等計(jì)算中也是很重要的。所以我們分析了線上的一天的交易金額,得到每分鐘交易金額均值作為每分鐘內(nèi)交易金額的隨機(jī)的范圍:

我們可以看到真實(shí)場景下并非交易量大的時(shí)間,交易金額就一定大。采用這樣一個(gè)金額的差異化,比之前任何時(shí)間點(diǎn)都在一個(gè)范圍內(nèi)隨機(jī)差異或者是固定值要來得更貼近現(xiàn)實(shí)。
2 計(jì)算處理時(shí)間
在有比較好的測試模型后,進(jìn)行測試后。我們通常需要得到系統(tǒng)的處理時(shí)間。在沒有規(guī)范的日志情況下,數(shù)據(jù)庫里的記錄會(huì)是一個(gè)好的選擇。數(shù)據(jù)庫中一般都會(huì)記錄交易的創(chuàng)建時(shí)間、完成時(shí)間、更新時(shí)間等。借此,我們可以得到系統(tǒng)內(nèi)部處理等時(shí)間分布:

計(jì)算一些我們關(guān)心的處理時(shí)間的值,例如:
平均值:HandlerTimeAVG: 1461.93 ,
最大值:HandlerTimeMAX: 86433.00 ,
最小值:HandlerTimeMIN: 0.00 ,
中位數(shù):HandlerTimeMEDIAN: 798.00 ,
標(biāo)準(zhǔn)差:HandlerTimeSTD: 4102.73
此時(shí)我們不難發(fā)現(xiàn)在時(shí)間點(diǎn)200左右,交易量是低的,而處理時(shí)間有幾個(gè)點(diǎn)卻很高。按正常時(shí)間點(diǎn)看,是在凌晨的2-4點(diǎn)。而此時(shí)正是幾個(gè)批處理任務(wù)的時(shí)間點(diǎn)。是否是批處理任務(wù)對(duì)交易有影響呢?
ok,通過這兩個(gè)小例子,用數(shù)據(jù)分析的方法,一個(gè)可以讓測試模型更接近真實(shí)環(huán)境,一個(gè)是發(fā)現(xiàn)可能的潛在問題。當(dāng)然,隨著業(yè)務(wù)的發(fā)展,有了更新的數(shù)據(jù)后,我們需要重新分析數(shù)據(jù)。重新分析的數(shù)據(jù)等節(jié)奏,可以按壓測的需求進(jìn)行,甚至集成到壓測步驟中。構(gòu)建一個(gè)自動(dòng)化壓測系統(tǒng)可以參考:《構(gòu)建自動(dòng)化性能測試系統(tǒng)的實(shí)踐》。另外,在一些推薦和風(fēng)控場景下,我們還可以對(duì)用戶的屬地信息、年齡信息進(jìn)行分析,構(gòu)建相應(yīng)信息的交易來看系統(tǒng)的行為。
【重要】更新數(shù)據(jù),進(jìn)行分析是極為重要的,它使我們的模型更接近未來幾個(gè)月的真實(shí)的環(huán)境,才可能提前發(fā)現(xiàn)潛在問題,及早應(yīng)對(duì)。
有不足之處,歡迎指正,共同學(xué)習(xí)。
多謝