劉 帆
(中國艦船研究設(shè)計中心 武漢 430064)
系統(tǒng)性能測試是定量獲取系統(tǒng)在特定條件和狀態(tài)下運行時相關(guān)特性表現(xiàn)的活動。在系統(tǒng)開發(fā)階段,其一般用來測試系統(tǒng)關(guān)鍵性能特性和資源使用之間的關(guān)聯(lián)關(guān)系,以便進(jìn)行系統(tǒng)調(diào)優(yōu)。在系統(tǒng)應(yīng)用階段,其一般用來測試系統(tǒng)關(guān)鍵性能特性和使用需求之間的匹配情況,以便進(jìn)行決策選型。
一般來說,系統(tǒng)性能測試可分為人工測試和自動化測試。人工測試是指測試者根據(jù)測試需求,按照系統(tǒng)特征,人工編寫相關(guān)測試程序,通過運行測試程序得到測試數(shù)據(jù)。自動化測試是指選取專業(yè)測試工具,編寫測試腳本,進(jìn)行自動化測試和記錄。
現(xiàn)代應(yīng)用服務(wù)系統(tǒng)的組成部件眾多,運行機制復(fù)雜,其應(yīng)用范圍更廣、應(yīng)用方式更多樣,對其進(jìn)行性能測試的挑戰(zhàn)也越來越大,人們無法預(yù)測系統(tǒng)在多用戶并發(fā)時提供各種服務(wù)時的運行情況。測試的難點在于如何仿真、如何模擬成千上萬個用戶并發(fā)對服務(wù)器造成負(fù)載、如何監(jiān)控和統(tǒng)計服務(wù)器端的性能變化、如何從海量測試數(shù)據(jù)中分析并獲取有效的測試結(jié)果的過程。傳統(tǒng)的人工測試已經(jīng)不能有效的解決這些測試難點,必須借助于測試工具來實現(xiàn)測試的自動化[1~3]。
目前市場上有很多商用的軟件性能測試工具,如Mercury Interactive公司的LoadRunner、IBM的Rational Robot等,也有很多開源的軟件測試工具如Jmeter、OpenSTA、TestMaker等工具,均為性能測試工作提供了相應(yīng)的技術(shù)保證[4]。
LoadRunner[5]是一種系統(tǒng)行為和性能的負(fù)載測試工具。LoadRunner支持的多種協(xié)議和技術(shù),可以模擬上千萬用戶對系統(tǒng)實施并發(fā)操作的行為,并對系統(tǒng)進(jìn)行實時性能監(jiān)測,以此更快的查找和發(fā)現(xiàn)問題。LoadRunner中包含了三個組件:
1)虛擬用戶產(chǎn)生器Vugen
虛擬用戶產(chǎn)生器通過錄制客戶端和后臺服務(wù)器之間的通訊包,分析其中的協(xié)議,自動產(chǎn)生腳本。用戶通過運行腳本,從而模擬生成邏輯功能和客戶端軟件完全一樣的用戶。
2)負(fù)載生成控制器Controller
負(fù)載生成控制器可以生成多樣化的負(fù)載測試方案并對其進(jìn)行管理和控制。其中包括設(shè)置負(fù)載的數(shù)量、循環(huán)的次數(shù)和間隔,還可指定日程計劃服務(wù),實現(xiàn)測試過程自動化。另外,還能監(jiān)測系統(tǒng)架構(gòu)中各個組件(包括服務(wù)器,數(shù)據(jù)庫,網(wǎng)絡(luò)設(shè)備等)的運行性能,來幫助用戶決定系統(tǒng)的配置。
3)數(shù)據(jù)分析器Analysis
數(shù)據(jù)分析器對收集的大量數(shù)據(jù)進(jìn)行綜合分析,以圖形、表格的形式展現(xiàn)給用戶。用戶通過分析各種參數(shù)指標(biāo)來確定系統(tǒng)的性能瓶頸問題,具體內(nèi)容可根據(jù)項目要求而定的。如一般系統(tǒng)的CPU利用率、內(nèi)存利用率、磁盤I/O、吞吐量、每秒調(diào)用次數(shù)和事務(wù)平均響應(yīng)時間等,中間件服務(wù)器的各性能參數(shù)指標(biāo)、內(nèi)存使用情況、事務(wù)的響應(yīng)時間、ETB的使用情況,數(shù)據(jù)庫的連接時間、高速緩存命中率、Sql語句的執(zhí)行情況、鎖資源[6]的爭用等。
利用LoadRunner對系統(tǒng)進(jìn)行性能測試,一般遵循以下流程,如圖1所示。
圖1 系統(tǒng)性能流程示意圖
1)分析測試需求
對測試需求進(jìn)行分析,需要在明確測試目的基礎(chǔ)上選取測試的指標(biāo)。在進(jìn)行系統(tǒng)的性能測試之前,需要明確系統(tǒng)性能測試的目的。一般來說進(jìn)行系統(tǒng)測試的主要由以下幾方面考慮:對系統(tǒng)重要性能指標(biāo)進(jìn)行測試,從而發(fā)現(xiàn)系統(tǒng)存在的性能瓶頸,給系統(tǒng)修改和調(diào)試提供可靠的依據(jù);驗證系統(tǒng)性能是否能夠滿足使用需求;對不同系統(tǒng)的關(guān)鍵指標(biāo)進(jìn)行對比測試,為選取不同的應(yīng)用服務(wù)系統(tǒng)產(chǎn)品提供依據(jù)[7]。
2)制定測試計劃
在制定測試計劃的過程中,需要根據(jù)測試需求明確系統(tǒng)性能測試的具體測試參數(shù)。如需要掌握系統(tǒng)的表現(xiàn)性能以進(jìn)行調(diào)優(yōu),則比較關(guān)注系統(tǒng)的基本能力指標(biāo),如CPU占用率。如需了解系統(tǒng)的并發(fā)服務(wù)能力,則比較關(guān)注滿足質(zhì)量前提下的負(fù)載數(shù)量。如需測試系統(tǒng)的運行穩(wěn)定性,則比較關(guān)注系統(tǒng)在一定壓力負(fù)載條件下的無故障運行時間。
在明確測試參數(shù)的基礎(chǔ)上,制定符合要求的衡量標(biāo)準(zhǔn)。由于目前尚無統(tǒng)一的固定標(biāo)準(zhǔn),因此需要根據(jù)應(yīng)用需要,結(jié)合系統(tǒng)自身特點量身制定。
對系統(tǒng)運行的環(huán)境、提供服務(wù)的特點、服務(wù)對象的數(shù)量,負(fù)載變化的周期和趨勢等進(jìn)行預(yù)測和評估,設(shè)計典型測試用例,細(xì)化相關(guān)測試步驟。
對測試執(zhí)行過程中可能遇到的問題和風(fēng)險進(jìn)行分析,評估其可能造成的影響,制定規(guī)避方法和解決措施,避免產(chǎn)生嚴(yán)重后果。
3)錄制測試腳本
根據(jù)對系統(tǒng)運行特點的分析,將平時對系統(tǒng)主要功能操作分別單獨錄制腳本[8]。在錄制的過程中,為方便查看事務(wù)的運行情況,可將每個功能點的操作設(shè)置為一個事務(wù)。此外還應(yīng)注意參數(shù)化[9]、關(guān)聯(lián)和集合點的問題。
(1)參數(shù)化
在模擬生成多個用戶的情況下,所有用戶采用相同參數(shù)會帶來以下問題:讓所有用戶都產(chǎn)生相同的行為,如對相同數(shù)據(jù)進(jìn)行訪問,有些后臺服務(wù)器會在第一次訪問后將數(shù)據(jù)加載到緩存,后續(xù)訪問直接對緩存進(jìn)行操作,對系統(tǒng)造成的壓力與實際情況會有所不同。對于那些禁止一個用戶多次登錄的系統(tǒng),則無法進(jìn)行測試。
為了解決這個問題,讓系統(tǒng)更加真實的模擬多用戶使用的實際環(huán)境,必須對腳本進(jìn)行參數(shù)化輸入。所謂的腳本參數(shù)化,就是針對腳本中的某些常量,定義一個或多個包含數(shù)據(jù)源的參數(shù)來取代,讓場景中不同的虛擬用戶在執(zhí)行相同的腳本時,分別使用參數(shù)數(shù)據(jù)源中的不同數(shù)據(jù)代替這些常量,從而達(dá)到模擬多用戶真實使用系統(tǒng)的目的。參數(shù)的數(shù)據(jù)源可以來自于數(shù)據(jù)文件、數(shù)據(jù)庫或分配的內(nèi)部數(shù)據(jù)。
(2)關(guān)聯(lián)
在客戶端和服務(wù)器的交互過程中,服務(wù)器返回的動態(tài)數(shù)據(jù)在后續(xù)訪問中有可能會仍需使用,需要將其保存才能保證下次訪問成功,此時需要將服務(wù)器產(chǎn)生的動態(tài)數(shù)據(jù)保存到設(shè)定的參數(shù)中。例如:web_reg_save_param(“ParmA”,”LB=<href=”,”RB=>”,Ord=1),上述語句指搜尋以“<href=”開頭,“>”結(jié)尾當(dāng)中包含的字符串,并將其保存在參數(shù)“ParmA”中。在以后需要用到該動態(tài)數(shù)據(jù)時可以直接引用參數(shù)“ParmA”。
(3)集合點
一般的多用戶同時并發(fā)加載僅僅體現(xiàn)在開始執(zhí)行的時刻,隨著服務(wù)器對請求的響應(yīng)不一或系統(tǒng)資源的限制,在運行過程中真正需要并發(fā)測試的部分可能會先后執(zhí)行。這時,一般在需要進(jìn)行并發(fā)測試的地方設(shè)置集合點,直到所有請求到達(dá)后一起并發(fā)執(zhí)行。
4)設(shè)置測試場景
在測試場景的設(shè)置過程中,主要是根據(jù)系統(tǒng)運行的特點,模擬設(shè)置各類不同操作的用戶數(shù)量。如進(jìn)行系統(tǒng)穩(wěn)定性測試還需對測試時間、事務(wù)發(fā)生間隔進(jìn)行設(shè)置[11]。
5)運行場景并進(jìn)行監(jiān)控
在測試腳本、測試場景設(shè)置完畢后,就可加載運行。測試人員在場景的執(zhí)行過程中可以在線查看產(chǎn)生的性能數(shù)據(jù),除了監(jiān)視本機的性能指標(biāo)外,還可以在線監(jiān)視服務(wù)器的性能。根據(jù)監(jiān)視指標(biāo)的不同,需要根據(jù)服務(wù)器的特點在服務(wù)器端配置監(jiān)視環(huán)境設(shè)置相關(guān)參數(shù)。
6)進(jìn)行數(shù)據(jù)分析
在場景運行完畢后,測試得到的數(shù)據(jù)會自動匯集到數(shù)據(jù)分析器,其根據(jù)需要對相關(guān)的性能指標(biāo)進(jìn)行統(tǒng)計和分析,按照類別生成相關(guān)圖形和表格。根據(jù)上述數(shù)據(jù),可以對系統(tǒng)的整體性能作出評價。此外,還可根據(jù)一些基本的指標(biāo)性能數(shù)據(jù)判定系統(tǒng)性能的瓶頸。
某船舶數(shù)據(jù)查詢與計算服務(wù)系統(tǒng)由客戶端、網(wǎng)絡(luò)、Web服務(wù)器、應(yīng)用服務(wù)器、數(shù)據(jù)庫集群等部分組成,主要為各類客戶提供數(shù)據(jù)查詢與計算服務(wù)。其中數(shù)據(jù)庫安裝ORACLE 10g數(shù)據(jù)管理系統(tǒng),Web服務(wù)器部署APACHE TOMCAT服務(wù)器。
在此應(yīng)用服務(wù)系統(tǒng)中,客戶端通過網(wǎng)絡(luò)訪問Web服務(wù)器,提交相關(guān)計算請求,應(yīng)用服務(wù)器響應(yīng)相關(guān)請求,從數(shù)據(jù)庫查詢相關(guān)數(shù)據(jù)進(jìn)行計算,并將計算結(jié)果通過Web服務(wù)器返回客戶端。
船舶數(shù)據(jù)查詢與計算服務(wù)系統(tǒng)采用B/S架構(gòu),客戶端和服務(wù)器端之間采用SOCKET通訊,性能測試主要是針對服務(wù)端組件進(jìn)行。
圖2 數(shù)據(jù)查詢與計算服務(wù)系統(tǒng)組成示意圖
本測試主要是驗證系統(tǒng)性能是否能夠滿足多用戶使用需求,有明確的訪問實效性要求、并發(fā)服務(wù)能力要求和穩(wěn)定運行要求。因此,在測試中關(guān)注的主要有:單用戶的系統(tǒng)訪問能力、系統(tǒng)在一定數(shù)量的用戶并發(fā)訪問條件下的性能以及系統(tǒng)的連續(xù)穩(wěn)定工作時間。
經(jīng)過分析,用戶對系統(tǒng)進(jìn)行的操作主要有查詢、下載、存儲、請求計算等四類。為此,在本次測試中,針對四類用戶操作確定了相關(guān)性能指標(biāo),研究設(shè)計了多種操作的組合,采用參數(shù)化、關(guān)聯(lián)、集合點等技術(shù)錄制了多個測試腳本,確保了多用戶的并發(fā)模擬,然后加載了不同場景進(jìn)行了測試,以下為部分多用戶并發(fā)測試結(jié)果,如表1~表2所示。
表1 多用戶并發(fā)數(shù)據(jù)查詢(循環(huán)20次)
表2 多用戶并發(fā)數(shù)據(jù)下載(文件大小1.93MB)
上述測試包括了并發(fā)訪問時虛擬用戶的最大響應(yīng)時間、最小響應(yīng)時間和平均響應(yīng)時間,結(jié)果表明:船舶數(shù)據(jù)查詢與計算服務(wù)系統(tǒng)的在100個用戶并發(fā)查詢的服務(wù)時間小于0.2s,能滿足使用需求,但20個用戶的典型大小文件并發(fā)下載時間高達(dá)3.5s左右。經(jīng)仔細(xì)分析,系統(tǒng)各資源占用情況均正常,但內(nèi)部網(wǎng)絡(luò)連接帶寬不足,改進(jìn)后該指標(biāo)可以滿足使用需求。
系統(tǒng)性能測試作為深入掌握系統(tǒng)能力的方式正不斷受到重視,一個完善的測試方案,能使整個系統(tǒng)性能測試規(guī)范、高效、安全地進(jìn)行,測試過程變得規(guī)范有序。本文提出了一種基于LoadRunner的系統(tǒng)性能測試方案,并結(jié)合船舶數(shù)據(jù)查詢與計算服務(wù)系統(tǒng)的性能測試實施情況,驗證了測試方案的可行性和正確性,改善了系統(tǒng)性能,具有廣泛的實用推廣價值。
[1]孫惠杰,楊曉紅.軟件測試的自動化[J].哈爾濱師范大學(xué)自然科學(xué)學(xué)報,2003,19(5):4749.
[2]MosleyD J,PoseyBA.軟件測試自動化[M].北京:機械工業(yè)出版社,2003.
[3]宋波,張忠能.基于系統(tǒng)功能測試的軟件自動化測試可行性分析[J].計算機應(yīng)用與軟件,2005,22(12):3133.
[4]鄧青華.軟件自動化測試工具研究[J].軟件導(dǎo)刊,2011,10(1):5859.
[5]MI Corporation.LoadRunner Controller user’guide[K].Mountain View,USA:Mercury Interactive Corporation,2003.
[6]武海平,余宏亮,鄭緯民.通用海量數(shù)據(jù)庫性能測試系統(tǒng)的設(shè)計與實現(xiàn)[J].清華大學(xué)學(xué)報(自然科學(xué)版),2006,46(7):13091321.
[7]高猛.實時嵌入式軟件系統(tǒng)測試需求建模研究[J].航天控制,2010,28(5):6468.
[8]馬慶利,王瀾.自動生成XML測試腳本的類測試[J].信息技術(shù),2006(11):145148.
[9]桑圣洪,胡飛.性能測試工具LoadRunner的工作機理及關(guān)鍵技術(shù)研究[J].科學(xué)技術(shù)與工程,2007,7(6):10201022.
[10]李冰.基于LoadRunner軟件的CRM系統(tǒng)性能測試[J].計算機與數(shù)字工程,2012(4).
[11]楊鶴標(biāo),李云平.基于UML活動圖的功能測試場景生成方法[J].計算機工程,2011,37(21):5557.