劉 帆
(中國艦船研究設計中心 武漢 430064)
系統性能測試是定量獲取系統在特定條件和狀態下運行時相關特性表現的活動。在系統開發階段,其一般用來測試系統關鍵性能特性和資源使用之間的關聯關系,以便進行系統調優。在系統應用階段,其一般用來測試系統關鍵性能特性和使用需求之間的匹配情況,以便進行決策選型。
一般來說,系統性能測試可分為人工測試和自動化測試。人工測試是指測試者根據測試需求,按照系統特征,人工編寫相關測試程序,通過運行測試程序得到測試數據。自動化測試是指選取專業測試工具,編寫測試腳本,進行自動化測試和記錄。
現代應用服務系統的組成部件眾多,運行機制復雜,其應用范圍更廣、應用方式更多樣,對其進行性能測試的挑戰也越來越大,人們無法預測系統在多用戶并發時提供各種服務時的運行情況。測試的難點在于如何仿真、如何模擬成千上萬個用戶并發對服務器造成負載、如何監控和統計服務器端的性能變化、如何從海量測試數據中分析并獲取有效的測試結果的過程。傳統的人工測試已經不能有效的解決這些測試難點,必須借助于測試工具來實現測試的自動化[1~3]。
目前市場上有很多商用的軟件性能測試工具,如Mercury Interactive公司的LoadRunner、IBM的Rational Robot等,也有很多開源的軟件測試工具如Jmeter、OpenSTA、TestMaker等工具,均為性能測試工作提供了相應的技術保證[4]。
LoadRunner[5]是一種系統行為和性能的負載測試工具。LoadRunner支持的多種協議和技術,可以模擬上千萬用戶對系統實施并發操作的行為,并對系統進行實時性能監測,以此更快的查找和發現問題。LoadRunner中包含了三個組件:
1)虛擬用戶產生器Vugen
虛擬用戶產生器通過錄制客戶端和后臺服務器之間的通訊包,分析其中的協議,自動產生腳本。用戶通過運行腳本,從而模擬生成邏輯功能和客戶端軟件完全一樣的用戶。
2)負載生成控制器Controller
負載生成控制器可以生成多樣化的負載測試方案并對其進行管理和控制。其中包括設置負載的數量、循環的次數和間隔,還可指定日程計劃服務,實現測試過程自動化。另外,還能監測系統架構中各個組件(包括服務器,數據庫,網絡設備等)的運行性能,來幫助用戶決定系統的配置。
3)數據分析器Analysis
數據分析器對收集的大量數據進行綜合分析,以圖形、表格的形式展現給用戶。用戶通過分析各種參數指標來確定系統的性能瓶頸問題,具體內容可根據項目要求而定的。如一般系統的CPU利用率、內存利用率、磁盤I/O、吞吐量、每秒調用次數和事務平均響應時間等,中間件服務器的各性能參數指標、內存使用情況、事務的響應時間、ETB的使用情況,數據庫的連接時間、高速緩存命中率、Sql語句的執行情況、鎖資源[6]的爭用等。
利用LoadRunner對系統進行性能測試,一般遵循以下流程,如圖1所示。

圖1 系統性能流程示意圖
1)分析測試需求
對測試需求進行分析,需要在明確測試目的基礎上選取測試的指標。在進行系統的性能測試之前,需要明確系統性能測試的目的。一般來說進行系統測試的主要由以下幾方面考慮:對系統重要性能指標進行測試,從而發現系統存在的性能瓶頸,給系統修改和調試提供可靠的依據;驗證系統性能是否能夠滿足使用需求;對不同系統的關鍵指標進行對比測試,為選取不同的應用服務系統產品提供依據[7]。
2)制定測試計劃
在制定測試計劃的過程中,需要根據測試需求明確系統性能測試的具體測試參數。如需要掌握系統的表現性能以進行調優,則比較關注系統的基本能力指標,如CPU占用率。如需了解系統的并發服務能力,則比較關注滿足質量前提下的負載數量。如需測試系統的運行穩定性,則比較關注系統在一定壓力負載條件下的無故障運行時間。
在明確測試參數的基礎上,制定符合要求的衡量標準。由于目前尚無統一的固定標準,因此需要根據應用需要,結合系統自身特點量身制定。
對系統運行的環境、提供服務的特點、服務對象的數量,負載變化的周期和趨勢等進行預測和評估,設計典型測試用例,細化相關測試步驟。
對測試執行過程中可能遇到的問題和風險進行分析,評估其可能造成的影響,制定規避方法和解決措施,避免產生嚴重后果。
3)錄制測試腳本
根據對系統運行特點的分析,將平時對系統主要功能操作分別單獨錄制腳本[8]。在錄制的過程中,為方便查看事務的運行情況,可將每個功能點的操作設置為一個事務。此外還應注意參數化[9]、關聯和集合點的問題。
(1)參數化
在模擬生成多個用戶的情況下,所有用戶采用相同參數會帶來以下問題:讓所有用戶都產生相同的行為,如對相同數據進行訪問,有些后臺服務器會在第一次訪問后將數據加載到緩存,后續訪問直接對緩存進行操作,對系統造成的壓力與實際情況會有所不同。對于那些禁止一個用戶多次登錄的系統,則無法進行測試。
為了解決這個問題,讓系統更加真實的模擬多用戶使用的實際環境,必須對腳本進行參數化輸入。所謂的腳本參數化,就是針對腳本中的某些常量,定義一個或多個包含數據源的參數來取代,讓場景中不同的虛擬用戶在執行相同的腳本時,分別使用參數數據源中的不同數據代替這些常量,從而達到模擬多用戶真實使用系統的目的。參數的數據源可以來自于數據文件、數據庫或分配的內部數據。
(2)關聯
在客戶端和服務器的交互過程中,服務器返回的動態數據在后續訪問中有可能會仍需使用,需要將其保存才能保證下次訪問成功,此時需要將服務器產生的動態數據保存到設定的參數中。例如:web_reg_save_param(“ParmA”,”LB=<href=”,”RB=>”,Ord=1),上述語句指搜尋以“<href=”開頭,“>”結尾當中包含的字符串,并將其保存在參數“ParmA”中。在以后需要用到該動態數據時可以直接引用參數“ParmA”。
(3)集合點
一般的多用戶同時并發加載僅僅體現在開始執行的時刻,隨著服務器對請求的響應不一或系統資源的限制,在運行過程中真正需要并發測試的部分可能會先后執行。這時,一般在需要進行并發測試的地方設置集合點,直到所有請求到達后一起并發執行。
4)設置測試場景
在測試場景的設置過程中,主要是根據系統運行的特點,模擬設置各類不同操作的用戶數量。如進行系統穩定性測試還需對測試時間、事務發生間隔進行設置[11]。
5)運行場景并進行監控
在測試腳本、測試場景設置完畢后,就可加載運行。測試人員在場景的執行過程中可以在線查看產生的性能數據,除了監視本機的性能指標外,還可以在線監視服務器的性能。根據監視指標的不同,需要根據服務器的特點在服務器端配置監視環境設置相關參數。
6)進行數據分析
在場景運行完畢后,測試得到的數據會自動匯集到數據分析器,其根據需要對相關的性能指標進行統計和分析,按照類別生成相關圖形和表格。根據上述數據,可以對系統的整體性能作出評價。此外,還可根據一些基本的指標性能數據判定系統性能的瓶頸。
某船舶數據查詢與計算服務系統由客戶端、網絡、Web服務器、應用服務器、數據庫集群等部分組成,主要為各類客戶提供數據查詢與計算服務。其中數據庫安裝ORACLE 10g數據管理系統,Web服務器部署APACHE TOMCAT服務器。
在此應用服務系統中,客戶端通過網絡訪問Web服務器,提交相關計算請求,應用服務器響應相關請求,從數據庫查詢相關數據進行計算,并將計算結果通過Web服務器返回客戶端。
船舶數據查詢與計算服務系統采用B/S架構,客戶端和服務器端之間采用SOCKET通訊,性能測試主要是針對服務端組件進行。

