徐小春,王禮生,董超群
XU Xiaochun,WANG Lisheng,DONG Chaoqun
江南計算技術研究所軟件測評中心,江蘇無錫214083
Software Testing Center,Jiangnan Institute of Computing Technology,Wuxi,Jiangsu 214083,China
不少信息系統存在的“用戶數過多無法登錄”、“系統忙無響應”、“越用越慢”等問題導致了糟糕的用戶體驗。因此在系統上線之前對其進行測試時,壓力測試是一項必不可少的工作。大中型的信息系統在設計時,一般都會考慮支持的并發用戶數、吞吐量、連接數、持續運行時間等壓力測試相關的指標,如何有效驗證各類指標的實現情況是測試人員必須解決的問題。
在傳統的軟件測試實驗室內難以部署復雜的、異構和分布式的壓力測試環境,要直接在空間有限的實驗室內部署與真實環境完全一致的測試環境來開展測試的可能性小;對于那些需要模擬用戶極度擁塞場景的軟件測試,更難在實驗室內開展。測試人員只能在非常有限的時間內使用待上線的生產環境開展工作,測試的充分性得不到保證。
當前云計算系統的高速建設給測試工作帶來了新的啟示。云計算能夠按需提供計算、存儲和網絡等壓力測試必須的資源,使用方便且成本比為一個測試項目單獨構建復雜測試環境低,因此可探索使用云計算的基礎設施實施壓力測試的方法。本文闡述利用云計算的基礎設施構建虛擬測試實驗室實施壓力測試的方法,將云計算技術引入到壓力測試過程中,以解決傳統的測試實驗室構建壓力測試環境困難的問題。
Vlab是一個寬泛的概念,有虛擬測試實驗室、虛擬教學實驗室、虛擬醫療實驗室等。本文中的虛擬實驗室是計算機領域的Vlab[1],它提供通用的桌面計算機、工作所需的網絡、標準軟件配置如操作系統、數據庫和測試工具等,并且保證計算機系統安全。工作人員不接觸實驗室的實際物理設備,而是通過RDP、SSH或VNC客戶端訪問遠程的桌面機或服務器的虛擬機(Virtual Machine,VM)。
利用云計算基礎設施構建用于測試的Vlab,允許任何人在任何時刻按需訪問與物理環境類似的虛擬環境,無需像使用物理機那樣長時間地等待安裝配置。Vlab集中管理高度虛擬化的基礎設施,動態地部署測試資源,確保滿足測試項目的需求[2]。從另外一個角度看,其管理的對象是測試云,按照服務等級協議選擇測試參數、配置測試環境、跟蹤測試進展并檢查測試結果[3]。
Vlab使用云計算基礎設施構建,虛擬計算機、網絡和存儲的功能表現與真實物理設備的表現相似,因此在實踐中用得較多的是功能、安全性和兼容性等方面的測試。如何將Vlab應用于壓力測試則是本文研究的重點。
壓力測試是通過逐步增加系統負載,測試系統性能的變化,并最終確定在什么負載條件下系統性能處于失效狀態,并以此來獲得系統性能提供的最大服務級別的測試[4]。通俗地講,壓力測試是一定要在規定的負載下測試到系統發生故障為止。對當今的信息系統尤其是網絡應用服務系統的壓力測試一般需:
(1)測試最大的并發用戶數、在線用戶數或連接數等指標;
(2)測試能處理的最大數據量,如吞吐率、帶寬或頁面數等指標;
(3)測試事務處理能力相關的指標例如響應時間和每秒處理的事務數;
(4)測試在不同位置產生的負載對系統的影響;
(5)需進行持續一段規定的時間,而且連續不能中斷的測試。
壓力測試常常被歸為性能測試的一種類型,一般與性能測試和調優工作結合在一起進行。測試通過與否需要依據系統需求作出相應的判斷。
壓力測試一般通過自動化的方法完成。首先完成壓力測試腳本創建和調試,然后配置好壓力測試的場景,提交壓力測試平臺執行。多數壓力測試平臺中,控制器、負載發生器和分析器承擔著壓力測試執行的主要工作。控制器將腳本傳遞給負載發生器,啟動并監控多個負載發生器的執行;負載發生器是施加壓力的重要工具,按照指定用戶數執行腳本,發起對目標系統的壓力測試;分析負載發生器執行的結果數據,產生測試報告。
壓力測試的工具比較多,典型的工具有LoadRunner、RPT、SilkPerformer和Jmeter等[5],這些工具的共同特點是支持錄制或者手工編寫壓力測試的腳本,支持測試場景的配置,并且能控制多機上的負載發生器模擬一定數量的虛擬用戶(Virtual User,VU)生成高強度的壓力,對目標系統進行充分的測試。
壓力測試的這些特點要求壓力測試要有足夠的資源投入。傳統的壓力測試方法是通過在一定數量的物理機上部署負載發生器,生成VU,訪問被測系統。這種方法的缺點是需要部署指定數量的計算機,工作量和成本較大,例如要測試支持10萬并發用戶的大型系統,若每臺計算機支持創建250個VU,則需要配置400臺計算機,在一般的實驗室中難以實現。
基于云計算基礎設施構建Vlab為解決上述問題提供了一個新的途徑[6]。利用支持千臺VM的測試云,在Vlab中以模板為基礎創建一定數量負載發生器,并且指定其分布于不同地點的資源池,快速部署所需VM群,工作量和成本都有效降低,且能實現多地點的并發訪問,與真實的使用環境相似,從而保證測試充分性。若能以標準的測試流程向用戶提供服務,則能實現“測試即服務”的功能[7]。
一般的壓力測試過程(以下記作P1)較復雜,步驟比較多。在測試計劃已經確定的情況下,需要選擇合適的測試工具,(1)設計測試腳本;(2)向設備管理員申請測試資源,如計算機、網絡和存儲;(3)根據VU規模部署單機獨立測試環境或多機聯合測試環境,在其中安裝指定的操作系統和測試工具;(4)測試控制器與負載發生器的連通性;(5)設定測試場景及參數;(6)執行測試;(7)執行完導出測試結果數據,向設備管理員歸還測試資源;(8)分析測試結果。在這種模式下,測試人員必須參與所有的步驟。
在基于Vlab的環境下,壓力測試過程可以設計得更加簡單易用,在壓力測試服務平臺中以服務的形式向測試人員提供專業的壓力測試服務,其測試過程將(以下記作P2)步驟簡化為3步。如圖1所示。
P2包括:(1)設計測試腳本;(2)向壓力測試服務平臺申請壓力測試,申請時配置測試場景及參數,上傳已設計好的測試腳本,壓力測試服務平臺在接受到申請后在Vlab中自動部署測試環境并開始測試執行;(3)分析測試結果。
P2的步驟(1)和步驟(3)與P1的步驟(1)和步驟(8)相同,而步驟(2)的測試執行由壓力測試服務平臺后臺進行,無需測試人員參與。壓力測試服務平臺根據測試人員申請時所設定的參數計算所需的VM數,從Vlab的資源池中自動選擇資源,基于預置的控制器模板和負載發生器模板分配計算機、網絡和存儲,創建控制器和負載發生器的VM,啟動并執行測試,集中測試結果數據,將結果反饋給測試人員,最后自動釋放所有的測試資源。
在壓力測試服務平臺的支持下,測試人員所關注的測試資源部署、測試工具安裝、測試環境的配置等工作量較大的工作交由了系統自動完成,測試人員可以將更多精力投入在腳本、場景和結果分析等工作上。
本文提供了一個基于Vlab的壓力測試服務平臺的基礎架構模型,供測試人員在設計壓力測試平臺時參考。

