中國聯通研究院 北京 100032
云計算[1-2]是當前信息技術領域的熱點之一,已在工業界和學術界內備受關注。它是一種全新的計算模式,通過互聯網以服務的方式向用戶提供動態可伸縮的虛擬化計算資源。用戶在使用計算資源的過程中,僅需與服務供應商進行少量的交互,可以更好地專注于自身的上層業務邏輯,不必關心復雜的底層硬件邏輯、網絡協議、軟件架構等細節。云計算帶來的以服務方式將虛擬化的計算資源供給用戶使用的模式,給傳統信息技術產業帶來巨大影響,改變了傳統軟件生產組織和軟件架構設計方式。這也對傳統的軟件測試方法與技術形成了新的挑戰,如何開展云計算環境下的軟件測試是國內外業界與學界面臨的熱點問題。
云測試是上述背景下出現的軟件測試新模式。目前,該領域的研究主要集中在如何將測試遷移到云中,利用云計算技術整合和部署大量的計算資源,開展測試活動。研發基于云計算的軟件測試平臺,助力傳統測試活動,以少量的資源,在緊張的開發與測試時間間隔內,高效地完成測試任務,對企業的信息化建設具有深遠的戰略意義。本文概述云計算在測試領域應用研究的進展,報告我們在此方面的嘗試,以期推動云計算在軟件測試方面的應用研究。
隨著軟件設計技術的發展、軟件規模的增加和軟件開發周期的緊縮,軟件測試在整個軟件開發周期中所占比重日益增大。作為保障軟件質量與可靠性的關鍵一環,軟件測試的重要性日益增長。
云測試的研究在國內外仍處于初級階段,比較有代表性的定義是Gao等在云測試綜述[3]中提出的“云測試是在云環境和基礎設施中利用云計算技術解決方案進行的測試活動”。根據該定義,云測試是具有以下特征的測試活動,即將軟件測試活動遷移到了云端,利用云計算技術按需提供與測試相關的軟硬件資源,以服務的方式向用戶提供按使用付費的測試業務(Testing as a Service)。云測試的研究包括兩個方面:1)如何有效利用云環境中的資源測試其他軟件;2)如何測試部署在“云”中的軟件。第一方面的研究主要涉及與云測試密切相關的資源調度、優化、建模等方面的問題,以便為其他軟件搭建廉價、便捷、高效的測試環境,加快整個軟件測試的進程。在這一類型的測試中,其他的軟件可以是傳統意義上的本地軟件,也可以是“云”中的應用軟件服務;第二方面的研究涉及到云平臺內部結構、功能擴展和資源配置等多方面的測試問題,測試部署在云平臺中的各種云軟件[4]。
云測試在基礎設施、測試環境部署、測試過程管理、付費方式等諸多方面顛覆了傳統軟件測試。具體體現在以下5個方面。
1) 基礎設施。傳統軟件測試需要用戶自行購買各種測試基礎設施,包括服務器硬件、網絡設備、系統軟件與測試軟件等;云測試則由云服務提供商通過云計算平臺提供測試基礎設施服務,用戶無需自行購買。
2) 測試環境部署。傳統軟件測試需要手工配置和部署測試環境,人工分配測試資源等,既有硬件上架、調試等復雜過程,又涉及操作系統、軟件的費時費力安裝;云測試支持測試資源按需分配,測試環境按需搭建和一鍵式回收。
3) 測試過程管理。傳統軟件測試采用分散管理模式,項目管理、軟件質量保證水平參差不齊,不方便集中管控;云測試便于集中管理,對測試資源進行統一整合,動態分配,減少重復性工作,提高測試效率。
4) 付費方式。傳統軟件測試需要一次性付費,軟硬件投入巨大,對于中小型用戶是個很高的門檻;云測試則僅按需購買,按照測試項目規模、測試目標、測試時間等租賃付費,降低了軟件測試的入圍門檻。
5) 商業擴展。傳統軟件測試資源利用率低,易產生資源閑置,可擴展性較差;云測試以服務的形式共享測試資源與測試工具,通過云端對外開放,可擴展性強。
本文的云測試平臺涵蓋了測試活動的全生命周期,通過虛擬化技術,支持測試環境的按需搭建,同時將測試工具掛載到了云端,支持測試工具在組織機構內的共享,降低了軟件的授權(license)投入,便于版本控制和統一管理。云測試的整體流程如圖1所示。
我們使用OpenStack[5]和兩臺Dell R710服務器,組成虛擬資源池。這兩臺服務器CPU均為Intel Xeon E5506,分別為節點controller和節點computer,通過交換機連接,處于同一局域網內。選用Ubuntu 12.04 LTS Server 64bit作為平臺的基礎操作系統,使用devStack[6]的multi-node方式部署OpenStack的Grizzly版本。

圖1 云測試的生命周期
此外,我們使用OpenStack中的KVM(Kernel based Virtual Machine)[7]技術制作了常見操作系統的云鏡像,如Linux的各種發行版本、Windows系列等。用戶通過OpenStack API指定虛擬機配置、操作系統等規格參數申請該虛擬資源,如圖2所示。申請成功后,用戶可以通過遠程連接使用虛擬資源,如Linux系統支持的OpenSSH或者VNC,Windows平臺支持的“遠程桌面”。