圖2 數據查詢與計算服務系統組成示意圖
本測試主要是驗證系統性能是否能夠滿足多用戶使用需求,有明確的訪問實效性要求、并發服務能力要求和穩定運行要求。因此,在測試中關注的主要有:單用戶的系統訪問能力、系統在一定數量的用戶并發訪問條件下的性能以及系統的連續穩定工作時間。
經過分析,用戶對系統進行的操作主要有查詢、下載、存儲、請求計算等四類。為此,在本次測試中,針對四類用戶操作確定了相關性能指標,研究設計了多種操作的組合,采用參數化、關聯、集合點等技術錄制了多個測試腳本,確保了多用戶的并發模擬,然后加載了不同場景進行了測試,以下為部分多用戶并發測試結果,如表1~表2所示。

表1 多用戶并發數據查詢(循環20次)

表2 多用戶并發數據下載(文件大小1.93MB)
上述測試包括了并發訪問時虛擬用戶的最大響應時間、最小響應時間和平均響應時間,結果表明:船舶數據查詢與計算服務系統的在100個用戶并發查詢的服務時間小于0.2s,能滿足使用需求,但20個用戶的典型大小文件并發下載時間高達3.5s左右。經仔細分析,系統各資源占用情況均正常,但內部網絡連接帶寬不足,改進后該指標可以滿足使用需求。
系統性能測試作為深入掌握系統能力的方式正不斷受到重視,一個完善的測試方案,能使整個系統性能測試規范、高效、安全地進行,測試過程變得規范有序。本文提出了一種基于LoadRunner的系統性能測試方案,并結合船舶數據查詢與計算服務系統的性能測試實施情況,驗證了測試方案的可行性和正確性,改善了系統性能,具有廣泛的實用推廣價值。
[1]孫惠杰,楊曉紅.軟件測試的自動化[J].哈爾濱師范大學自然科學學報,2003,19(5):4749.
[2]MosleyD J,PoseyBA.軟件測試自動化[M].北京:機械工業出版社,2003.
[3]宋波,張忠能.基于系統功能測試的軟件自動化測試可行性分析[J].計算機應用與軟件,2005,22(12):3133.
[4]鄧青華.軟件自動化測試工具研究[J].軟件導刊,2011,10(1):5859.
[5]MI Corporation.LoadRunner Controller user’guide[K].Mountain View,USA:Mercury Interactive Corporation,2003.
[6]武海平,余宏亮,鄭緯民.通用海量數據庫性能測試系統的設計與實現[J].清華大學學報(自然科學版),2006,46(7):13091321.
[7]高猛.實時嵌入式軟件系統測試需求建模研究[J].航天控制,2010,28(5):6468.
[8]馬慶利,王瀾.自動生成XML測試腳本的類測試[J].信息技術,2006(11):145148.
[9]桑圣洪,胡飛.性能測試工具LoadRunner的工作機理及關鍵技術研究[J].科學技術與工程,2007,7(6):10201022.
[10]李冰.基于LoadRunner軟件的CRM系統性能測試[J].計算機與數字工程,2012(4).
[11]楊鶴標,李云平.基于UML活動圖的功能測試場景生成方法[J].計算機工程,2011,37(21):5557.