LoadRunner是一種自動(dòng)負(fù)載測試工具,它通過模擬用戶實(shí)施并發(fā)負(fù)載、實(shí)時(shí)性能監(jiān)測的方式來確認(rèn)和查找問題,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周期。
LoadRunner主要由虛擬用戶發(fā)生器(VuGen)、壓力控制器(Controller)、壓力產(chǎn)生器(Load Generator)和結(jié)果分析工具(Analysis)組成,架構(gòu)圖如圖1。
1.虛擬用戶發(fā)生器(VuGen)實(shí)際上是一個(gè)集成開發(fā)環(huán)境,用于錄制和編輯虛擬用戶腳本的工具。
2.壓力控制器(Controller)是一個(gè)框架程序和監(jiān)控程序,負(fù)責(zé)將VuGen開發(fā)的腳本以多進(jìn)程的方式在Load Generator機(jī)器上運(yùn)行。
圖1 LoadRunner工具架構(gòu)圖
3.壓力產(chǎn)生器(Load Generator)是扮演產(chǎn)生負(fù)載的角色,根據(jù)腳本內(nèi)容,產(chǎn)生實(shí)際的負(fù)載。
4.壓力結(jié)果分析工具(Analysis)是一個(gè)數(shù)據(jù)分析工具, 用于測試后的結(jié)果分析。
5.用戶確定要進(jìn)行測試的業(yè)務(wù),通過用戶操作和VuGen的錄制功能來記錄并生成虛擬用戶腳本。手工修改虛擬用戶腳本,并確定腳本可以回放成功。在Controller中對(duì)場景進(jìn)行配置,啟動(dòng)測試。
在測試過程中,Controller控制Load Generator對(duì)被測系統(tǒng)的加壓方式和行為,同時(shí)負(fù)責(zé)搜集被測系統(tǒng)各個(gè)環(huán)節(jié)的性能數(shù)據(jù),而各個(gè)Load Generator會(huì)記錄最終用戶的響應(yīng)時(shí)間和腳本執(zhí)行日志。
壓力運(yùn)行結(jié)束后,Load Generator將數(shù)據(jù)傳送到Controller中,由Controller對(duì)測試結(jié)果進(jìn)行匯總。測試人員借助Analysis對(duì)性能測試數(shù)據(jù)進(jìn)行分析,進(jìn)而確定瓶頸和調(diào)優(yōu)方案。對(duì)系統(tǒng)進(jìn)行調(diào)優(yōu),重復(fù)負(fù)載測試過程,直至符合系統(tǒng)性能要求。
問題1:信息系統(tǒng)的訪問量急劇增長,當(dāng)訪問量達(dá)到一個(gè)閾值時(shí),系統(tǒng)性能急劇下降,此時(shí)訪問量與系統(tǒng)性能之間的關(guān)系是非線性的,這個(gè)閾值難以預(yù)測。
問題2:信息系統(tǒng)始終是處于變化中,不斷的變化又會(huì)產(chǎn)生其他風(fēng)險(xiǎn),IT人員缺乏對(duì)這些風(fēng)險(xiǎn)的預(yù)測能力。
問題3:業(yè)務(wù)應(yīng)用是由許多事務(wù)構(gòu)成,我們經(jīng)常需要以事務(wù)為單元對(duì)系統(tǒng)性能進(jìn)行監(jiān)測。
比如,電商平臺(tái)上,用戶購買商品的整個(gè)操作過程就是一個(gè)事務(wù)。每個(gè)事務(wù)包含一連串的用戶動(dòng)作,雖然這些動(dòng)作高度相關(guān),但是這些動(dòng)作關(guān)聯(lián)在一起后,對(duì)性能的影響卻難以量化。
問題4:信息系統(tǒng)種類多,系統(tǒng)性能受多種因素影響,包括軟件代碼效率、系統(tǒng)穩(wěn)定性、服務(wù)器性能、網(wǎng)絡(luò)性能等等,如何精確配置系統(tǒng),使系統(tǒng)性能滿足業(yè)務(wù)需求,粗略估計(jì)的方法顯然存在很大風(fēng)險(xiǎn)。
下面我們以模擬的辦公自動(dòng)化(OA)系統(tǒng)為環(huán)境,以LoadRunner為工具,介紹壓力測試的方法。
測試內(nèi)容主要是:服務(wù)器是否能承受現(xiàn)有的系統(tǒng)負(fù)載;業(yè)務(wù)的極限負(fù)載。
圖2 錄制結(jié)果
1.系統(tǒng)環(huán)境
為了便于演示和分析,整個(gè)測試環(huán)境均在一臺(tái)服務(wù)器上完成:利用虛擬機(jī)在實(shí)體服務(wù)器上搭建OA系統(tǒng);在實(shí)體服務(wù)器上安裝LoadRunner;網(wǎng)絡(luò)環(huán)境為虛擬的星形結(jié)構(gòu),OA系統(tǒng)為中心,對(duì)外提供服務(wù),模擬用戶采用百兆局域網(wǎng)訪問OA系統(tǒng)。
圖3 場景控制
2.系統(tǒng)負(fù)載
系統(tǒng)主要提供基于網(wǎng)頁的OA服務(wù),最大用戶數(shù)50左右。
3.創(chuàng)建測試腳本
LoadRunner測試腳本可以通過行為錄制的方式進(jìn)行創(chuàng)建。錄制過程中,LoadRunner將會(huì)記錄所有用戶操作和系統(tǒng)響應(yīng),記錄的結(jié)果是腳本,通過對(duì)腳本的編輯可以實(shí)現(xiàn)批量化、個(gè)性化的參數(shù)修改。例如,在用戶登錄過程中,通過腳本讀取參數(shù),能實(shí)現(xiàn)自動(dòng)以不同的用戶身份登錄系統(tǒng),這樣就能使模擬行為更加真實(shí),如圖2所示。
4.創(chuàng)建負(fù)載測試場景
LoadRunner通過場景來模擬用戶的實(shí)際環(huán)境。在場景中,可以添加多個(gè)腳本,我們添加剛才錄制的腳本后開始創(chuàng)建場景,如圖3。
在圖中左上角為“場景組”編輯區(qū),可以在這里對(duì)負(fù)載進(jìn)行調(diào)整。按照本部門服務(wù)器的負(fù)載情況,我們添加50個(gè)虛擬用戶。
用戶數(shù)是比較簡單的場景設(shè)置,除此之外,我們還可以設(shè)置更為復(fù)雜的場景,使測試場景和實(shí)際環(huán)境盡可能一致。
比如,可以安排向系統(tǒng)施加負(fù)載的時(shí)間(因?yàn)橛脩舨粫?huì)正好同時(shí)登錄或退出系統(tǒng));使用不同類型的瀏覽器 (例如360、谷歌、搜狗等瀏覽器)來瀏覽網(wǎng)頁;使用不同的網(wǎng)絡(luò)連接(例如局域網(wǎng)、光纖或E1專線),這些復(fù)雜的模擬都可以在場景實(shí)現(xiàn)。
5.運(yùn)行負(fù)載測試
設(shè)置好場景后,可以開始負(fù)載測試。根據(jù)場景設(shè)置,每15秒新增兩個(gè)用戶在線,逐漸增加負(fù)載,LoadRunner將記錄下系統(tǒng)的各個(gè)指標(biāo),如圖4。
運(yùn)行結(jié)束后,總共產(chǎn)生了89個(gè)失敗的事務(wù),1149個(gè)系統(tǒng)錯(cuò)誤,下面就對(duì)這些錯(cuò)誤進(jìn)行分析。
圖4 負(fù)載測試運(yùn)行結(jié)束
圖5 用戶-錯(cuò)誤組合圖
圖6 用戶-資源組合圖
6.分析測試結(jié)果
在運(yùn)行過程中,出現(xiàn)錯(cuò)誤。為了找到錯(cuò)誤原因,我們利用結(jié)果分析功能對(duì)測試進(jìn)行分析。系統(tǒng)出現(xiàn)錯(cuò)誤是在負(fù)載不斷增加的情況下產(chǎn)生的,首先看系統(tǒng)在何時(shí)出現(xiàn)錯(cuò)誤,通過截取組合圖來查找原因,圖5是每秒錯(cuò)誤數(shù)與用戶數(shù)的關(guān)系組合圖。
圖5中每秒錯(cuò)誤數(shù)曲線在5:20時(shí)開始出現(xiàn)錯(cuò)誤(此時(shí)用戶數(shù)也在40左右),到6:24時(shí)錯(cuò)誤達(dá)到最高峰。
通過圖5可以初步判斷,OA系統(tǒng)用戶數(shù)的極限基本在40左右。超過40用戶數(shù),系統(tǒng)將會(huì)產(chǎn)生大量錯(cuò)誤。
雖然得出系統(tǒng)極限用戶數(shù),但這還不足以為改善系統(tǒng)提供參考。我們希望可以定位系統(tǒng)出現(xiàn)錯(cuò)誤的原因,找到系統(tǒng)瓶頸。
先看服務(wù)器性能在測試中的表現(xiàn),查看是否因?yàn)榉?wù)器資源不夠,導(dǎo)致負(fù)載增加后,出現(xiàn)錯(cuò)誤。圖6是用戶數(shù)與系統(tǒng)資源的組合圖。
從圖形來看,在服務(wù)器資源中的幾十項(xiàng)指標(biāo)中,隨著負(fù)載的增長,并沒有指標(biāo)變得特別差或者波動(dòng)較大。因此,可以確定在50用戶數(shù)的負(fù)載下,服務(wù)器的性能表現(xiàn)并沒有出現(xiàn)瓶頸,產(chǎn)生錯(cuò)誤的原因不是OA服務(wù)器系統(tǒng)資源的不足。
再看一下產(chǎn)生的錯(cuò)誤能否給我們提供一些參考信息。LoadRunner的錯(cuò)誤報(bào)告提示了以下三種錯(cuò)誤信息:
Action.c(130):錯(cuò)誤-27796:連接服務(wù)器“1080 端口”失敗:“[10061]連接被拒絕”
Action.c(4):錯(cuò) 誤-27792:將數(shù)據(jù)傳輸?shù)骄W(wǎng)絡(luò)失敗: “[10054]對(duì)等端已重置連接”
Action.c(4):錯(cuò) 誤-27791:服務(wù)器已過早關(guān)閉連接
從錯(cuò)誤信息可以看到,錯(cuò)誤信息都是關(guān)于網(wǎng)絡(luò)連接的,大量的連接請(qǐng)求被拒絕、重置和關(guān)閉。從連接錯(cuò)誤這條線索,我們考慮另一個(gè)因素對(duì)系統(tǒng)性能的影響:網(wǎng)絡(luò)性能。網(wǎng)絡(luò)性能的好壞一般用吞吐量來衡量,在服務(wù)器資源沒有明顯變差的前提下,吞吐量基本上可以代表網(wǎng)絡(luò)狀況,圖7為用戶數(shù)與吞吐量的組合圖。
圖7 用戶-吞吐量組合圖
可以看到,用戶數(shù)在40以前,吞吐量與用戶數(shù)基本是線性相關(guān)的,但是當(dāng)用戶數(shù)到達(dá)40左右時(shí),系統(tǒng)吞吐量開始變得不穩(wěn)定。吞吐量表征的是網(wǎng)絡(luò)性能,如果隨著時(shí)間的推移和用戶數(shù)目的增加,吞吐量不斷增加,說明帶寬夠用;如果隨著用戶數(shù)目的增加,吞吐量達(dá)到網(wǎng)絡(luò)性能極限后,并沒有繼續(xù)增長,而是出現(xiàn)較大波動(dòng),某些情況下反而出現(xiàn)吞吐量極低的情況,這主要是因?yàn)榫W(wǎng)絡(luò)性能達(dá)到極限,出現(xiàn)網(wǎng)絡(luò)擁塞后,網(wǎng)絡(luò)性能大幅下降引起。對(duì)于系統(tǒng)來說,網(wǎng)絡(luò)出現(xiàn)擁塞,用戶發(fā)起的許多請(qǐng)求就會(huì)超時(shí),產(chǎn)生大量錯(cuò)誤。
模擬環(huán)境下,OA服務(wù)器和LoadRunner測試環(huán)境均在同一實(shí)體終端下,測試過程中的數(shù)據(jù)收發(fā)都是通過實(shí)體終端的網(wǎng)卡完成,所以容易造成網(wǎng)絡(luò)擁塞。筆者認(rèn)為如果將LoadRunner測試環(huán)境安裝在另外一臺(tái)實(shí)體終端,將較好的解決網(wǎng)絡(luò)擁塞的問題。
7.驗(yàn)證
通過以上的原因分析,我們推斷系統(tǒng)整體的性能瓶頸在于網(wǎng)絡(luò)資源不足。為了驗(yàn)證這個(gè)推斷,我們將LoadRunner測試環(huán)境安裝到局域網(wǎng)內(nèi)的另一臺(tái)實(shí)體終端上進(jìn)行測試,測試結(jié)果證實(shí)了筆者的猜想。
通過以上簡單的測試過程,我們就容易得出兩個(gè)結(jié)論:
結(jié)論1:模擬環(huán)境下OA系統(tǒng)的極限用戶數(shù)為同時(shí)40用戶在線操作。
結(jié)論2:OA系統(tǒng)性能的瓶頸在于網(wǎng)絡(luò)性能。具體來說,根據(jù)錯(cuò)誤提示可以知道,如果要提升性能,首先應(yīng)該提高網(wǎng)絡(luò)帶寬。
以上案例是一個(gè)比較典型的壓力測試。在我們的信息系統(tǒng)中,還有很多類似的系統(tǒng)在業(yè)務(wù)化之前基本沒有經(jīng)過專業(yè)的、定量化的測評(píng),都是憑借我們長期工作中的經(jīng)驗(yàn)進(jìn)行評(píng)估,系統(tǒng)上線運(yùn)行后風(fēng)險(xiǎn)較大。
我們研究利用LoadRunner進(jìn)行系統(tǒng)壓力測試和評(píng)估,尋找性能瓶頸、預(yù)測性能極限,這在信息化建設(shè)中是一項(xiàng)基礎(chǔ)性的工作,做好這項(xiàng)工作將使信息系統(tǒng)的開發(fā)和運(yùn)營更加科學(xué)和規(guī)范。