圖1 壓力測試過程
云計算基礎設施服務能提供用于測試的VM組成測試環境,但是基于VM的軟件測試環境往往只關注單個VM上的技術,缺乏對多VM組成的分布式測試環境的考慮,忽略了VM之間的內在聯系[8]。此外,由于缺乏對虛擬測試環境的整體設計、管理、監控等功能的支持,傳統的由VM建立的測試系統無法體現壓力測試環境的特點。系統架構設計應根據壓力測試的特點,考慮以下幾方面的需求:
(1)壓力測試服務的管理。服務管理包括服務的申請、處理和終止。測試人員能夠通過瀏覽器申請測試服務,服務提交后Vlab后臺處理該服務,測試執行完成后服務自動終止。測試人員能夠監控后臺處理過程中服務的狀態。
(2)Vlab需支持按測試項目構建測試環境。分布式系統一般由客戶端、應用服務器、數據服務器等不同用途的計算資源構成,在構建項目的壓力測試環境時必須分別部署項目對應的資源。為一個被測軟件系統測試而建立的所有測試資源納入一個測試項目的統一管理。
(3)VM、網絡和項目的模板化。將安裝了不同操作系統、數據庫或測試工具的VM模板化,將網絡參數如IP地址模式、掩碼、網關配置等模板化,新項目創建時選擇所需的模板,部署完成后就不需要再安裝相應的軟件。將項目模板化,類似的項目實例化該模板,快速部署生成即配即用的環境,節省用于重復配置的時間。
(4)提供必要的管理功能。這些功能包括①與測試項目相關的用戶、用戶組和權限管理;②VM和網絡模板管理;③活動日志、資源使用、已部署VM的監視;④資源池中主機、數據存儲庫和網絡管理等。
能夠滿足以上需求的典型的壓力測試服務平臺架構如圖2所示。
圖2所示的壓力測試服務平臺由云計算基礎設施、Vlab和壓力測試服務組成。云計算基礎設施為Vlab提供基本的計算、網絡和存儲服務;Vlab處理來自壓力測試服務層的各類請求,調用云計算基礎設施的服務接口,完成資源的分配和釋放;壓力測試服務層負責將壓力測試過程封裝成服務,提供面向測試人員的工作界面。
(1)壓力測試服務:實現圖1所述的基于Vlab的測試過程。測試人員在瀏覽器中完成服務的申請、測試參數和場景的配置、測試腳本的上傳等工作,服務申請提交后由壓力測試服務平臺自動地分配所需的軟硬件資源、執行測試腳本、反饋測試結果并釋放資源,后臺工作完成后,測試人員查看并分析測試結果。壓力測試服務通過調用Vlab提供的SOAP/REST API對項目、VM和模板等進行管理和使用[9]。
(2)Vlab:是壓力測試服務平臺設計的關鍵,也是壓力測試服務和云計算基礎設施之間的“橋梁”,處理來自壓力測試服務層的各類請求。Vlab提供管理員功能部件和測試員功能部件。管理員功能部件至少應包括VM模板管理、網絡模板管理、用戶/用戶組管理、權限管理、存儲庫管理、資源池管理、測試工具和腳本管理功能,才能滿足Vlab的配置管理需求;測試員功能部件一般包括測試項目創建、測試配置計劃、VM部署、VM開關停與快照、網絡管理、測試工具及腳本選擇器、資源監控的功能,滿足一個測試項目的使用需求[10]。Vlab通過調用云計算基礎設施服務提供的SOAP/REST API對基礎設施資源等進行管理和使用。
(3)云計算基礎設施:一般由服務器集群、存儲服務器和高速網絡組成測試云。服務器一般配置高性能多核CPU、大內存、高速網卡,并且安裝虛擬化軟件和代理工具。虛擬化層之下的圍欄驅動實現了對多VM的隔離,使得不同的測試模板可以重復生成和同時部署而不會在網絡上引起IP地址和MAC地址的沖突。多臺服務器同時工作,保持負載均衡,使用共享存儲,形成服務器集群,以獲得比較高的性能。存儲服務器為測試工作提供存儲VM文件、測試工具、測試用例庫和系統軟件鏡像的服務[11]。測試云為上層的Vlab服務提供SOAP/REST API,包括VM管理、網絡管理、存儲管理等的應用編程接口,開發人員按照接口規范實現Vlab服務。

