彭振龍
(泉州師范學(xué)院陳守仁工商信息學(xué)院,福建泉州 362000)
隨著互聯(lián)網(wǎng)技術(shù)及應(yīng)用的飛速發(fā)展,軟件系統(tǒng)的性能已是衡量軟件質(zhì)量的一個(gè)重要指標(biāo).根據(jù)CNNIC發(fā)布的第29次報(bào)告,截止2011年底,中國(guó)的網(wǎng)民數(shù)量已達(dá)到5.13億,網(wǎng)站數(shù)量達(dá)到229.6萬(wàn),CN的域名注冊(cè)數(shù)量達(dá)353萬(wàn)[1].所有這些基于B/S架構(gòu)的網(wǎng)絡(luò)服務(wù)都面臨性能問(wèn)題,如大型電子商務(wù)網(wǎng)站促銷或高考分?jǐn)?shù)公布,人們會(huì)在同一時(shí)間要求服務(wù)器響應(yīng)服務(wù),瞬時(shí)負(fù)載有可能達(dá)到或超過(guò)系統(tǒng)所能承受的極限,導(dǎo)致系統(tǒng)響應(yīng)緩慢甚至癱瘓,因此對(duì)網(wǎng)絡(luò)系統(tǒng)進(jìn)行測(cè)試和優(yōu)化顯得尤為重要.而性能測(cè)試是和功能測(cè)試相對(duì)應(yīng)的概念,功能測(cè)試是指為確認(rèn)軟件是否能完成某項(xiàng)功能而進(jìn)行的一系列測(cè)試,而性能測(cè)試則是指為確認(rèn)軟件執(zhí)行效率而實(shí)施的一系列測(cè)試行為,這包括在一定負(fù)載和壓力下軟件系統(tǒng)的執(zhí)行效率,包括服務(wù)響應(yīng)時(shí)間、連接數(shù)、穩(wěn)定性、安全性、可擴(kuò)展性、資源占用率等項(xiàng)目和指標(biāo)[2-3].
利用負(fù)載測(cè)試(load testing)和壓力測(cè)試(stress testing)等性能測(cè)試方法[2-5],能有效地模擬出軟件系統(tǒng)在現(xiàn)實(shí)環(huán)境中的應(yīng)用情況,通過(guò)分析軟件在不同壓力和負(fù)載下的表現(xiàn),如CPU占用率、內(nèi)存使用率、客戶端響應(yīng)時(shí)間、網(wǎng)絡(luò)通信數(shù)據(jù)率等,根據(jù)工程的分析方法,找到軟件系統(tǒng)架構(gòu)、功能模塊等方面的瓶頸,并找出軟件系統(tǒng)能提供的最大服務(wù)級(jí)別,從而為軟件系統(tǒng)的全面優(yōu)化提供基本參考.
在自動(dòng)化測(cè)試出現(xiàn)以前,性能測(cè)試工作主要依靠多臺(tái)單機(jī),在統(tǒng)一指揮下,同一時(shí)刻點(diǎn)擊某個(gè)操作,以達(dá)到模擬并發(fā)的目的.自從性能測(cè)試的自動(dòng)化工具出現(xiàn)后,這一工作變得簡(jiǎn)單了許多.目前,商業(yè)性的工具主要有Loadrunner、QAload、SilkPerformance、Webload,Rational Performance Tester(RPT),而免費(fèi)的測(cè)試工具主要有OpenSTA、微軟的WAST(Web Application Stress Tool).其中l(wèi)oadrunner以其圖形化界面直觀友好,支持協(xié)議眾多,可預(yù)測(cè)并調(diào)優(yōu)系統(tǒng),功能強(qiáng)大而深受好評(píng)[6].下面以loadrunner為例進(jìn)行討論,為了后面論述的方便先介紹一下loadrunner在性能測(cè)試中所涉及的重要概念.
并發(fā):指有多個(gè)業(yè)務(wù)操作在同一時(shí)間發(fā)生.
事務(wù):用于度量服務(wù)器響應(yīng)時(shí)間的任務(wù)或操作集.
虛擬用戶(Vuser):是指通過(guò)loadrunner軟件模擬出真實(shí)用戶,通常在同一臺(tái)機(jī)器中可以模擬出很多虛擬用戶.
吞吐量:一定時(shí)間內(nèi),處理客戶端請(qǐng)求的數(shù)量,直接反映了軟件的性能承載能力.
思考時(shí)間:用戶在執(zhí)行兩個(gè)連續(xù)操作期間等待的時(shí)間.
集合點(diǎn):用于同步虛擬用戶以便恰好在同一時(shí)刻執(zhí)行任務(wù).
測(cè)試環(huán)境主要包括服務(wù)器的硬件環(huán)境如CPU、硬盤、內(nèi)存、網(wǎng)卡、網(wǎng)絡(luò)帶寬等,軟件環(huán)境主要包括操作系統(tǒng)、數(shù)據(jù)庫(kù)、web服務(wù)器軟件等.同時(shí)還需要根據(jù)用戶使用手冊(cè)列出的在某個(gè)并發(fā)數(shù)下的服務(wù)響應(yīng)時(shí)間,內(nèi)存及CPU的占用率等要求達(dá)到的性能指標(biāo),以便在進(jìn)行測(cè)試結(jié)果分析時(shí)參考.
Loadrunner允許用戶通過(guò)實(shí)際的操作來(lái)錄制腳本,當(dāng)然對(duì)于非常熟悉loadrunner腳本編寫的用戶,也可以手動(dòng)編輯腳本.對(duì)于B/S系統(tǒng),在錄制腳本前,需選擇“web(http/html)”協(xié)議,如圖1所示.之后設(shè)置錄制參數(shù),如圖2所示.完成后,點(diǎn)擊OK,則啟動(dòng)web服務(wù),開始錄制腳本.錄制期間,用戶通過(guò)瀏覽器與服務(wù)正常會(huì)話,loadrunner會(huì)記錄下用戶的所有動(dòng)作.用戶可以點(diǎn)擊錄制工具條上的“”,以停止錄制,如圖3所示,此時(shí)loadrunner自動(dòng)生成測(cè)試腳本.
腳本錄制完成后,需要對(duì)其進(jìn)行完善,比如加入集合點(diǎn)、加入思考時(shí)間、加入其他事務(wù)等.腳本修改的另一個(gè)重要內(nèi)容就是“參數(shù)化”.所謂的參數(shù)化是指對(duì)不允許重復(fù)輸入的數(shù)據(jù),需要用變量(參數(shù))代替固定文本.例如在測(cè)試注冊(cè)事務(wù)過(guò)程中,錄制的腳本如下:
Web_submit_form(“register.jsp”,
圖1 loadrunner腳本錄制協(xié)議選擇框
“Snapshot=t2.inf”,
ITEMDATA,
“Name=unitname”,“value=jxndpzl”,ENDITEM,
LAST);
其中的“value=jxndpzl”是錄制腳本時(shí)注冊(cè)用戶名.顯然,在實(shí)際業(yè)務(wù)中不允許再次注冊(cè)一個(gè)jxndpzl的用戶名.這就導(dǎo)致在腳本回放或者要模擬多個(gè)用戶同時(shí)注冊(cè)時(shí),腳本無(wú)法成功提交.因此需要對(duì)腳本進(jìn)行參數(shù)化,即將
“Name=unitname”,“value=jxndpzl”,ENDITEM.改為
“Name=unitname”,“value={punitname} ”,ENDITEM.
其中的punitname即是代表注冊(cè)用戶名的參數(shù),它可以是一個(gè)文本文件或數(shù)據(jù)庫(kù),具體的設(shè)置可參見文獻(xiàn)[2].
腳本錄制完成后,由loadrunner的controller負(fù)責(zé)測(cè)試場(chǎng)景的設(shè)置.如Vuser的生成數(shù)量,持續(xù)運(yùn)行時(shí)間、加壓及減壓規(guī)則等.還有其他用于腳本調(diào)試和運(yùn)行控制的設(shè)置,如連接超時(shí)、運(yùn)行、中斷、停止、中間檢查點(diǎn)、路徑轉(zhuǎn)換、監(jiān)視器設(shè)置等.這些設(shè)置都將更好地幫助模擬真實(shí)的使用環(huán)境,并且更好地理解性能測(cè)試的過(guò)程,從而找出性能瓶頸.以下為場(chǎng)景設(shè)置的一個(gè)例子:
(1)Vuser的數(shù)量為200
(2)每5 s增加10個(gè)Vuser
(3)Vuser登錄后,持續(xù)運(yùn)行時(shí)間為5 min
(4)思考時(shí)間為15 s,并在30%~100%之間隨機(jī)
(5)每2 s退出12個(gè)Vuser
很顯然,可以設(shè)置不同策略,設(shè)置不同的場(chǎng)景,同一場(chǎng)景中也可以加載不同的事務(wù).
根據(jù)前面設(shè)置的場(chǎng)景,執(zhí)行已經(jīng)錄制好的腳本.實(shí)際上為了得到更為真實(shí)的測(cè)試結(jié)果,需要設(shè)置許多不同的場(chǎng)景進(jìn)行測(cè)試,而錄制好的腳本不用修改或只需要簡(jiǎn)單的微調(diào)就可以,這樣就為后續(xù)的結(jié)果分析準(zhǔn)備了更多的數(shù)據(jù).
Loadrunner擁有專門的分析工具Analysis,它利用數(shù)學(xué)及統(tǒng)計(jì)學(xué)原理,具有強(qiáng)大的數(shù)據(jù)分析能力,而且還能將數(shù)據(jù)分析的結(jié)果通過(guò)可視化的方式展示出來(lái).圖4為Analysis界面.
圖2 錄制參數(shù)設(shè)置框
圖3 腳本錄制工具條
下面,通過(guò)一個(gè)實(shí)際例子說(shuō)明loadrunner進(jìn)行性能測(cè)試并調(diào)優(yōu)的過(guò)程.筆者測(cè)試的是一個(gè)電子政務(wù)系統(tǒng).限于文章篇幅,略去了腳本錄制及修改過(guò)程.測(cè)試場(chǎng)景設(shè)置如下.
圖4 loadrunner Analysis主界面
只測(cè)試了三個(gè)事務(wù).(1)登錄事務(wù),即后文的vuser_init_Transaction;(2)點(diǎn)擊一般案件登記,即后文的“點(diǎn)擊一般案件登記”事務(wù);(3)一般案件的保存事務(wù),即后文的“點(diǎn)擊保存”事務(wù).同時(shí),設(shè)計(jì)了五個(gè)場(chǎng)景.(1)50個(gè)用戶并發(fā);(2)100個(gè)用戶并發(fā);(3)200個(gè)用戶并發(fā)(主測(cè)試機(jī)和負(fù)載生成器各100個(gè));(4)300個(gè)用戶并發(fā)(主測(cè)試機(jī)100個(gè),負(fù)載生成器200個(gè));(5)500個(gè)用戶并發(fā)(主測(cè)試機(jī)200個(gè),負(fù)載生成器300個(gè)),共有15個(gè)事務(wù)(見表1)限于篇幅,點(diǎn)擊一般案件登記事務(wù)只列出了res100.lrr,而res100and100.lrr即表示主附測(cè)試機(jī)各100個(gè)Vuser,共200個(gè)用戶同時(shí)登錄,在表中省略,以此類推,點(diǎn)擊保存事務(wù)與此一樣.
表1 事務(wù)名稱及說(shuō)明
負(fù)載方案為同時(shí)加載所有Vuser,減壓方式為5 min內(nèi)依次減為0,實(shí)際測(cè)試過(guò)程中,得到的實(shí)際Vuser情況如表2所示.
表2 Vuser用戶數(shù)量表
從表2中可以看出,當(dāng)總Vuser數(shù)量在200、300、500時(shí),最大值并不能達(dá)到相應(yīng)的數(shù)量,說(shuō)明負(fù)載生成器本身無(wú)法達(dá)到在某個(gè)時(shí)間內(nèi)生成相應(yīng)數(shù)量Vuser的要求.
測(cè)試過(guò)程中,選擇重點(diǎn)需要關(guān)注的平均事務(wù)響應(yīng)時(shí)間、吞吐量、Vuser連接數(shù)等數(shù)據(jù)進(jìn)行分析.限于篇幅,只選擇了點(diǎn)擊“保存”事務(wù)在不同場(chǎng)景下的數(shù)據(jù)進(jìn)行分析.平均事務(wù)響應(yīng)時(shí)間見表3.
表3 平均事務(wù)響應(yīng)時(shí)間表
從表3中可以看出,平均響應(yīng)時(shí)間隨著用戶數(shù)量的增加而增加,但根據(jù)最大值顯示,當(dāng)用戶數(shù)達(dá)到300、500時(shí),分別為19.778 s及21.086 s,這個(gè)值是比較大的,說(shuō)明系統(tǒng)在這一壓力下已經(jīng)出現(xiàn)了一定的瓶頸.
表4 不同負(fù)載壓力下的每秒點(diǎn)擊數(shù)統(tǒng)計(jì)
根據(jù)表4的統(tǒng)計(jì)數(shù)據(jù),當(dāng)Vuser數(shù)為300、500時(shí),平均點(diǎn)擊數(shù)分別為561.984,560.913,這顯然于實(shí)際的應(yīng)用不相符,說(shuō)明當(dāng)Vuser為500時(shí),系統(tǒng)出現(xiàn)了明顯的瓶頸,導(dǎo)致服務(wù)器無(wú)法接受點(diǎn)擊.
由表5可知當(dāng)Vuser為500時(shí),服務(wù)器的平均吞吐量反而比Vuser為300時(shí)的平均吞吐量更少,說(shuō)明系統(tǒng)出現(xiàn)了嚴(yán)重的瓶頸,已經(jīng)無(wú)法正常處理用戶請(qǐng)求了.
同樣的當(dāng)Vuser為500時(shí),平均連接數(shù)反而比Vuser為300時(shí)小,其最大值也只多3(見表6).其他如Vuser數(shù)為50,100,200時(shí),系統(tǒng)的最大連接數(shù)也沒(méi)能達(dá)到,這有可能是負(fù)載生成有服務(wù)器有瓶頸,導(dǎo)致用戶丟失,也有可能是服務(wù)器系統(tǒng)已經(jīng)無(wú)法正常接受用戶的連接,則需要加大用戶連接數(shù).
表5 不同負(fù)載下的服務(wù)器吞吐量數(shù)據(jù)
表6 服務(wù)器連接數(shù)
通過(guò)對(duì)平均事務(wù)響應(yīng)時(shí)間、吞吐量、點(diǎn)擊數(shù)、服務(wù)器連接數(shù)等幾個(gè)數(shù)據(jù)的分析,基本可以判斷,在排除其他問(wèn)題的前提下,該系統(tǒng)能接受的用戶并發(fā)數(shù)為300以下.從表2~6的數(shù)據(jù)可以看出,平均值、最大值都存在瓶頸,而該系統(tǒng)的最優(yōu)性能(最大能承受的并發(fā)用戶數(shù),在此條件下其他事務(wù)的執(zhí)行表現(xiàn)),則需要反復(fù)地改變測(cè)試參數(shù)進(jìn)行嘗試.
就用戶登錄、案件登記、保存三個(gè)事務(wù)而言,耗時(shí)最長(zhǎng)的是用戶登錄,這主要是因?yàn)橛脩舻卿浶枰诤笈_(tái)數(shù)據(jù)庫(kù)進(jìn)行查重,這不但需要進(jìn)行一定的IO操作,而且不同的查重算法也會(huì)有不同的性能表現(xiàn).后來(lái)與軟件開發(fā)人員進(jìn)行了研究,優(yōu)化了文件的IO操作及用戶名登錄的查重算法,使得服務(wù)器響應(yīng)時(shí)間進(jìn)一步減少.
在實(shí)際測(cè)試過(guò)程中,當(dāng)負(fù)載運(yùn)行時(shí),監(jiān)控測(cè)試機(jī)的CPU使用率幾乎都是100%,這可能導(dǎo)致很多虛擬用戶無(wú)法發(fā)送出去,這一點(diǎn)在表2中也得到了印證.這必然會(huì)影響測(cè)試結(jié)果的準(zhǔn)確性.同時(shí),通過(guò)監(jiān)視網(wǎng)絡(luò)、網(wǎng)卡在測(cè)試期間的性能,但并沒(méi)有發(fā)現(xiàn)瓶頸問(wèn)題.這可能是因?yàn)榇舜螠y(cè)試是在局域網(wǎng)內(nèi)測(cè)試,網(wǎng)絡(luò)速度較快.
軟件測(cè)試對(duì)B/S結(jié)構(gòu)的系統(tǒng)具有非常重要的意義.通過(guò)將負(fù)載及壓力測(cè)試的結(jié)果與系統(tǒng)設(shè)計(jì)的性能要求進(jìn)行比較,開發(fā)人員能有效地了解系統(tǒng)各模塊及整體的性能,從而為滿足預(yù)設(shè)的性能要求提供優(yōu)化參考方案.自動(dòng)化性能測(cè)試工具loadrunner具有支持協(xié)議多、界面友好、圖表豐富、功能強(qiáng)大的特點(diǎn),成為我們?cè)谶M(jìn)行性能測(cè)試時(shí)的有力助手.
常用的軟件性能測(cè)試方式是基于既定的軟硬件資源,設(shè)置用戶數(shù)、并發(fā)數(shù)、任務(wù)數(shù)等進(jìn)行測(cè)試分析和評(píng)估的.這對(duì)于用戶數(shù)、并發(fā)數(shù)、任務(wù)數(shù)有既定目標(biāo)的系統(tǒng)是適用的,即為了達(dá)到這一目標(biāo),不斷提升硬件配置,不斷進(jìn)行軟件調(diào)優(yōu).但如果想得到某個(gè)現(xiàn)有系統(tǒng)(既定的硬軟件系統(tǒng))的最優(yōu)性能,則需要不斷調(diào)整參數(shù),重復(fù)嘗試,這導(dǎo)致工作量成倍增長(zhǎng).后續(xù)的研究將致力于基于既定目標(biāo)的“逆向測(cè)試”,即用比較簡(jiǎn)單的方式找到使系統(tǒng)性能表現(xiàn)最佳的用戶數(shù)、并發(fā)數(shù)、任務(wù)數(shù)等指標(biāo).
[1]中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心.中國(guó)互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r調(diào)查統(tǒng)計(jì)報(bào)告[R].中國(guó)互聯(lián)網(wǎng)絡(luò)信息中心,2012.
[2]于涌.軟件性能測(cè)試與loadrunner實(shí)戰(zhàn)[M].北京:人民郵電出版社,2008:27-36.
[3]段念.軟件性能測(cè)試過(guò)程詳解與案例剖析[M].北京:清華大學(xué)出版社,2006:42-48.
[4]熊忠陽(yáng),李光勇,張玉芳,等.Web集群系統(tǒng)性能測(cè)試與優(yōu)化[J].計(jì)算機(jī)應(yīng)用研究,2008,25(3):826-832.
[5]文俊浩,桑春艷,何盼.電子政務(wù)系統(tǒng)性能測(cè)試應(yīng)用研究[J].計(jì)算機(jī)科學(xué),2009,36(4):179-180.
[6]MENASCE D A.Load testing ofweb wite[J].IEEE InternetComputing,2002,6(4):66-75.