軟件測(cè)試 | 如何分析性能測(cè)試結(jié)果
在完成JMeter測(cè)試腳本執(zhí)行后,首先要做的就是判斷收集到的測(cè)試數(shù)據(jù)是否真實(shí)有效。實(shí)際性能測(cè)試中有很多情況會(huì)導(dǎo)致測(cè)試數(shù)據(jù)失效,例如,運(yùn)行JMeter的機(jī)器性能存在瓶頸、網(wǎng)絡(luò)擁塞,甚至于測(cè)試腳本本身設(shè)計(jì)存在問題,等等,對(duì)無效的測(cè)試數(shù)據(jù)進(jìn)行分析,純粹是浪費(fèi)時(shí)間。那么該如何判斷測(cè)試數(shù)據(jù)是否有效呢?
(1)分析在整個(gè)性能測(cè)試執(zhí)行期間,測(cè)試環(huán)境是否穩(wěn)定正常。如果測(cè)試環(huán)境在性能測(cè)試執(zhí)行過程中出現(xiàn)過異常,那么測(cè)試數(shù)據(jù)就會(huì)受到“污染”,由此得到的分析結(jié)果也變得毫無價(jià)值。
例如,測(cè)試期間運(yùn)行JMeter的機(jī)器CPU占用率經(jīng)常達(dá)到100%(或者內(nèi)存占用很高)、測(cè)試網(wǎng)絡(luò)出現(xiàn)擁塞導(dǎo)致響應(yīng)延遲、待測(cè)系統(tǒng)參數(shù)配置錯(cuò)誤(JDBC連接池等)......
(2)檢查JMeter測(cè)試腳本參數(shù)設(shè)置是否合理,檢查JMeter運(yùn)行模式是否合理。JMeter測(cè)試腳本參數(shù)的設(shè)置非常重要,它會(huì)直接影響測(cè)試數(shù)據(jù)的準(zhǔn)確性。例如,有初學(xué)者經(jīng)常將線程組的參數(shù)Ramp-Up Period(in seconds)設(shè)置為0或者1。如此一來,JMeter就會(huì)瞬間啟動(dòng)該線程組下的全部虛擬用戶,會(huì)為待測(cè)服務(wù)器施加巨大的壓力。輕則導(dǎo)致服務(wù)器響應(yīng)時(shí)長超長,重則導(dǎo)致部分虛擬用戶等待響應(yīng)超時(shí)而報(bào)錯(cuò)。正確的做法應(yīng)該是逐步加壓,而不是瞬間達(dá)到目標(biāo)壓力。另外初學(xué)者還容易犯的一個(gè)錯(cuò)誤,就是以GUI模式運(yùn)行大量并發(fā)測(cè)試。相對(duì)于費(fèi)GUI模式而言,GUI模式對(duì)機(jī)器CPU和內(nèi)存的占用會(huì)高得多。對(duì)于大并發(fā)量測(cè)試,最好采用非GUI模式。
(3)檢查測(cè)試結(jié)果是否暴露出了系統(tǒng)瓶頸。沒有必要在一切正常的測(cè)試結(jié)果上糾纏不止,應(yīng)該重點(diǎn)關(guān)注異常的測(cè)試結(jié)果。如果測(cè)試結(jié)果顯示一切正常,那么首先要考慮的是并發(fā)用戶數(shù)是否足夠多,對(duì)待測(cè)服務(wù)器施加的壓力是否足夠大。另外還需要考慮,待測(cè)系統(tǒng)是否存在什么機(jī)制屏蔽掉了大部分壓力,例如,禁止同一個(gè)用戶多次執(zhí)行某項(xiàng)操作,或者多次查詢同一組數(shù)據(jù)時(shí)使用緩存技術(shù)。對(duì)于這類情況,需要理清實(shí)際情況多加分析,以避免漏掉本該發(fā)現(xiàn)的性能測(cè)試缺陷。
確定測(cè)試結(jié)果有效后,接下來就需要對(duì)待測(cè)試數(shù)據(jù)進(jìn)行深入分析了。而面對(duì)龐雜的原始數(shù)據(jù),該如何進(jìn)行分析呢?
如圖12-1所示。

對(duì)一個(gè)軟件應(yīng)用系統(tǒng)而言,最終用戶不會(huì)去關(guān)心系統(tǒng)的內(nèi)部架構(gòu)、技術(shù)實(shí)現(xiàn)等內(nèi)部細(xì)節(jié),他們只關(guān)心系統(tǒng)是否正確,是否響應(yīng)及時(shí)。而且當(dāng)系統(tǒng)出現(xiàn)性能下降時(shí),最直觀的表現(xiàn)就是響應(yīng)時(shí)長邊長。因此應(yīng)該首先從原始測(cè)試數(shù)據(jù)中查看系統(tǒng)響應(yīng)時(shí)長,判斷它是否滿足用戶的期望,以此作為性能分析的起點(diǎn)。如果系統(tǒng)響應(yīng)時(shí)長不滿足用戶期望,則說明系統(tǒng)的性能出了問題。發(fā)現(xiàn)系統(tǒng)存在性能問題后,就需要進(jìn)一步分析那個(gè)環(huán)節(jié)出了問題。
目前的企業(yè)級(jí)B/S架構(gòu)應(yīng)用系統(tǒng)的架構(gòu)頗為復(fù)雜,甚至存在不同企業(yè)的架構(gòu)體系大不一樣的情況。不過萬變不離其宗,不同B/S架構(gòu)應(yīng)用系統(tǒng)的基本構(gòu)成還是相似的。
如圖12-2所示為B/S架構(gòu)應(yīng)用系統(tǒng)的基本構(gòu)成。從圖中可以看出,用戶從客戶端發(fā)出的請(qǐng)求數(shù)據(jù)包經(jīng)網(wǎng)絡(luò)到達(dá)應(yīng)用服務(wù)器,在由應(yīng)用服務(wù)器處理后轉(zhuǎn)交數(shù)據(jù)庫處理,最終響應(yīng)結(jié)果由原路返回。在整個(gè)處理過程中,可以吧響應(yīng)時(shí)長分為兩段:一段是Ts,即服務(wù)器響應(yīng)時(shí)長,包括應(yīng)用服務(wù)器和數(shù)據(jù)庫服務(wù)器的響應(yīng)時(shí)長;另一段是Tn,即網(wǎng)絡(luò)響應(yīng)時(shí)長。

JMeter是開源性能測(cè)試工具,自然也無法如LoadRunner一般設(shè)計(jì)得非常完備,JMeter工具本身無法區(qū)分Ts和Tn,它只能統(tǒng)計(jì)總響應(yīng)時(shí)長。不過測(cè)試人員可以用其他辦法來加以區(qū)分,例如,使用最簡單的ping收獲Tn,再用響應(yīng)時(shí)長減去Tn即可得到Ts。此刻,我們已經(jīng)將響應(yīng)時(shí)長分成了兩部分,當(dāng)然也就能將問題細(xì)分成兩種網(wǎng)絡(luò)瓶頸問題和服務(wù)器瓶頸問題。
接下來還需要對(duì)服務(wù)器瓶頸問題進(jìn)一步細(xì)分為:應(yīng)用服務(wù)器瓶頸問題和數(shù)據(jù)庫服務(wù)器響應(yīng)問題。要進(jìn)一步分析問題根源,需要?jiǎng)討B(tài)監(jiān)視應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)器。
搜索微信公眾號(hào):霍格沃茲測(cè)試學(xué)院