圖2 壓力測試服務平臺的架構示意圖
壓力測試服務平臺的構建首先要確定測試云的獲取方式。測試云可自行構建或者利用已有的商用計算云,例如基于云的CTaaS系統即利用Amazon EC2作為其基礎設施[12]。自行構建測試云需要根據測試需求配置相應數量的高性能服務器、網絡設備和存儲設備,而且需要一套功能完善的基礎設施管理軟件;租用已有的商用計算云省去了建造和維護基礎設施的過程,能夠縮短工程周期,但是對需要與互聯網物理隔離的企業不適用。測試云須為Vlab的設計提供一套功能全面的API,否則無法在Vlab中實現測試項目的VM管理、網絡管理和存儲管理等功能項。
其次需要決定是完全自主設計還是基于現有的COTS工具開發Vlab。完全自主設計按照需求設計系統的配置項,實現系統所有功能,需要一個較長的開發周期;基于現有的COTS工具提供的接口進行開發,不僅能節省時間,而且可以得到較好技術支持。現有虛擬實驗室方面的COTS工具的基本功能完善,能與云計算基礎設施服務集成,并且提供進一步開發的編程接口,擴展測試方面的應用。有代表性的工具是Vmware vCloud Director、SkytapCloud、SurgientVirtual Automation Platform和Microsoft Visual Studio Lab Management[13]。
最后是需要根據壓力測試服務的具體需求確定所需實現的服務功能集。因目前還沒有成熟的壓力測試服務構建工具,需要自行設計。若要實現圖2所述的所有功能,實現較高程度的自動化,則工作量較大。設計者可根據測試需求,進行適當剪裁。
為驗證第4章所述之架構實現的可行性,本文利用現有的COTS工具并結合自主開發構建了一個小規模的壓力測試服務平臺實驗環境,如圖3所示。
云計算基礎設施由5臺雙CPU(每CPU四核,主頻2.4 GHz)服務器、1臺4 TB盤陣、1臺交換機組成,安裝Vmware的ESX Server操作系統。為了對ESX Server進行管理,配置了一臺vCenter Server服務器。
Vlab使用單獨的服務器,其中安裝vCloud Director,將vCenter Server所管理的所有ESX Server均納入到vCloud Director的資源池。在Vlab中創建預置了壓力測試工具(本文以LoadRunner為例)的VM模板,包括控制器模板和負載發生器模板。Vlab根據模板部署負載發生器VM,之后在測試執行時產生所需數量的VU對被測系統施加壓力。
壓力測試服務亦使用單獨的服務器,其中安裝IIS服務,并部署自行設計的壓力測試服務應用。該應用調用Vlab的REST API,提供服務申請、參數和場景配置、腳本上傳、查看結果的用戶界面,并能自動部署負載發生器、測試連通性、在控制器中啟動測試,執行完后反饋測試結果,最后自動釋放所自動部署的資源。