圖2 虛擬化資源使用管理框架
通過使用虛擬化資源,不僅可以省去硬件上架、調試、安裝等復雜環節,更實現了物理資源的統一管理。虛擬資源管理模塊,可根據項目的人數、實際需求、機器利用率等按需分配資源,支持大量并行測試項目按需申請、隨需隨用、隨用隨收等測試環境的動態管理,大幅提高硬件資源利用率。
我們調研了部門以往和現行的測試項目,歸納出常用的操作系統(如HP UX 11.31、AIX 6.1、RHEL 5.5、Win2008)、應用軟件(如Oracle EE 10.2.0.5、Tuxedo 10.3.0.0、WebLogic 10.3.0.0、WebSphere ASND 7.0、Tomcat 6、JDK6)以及它們的高頻組合,并把這些都固化到了相應的云鏡像中。利用這些云鏡像,通過資源申請階段用戶的參數設定,可以快速地自動搭建初始的測試環境。同時,允許用戶上傳安裝包、安裝腳本和配置文件等,以透明的方式自動安裝未固化進云鏡像的其它軟件,如圖3所示。此外,用戶可以通過遠程連接工具(譬如圖3中針對Windows系統的遠程桌面)登錄到虛擬機手動配置。

圖3 測試資源自動化部署
通過自動配置與安裝操作系統和通用軟件,避免手動安裝費時費力易出錯的情況,提高了測試環境部署安裝效率。
使用傳統方式搭建測試環境是非常昂貴的,要完全模擬生產環境,諸多資源缺一不可。通過虛擬資源池和預制的云鏡像,我們的云測試平臺允許用戶根據自己的不同需求自動搭建所需的測試環境,測試人員只需通過網絡就可以登陸測試環境開始測試。測試環境的按需搭建,指數級地縮短了測試準備時間,極大地提高了測試效率。此外,不同測試階段的環境都可以通過生成快照(snapshot)的方式,使得測試人員能夠一鍵恢復不同測試階段的測試環境,便于維護測試環境和執行回歸測試。
利用云計算技術,我們實現資源的自動調度分配、測試環境按需自動化搭建等核心功能。進一步地,我們將測試資源與工具封裝并以服務的方式開放出去,實現了測試即服務的模式。
合法用戶在登錄成功后根據業務需求填寫處理器、內存、存儲、軟件、接入權限等資源申請,用戶通過審核獲取資源后,就可以在云上快速搭建測試環境,設計測試流程,利用遠程登錄等手段登錄云端的測試環境,執行測試。我們實現了資源分配的自動化和并行化,按需搭建測試環境,同時,在業務測試過程中實時監控已分配資源的使用情況,向監控模塊發送監控信息報告。監控模塊實現了初步的虛擬機器健康管理和預診斷,適時發出資源追加申請,實現資源利用率的最大化。
為降低軟件授權方面的成本,云端也掛載了各種測試工具,以最大并發數購買授權,測試人員共同使用有限的機器和授權。同時,這些工具也以服務的形式對外提供服務,以工具的使用時間和強度對租賃者收費。目前,平臺提供的測試工具有LoadRunner、QTP、JMeter和Selenium,用戶登錄后選擇所需測試工具付費后可登錄已配置好測試工具的虛擬機使用工具執行測試,如圖4所示。

圖4 用戶租賃QTP付費后使用
本文利用云計算技術,將測試活動遷移入云端,包括虛擬資源按需分配統一調度、測試環境的按需搭建和集中管控、測試工具的共享和開放,涵蓋資源分配、操作系統安裝、通用軟件安裝、測試環境部署、后續配置等測試活動的全生命周期。但所述云測試平臺在測試流程管理方面功能不夠全面,顆粒度不夠精細,后續可通過集成相關的測試流程管理工具(譬如TestLink)進一步完善這些方面。概括來說,這是一次有益的嘗試,具體體現在:使用虛擬資源,可提高資源利用率,減少硬件投入;測試環境按需一鍵式部署和回收,縮短了開發與測試的間隔;測試環境易于維護和管控,方便版本管理和回歸測試;以服務的形式共享測試工具,減少軟件授權的投入;測試資源與測試工具通過云端對外開放,創造了新的運營模式。
參考文獻
[1]Mell P,Grance T.The NIST Definition of Cloud Computing[R].National Institute of Standards and Technology Pubulication 800-145,2011
[2]Sriram I,Khajeh-Hosseini A.Research Agenda in Cloud Technologies[C]//the 1st ACM Symposium on Cloud Computing(SOCC),2010:1-11
[3]Gao J,Bai X,Tsai W T.Cloud Testing-Issues,Challenges,Needs and Practice[J].Software Engineering:An International Journal,2011(1):9-23
[4] 李喬,柯棟梁,王小林.云測試研究現狀綜述[J].計算機應用研究,2012(12):4401-4425
[5]OpenStack,Home[EB/OL].[2015-03-10].http://www.openstack.org/,2015
[6]Devstack,Home[EB/OL].[2015-03-10].http://devstack.org/,2015
[7]KVM,Home[EB/OL].[2015-03-10].http://www.linux-kvm.org/page/Main_Page,2015