圖3 壓力測試服務平臺實驗環境
為了考察測試平臺的有效性,本文在小規模的壓力測試服務平臺實驗環境下與在一般壓力測試平臺下都進行了實驗,并對實驗結果進行了分析。
5.2.1 測試過程
本文選擇某信息系統的網站作為測試對象,主要測試大量并發用戶對該網站首頁的訪問時各項指標,包括響應時間、點擊率、吞吐率等數據,目的是能力驗證,驗證其能否支持1 000個并發用戶。
一般壓力測試平臺使用5臺微機,主頻3.2 GHz,內存1 GB,都安裝LoadRunner,其中一個是控制器,其余4個作為負載發生器,基于硬件配置、操作系統連接數限制、網站首頁復雜性和許可證等多因素的考慮,設置每個負載發生器產生的VU數為250。小規模的壓力測試服務平臺在后臺部署該項目的測試資源時,亦創建配置相當的VM。兩種方法構建的測試環境類似。
在一般壓力測試平臺下,按照P1實施測試,包括資源部署、連通性測試和導出數據等工作都需要人工完成,只有并發執行是由計算機自動完成。而在基于Vlab的壓力測試服務平臺下,按照P2實施測試,設計好腳本之后,測試人員申請壓力測試服務,指定并發用戶數量、場景調度策略[14]和位置等信息,上傳測試腳本,提交壓力測試服務平臺測試。后臺執行時,從模板自動部署(1 000/250)=4個負載發生器和1個控制器VM,其余4個作為負載發生器。負載發生器的部署位置根據申請服務時所配置的值部署。例如若位置值配置為1,則將4個負載發生器部署在一臺服務器上;若位置值配置為4,即模擬在4個地點產生負載,則在4臺服務器上各部署一個負載發生器。本次實驗中,為了保持與一般壓力測試平臺的相似性,采用后一種配置。
5.2.2 開銷分析
本次實驗中,對于P1和P2,設計測試腳本和分析測試結果的工作內容相同,所需時間基本相當;對于P1,步驟(2)~(7)中除步驟(6)是自動執行可準確測量時間為147 s外,其余步驟均為人工完成,執行時間只能估計。按照壓力測試經驗估計,在熟練的情況下,步驟(2)約10 min,步驟(3)約4 h,步驟(4)約2 min,步驟(5)約5 min,步驟(7)約10 min,步驟(2)~(7)總時間約4 h 29 min。
在小規模的壓力測試服務平臺上執行時,對于P2,步驟②內所有活動包括部署軟硬件資源、連通性測試、測試執行等是全自動執行,本次實驗中步驟②執行的總時間為12 min 28 s。
由此可見,基于Vlab的壓力測試服務平臺能將測試資源部署自動化并與測試執行銜接,大幅度節省測試工作所需的時間。
5.2.3 有效性分析
本次實驗中,為了分析在壓力測試服務平臺下測試的有效性,對在一般壓力測試平臺和基于Vlab的壓力測試服務平臺下的測試曲線進行了對比,包括運行VU數、響應時間、點擊率和吞吐量的曲線。
一般壓力測試平臺下的測試曲線見圖4。
基于Vlab的壓力測試服務平臺下的測試曲線見圖5。
對圖4和圖5進行對比分析發現,兩個平臺下運行VU數、響應時間、點擊率和吞吐量的測試曲線存在一些差別,但線型和趨勢基本一致。例如運行VU數的曲線,兩者都是在前30 s VU數按一定數量線性增加,之后80 s VU數處于1 000,最后40 s,大量的VU完成測試,VU數急速減少直至為0。
因此,使用基于Vlab的壓力測試服務平臺與使用一般的壓力測試平臺進行測試的結果基本相同,可以保證測試結果的有效性。
5.2.4 評價
本文對典型的場景包括用戶登錄、關鍵字檢索、數據項查詢、添加數據項等亦進行了測試,使用基于Vlab的壓力測試服務平臺能大幅降低測試開銷,同時其測試曲線亦與一般壓力測試平臺一致。該平臺作為一種采用了虛擬化技術的自動化測試服務平臺,壓力測試項目能夠高效實施。在需測試的VU數量越多時,該服務平臺越具有優勢。該平臺的缺點是僅適用于面向多用戶的網絡應用系統的壓力測試,具有一定的局限性。

圖4 一般壓力測試平臺下的測試曲線

圖5 基于Vlab的壓力測試服務平臺下的測試曲線
在云計算背景下,相對于采用一般的壓力測試方法實施壓力測試,基于Vlab壓力測試方法更易于使用,且效率更高。雖然構建一個基于Vlab的專業壓力測試服務平臺需要一定的投入,但是利用它可以將測試資源部署和測試執行有效對接,實現測試自動化,并且支持多項目大規模的壓力測試。而在允許連接互聯網的條件下,可利用不同位置的商用測試云,構建更大規模的壓力測試服務平臺,模擬真實的場景,對目標系統進行更充分的測試。
[1] Burd S D,Seazzu A F.Virtual computing laboratories:a case study with comparisons to physical computing laboratories[J].Journal of Information Technology Education,2009,8:55-78.
[2] Lanowitz T,Dronzek L.Virtual lab management[R].2010:1-26.
[3] Bai Xiaoying,Li Muyang,Huang Xiaofei,et al.Vee@Cloud:the virtual test lab on the cloud[C]//Proc of the 8th International Workshop on Automation of Software Test,2013:15-18.
[4] 吳為根.基于Web的壓力測試[D].上海:復旦大學,2006:1-2.
[5] 段念.軟件性能測試過程詳解與案例剖析[M].北京:清華大學出版社,2012:60-75.
[6] Gao Jerry,Bai Xiaoying,Tsai Wei-Tek.Cloud testing-issues,challenges,needs and practice[J].Software Engineering,2011,1(1):9-23.
[7] Yu Lian,Tsai Wei-Tek,Chen Xiangji,et al.Testing as a service over cloud[C]//Proc of the 5th IEEE International Symposium on Service Oriented System Engineering,2010:181-188.
[8] 龔愛斐,張文靜.基于虛擬化架構的軟件開發與測試環境自動化[J].自動化與信息工程,2008,29(2):4-6.
[9] Candea G,Bucur S,Zamfir C.Automated software testing as a service[C]//Proc of the 1st ACM Symposium on Cloud Computing.New York:ACM Press,2010:155-160.
[10] Xie Weicheng,Yang Xia,Li Fugan.A virtual laboratory platform and simulation software based on Web[C]//Proc of the 10th International Conference on Control,Automation,Robotics and Vision,2008:1650-1654.
[11] Armbrust M,Fox A,Griffith R,et al.A view of cloud computing[J].Communications of the ACM,2010,53:50-58.
[12] Gao Jerry,Manjula K,Roopa P,et al.A cloud-based TaaS infrastructure with tools for SaaS validation,performance and scalability evaluation[C]//Proc of the 4th IEEE International Conference on Cloud Computing Technology and Science,2012:464-471.
[13] Kim W.Cloud computing adoption[J].International Journal of Web and Grid Services,2011,7:225-245.
[14] Mercury Interactive Ltd.Controller user guide[M].[S.l.]:HP Inc,2009:149-183.