趙 爽,董宗然
(1.沈陽體育學(xué)院 管理與新聞傳播學(xué)院,沈陽 110102;2.大連外國語大學(xué) 軟件學(xué)院,遼寧 大連 116001)
vSphere是VMware公司開發(fā)的新一代基于服務(wù)器模式的虛擬化解決方案,為實(shí)現(xiàn)和管理大規(guī)模的虛擬機(jī)架構(gòu)提供了一個完美平臺,利用云操作系統(tǒng)和虛擬數(shù)據(jù)中心,IT人員可以有效地根據(jù)負(fù)載需求分配計算資源[1].
在軟件開發(fā)過程中,基于自動化測試平臺可以極大地提高軟件測試效率,因此構(gòu)建自動化測試平臺是軟件企業(yè)基礎(chǔ)設(shè)施建設(shè)的重要組成部分[2].蔡建平[3]、許文瑛[4]、申德瑋[5]等著眼于開發(fā)具有協(xié)同軟件測試功能的管理系統(tǒng),用于解決多個不同軟件技術(shù)模塊協(xié)同測試的問題,實(shí)現(xiàn)了對軟件測試的全程跟蹤和實(shí)時管理.周夢瑤[6]、王丹[7]等則著眼于利用虛擬機(jī)技術(shù)構(gòu)建自動化測試或監(jiān)控環(huán)境,用于解決在軟件系統(tǒng)進(jìn)行網(wǎng)絡(luò)測試時,搭建真實(shí)運(yùn)行環(huán)境所遇到的造價高、耗時長、維護(hù)困難等問題.但在實(shí)施過程中發(fā)現(xiàn),搭建單一機(jī)器或搭建多機(jī)器互連但機(jī)器間無協(xié)作關(guān)系的自動化測試環(huán)境較易實(shí)現(xiàn),但對于構(gòu)建多機(jī)器互連且需要多機(jī)之間具有協(xié)同配合能力的自動化測試環(huán)境具有一定難度[8].在工業(yè)自動化領(lǐng)域,大量用戶應(yīng)用場景基于分布式計算環(huán)境,而且用戶量大,對軟件功能使用全面且復(fù)雜,所以要求軟件測試平臺能夠盡可能滿足對用戶真實(shí)使用情形的模擬[9],因此,本文提出一種基于VMware vSphere構(gòu)建分布式協(xié)同軟件測試平臺的新方法.
vSphere通過虛擬服務(wù)器(Server)對虛擬環(huán)境進(jìn)行管理,在虛擬環(huán)境中,通過管理程序根據(jù)需要創(chuàng)建虛擬客戶端(Client),并對每個Client虛擬機(jī)進(jìn)行系統(tǒng)安裝和分布式管理.本文分布式拓?fù)浣Y(jié)構(gòu)由多臺網(wǎng)絡(luò)互連的虛擬機(jī)構(gòu)成,而對虛擬機(jī)間的協(xié)同監(jiān)控能力則主要由部署在虛擬機(jī)上的軟件設(shè)施實(shí)現(xiàn).實(shí)現(xiàn)軟件測試自動化的技術(shù)和工具有很多種[10],用戶可以根據(jù)軟件的運(yùn)行平臺、待測軟件的屬性和類型以及軟件測試需求等進(jìn)行選擇.而對軟件測試過程中,需要多機(jī)協(xié)同配合進(jìn)行測試,現(xiàn)有自動化工具無法滿足需求,協(xié)同軟件測試平臺的提出正是為了解決此類難題.
首先要將平臺軟件和待測軟件部署到測試平臺的虛擬機(jī)上,在測試執(zhí)行過程中,通過調(diào)用測試平臺中的方法對指定虛擬機(jī)進(jìn)行控制和狀態(tài)查詢,控制操作包括:上電開機(jī)、斷電關(guān)機(jī)、重啟、系統(tǒng)關(guān)機(jī)、掛起、插入網(wǎng)線等;狀態(tài)查詢包括查詢指定機(jī)器的開關(guān)機(jī)狀態(tài)、網(wǎng)絡(luò)連接狀態(tài)、服務(wù)程序運(yùn)行狀態(tài)、腳本執(zhí)行狀態(tài)等.
為了實(shí)現(xiàn)對vSphere虛擬機(jī)環(huán)境的自動化監(jiān)控,調(diào)研了4種實(shí)現(xiàn)協(xié)同測試平臺的潛在技術(shù)方案:
1)基于Python定制程序?qū)崿F(xiàn).Python是當(dāng)前流行的程序設(shè)計語言,具有豐富和強(qiáng)大的庫[11],該方案需在各虛擬機(jī)上部署定制好的Python程序,通過Python程序完成對虛擬機(jī)的控制、查詢和協(xié)同通信.
2)基于自動化工具操作vSphere UI實(shí)現(xiàn).通過自動化工具抓取vSphere圖形界面的UI元素,再基于抓取的控件對象,編寫自動化腳本操作虛擬機(jī).
3)基于Jenkins任務(wù)實(shí)現(xiàn).Jenkins可用于監(jiān)控外部調(diào)用執(zhí)行的工作,將虛擬機(jī)操作設(shè)計成Jenkins任務(wù),在測試中調(diào)用相應(yīng)任務(wù)操作虛擬機(jī)或執(zhí)行自動化腳本[12].
4)基于PowerShell定制程序?qū)崿F(xiàn).通過VMware官方提供的Windows PowerShell接口PowerCLI實(shí)現(xiàn),用于對vSphere各方面進(jìn)行自動化管理,相比采用GUI方式操作虛擬機(jī)更為穩(wěn)定.
表1對上述方案的主要優(yōu)缺點(diǎn)進(jìn)行了對比.
表1 不同技術(shù)方案對比Tab.1 Comparison of different technical solutions
本文測試平臺的工況需求主要包括:能夠基于vSphere虛擬機(jī)平臺對目標(biāo)虛擬機(jī)進(jìn)行完整管控,要求能夠覆蓋測試虛擬機(jī)的各種操作,方案1)最滿足該項(xiàng)需求;測試平臺配置需要靈活、穩(wěn)定、易擴(kuò)展,測試人員能夠通過修改平臺配置適應(yīng)新需求,方案1)和4)滿足該項(xiàng)需求;平臺搭建最好具有較低的前期開發(fā)和后期維護(hù)成本,方案3)和4)是較好方案;此外,測試平臺還需要對內(nèi)部認(rèn)證信息進(jìn)行保護(hù),并且易于與當(dāng)前已有工具進(jìn)行集成.綜合考慮目標(biāo)平臺的使用工況和各方案的適用場景,協(xié)同軟件測試平臺的關(guān)鍵技術(shù)選型確定為PowerShell &PowerCLI.
測試平臺基礎(chǔ)架構(gòu)設(shè)計如圖1所示,其拓?fù)渲邪ňW(wǎng)絡(luò)互連的一個vSphere Server,若干個vSphere Client,一個Jenkins Server,一個或多個資源服務(wù)器(可選).其中,vSphere Server是基于vSphere構(gòu)建測試平臺的控制中心,對集群內(nèi)各虛擬機(jī)的管理需要向它發(fā)送命令來完成;vSphere Client是部署測試環(huán)境和測試平臺定制程序的虛擬機(jī),測試用例要求安裝的待測軟件產(chǎn)品和腳本執(zhí)行要求的自動化測試環(huán)境可根據(jù)需要部署到相同或不同的Client虛擬機(jī)上.負(fù)責(zé)協(xié)同控制的測試平臺程序也要部署到Client虛擬機(jī)上,包含部署在一個Client上的Master程序和部署到若干個Client上的Slave程序.Jenkins Server負(fù)責(zé)測試用例所要求自動化測試環(huán)境的部署以及測試用例主流程的控制;資源服務(wù)器負(fù)責(zé)提供部署測試環(huán)境所需要的軟件安裝包、工具安裝包和自動化腳本等代碼.
圖1 測試平臺架構(gòu)Fig.1 Infrastructure of testing platform
自動化測試平臺的使用對象是公司內(nèi)部測試團(tuán)隊(duì),并非公司外部的產(chǎn)品用戶,其安全性風(fēng)險主要體現(xiàn)在高權(quán)限賬戶信息的泄露上,這些信息如果以明文方式被腳本使用,則會產(chǎn)生不必要的風(fēng)險.
在基于vSphere操控虛擬機(jī)的過程中,需要驗(yàn)證身份的地方包括兩處,一處是連接vSphere Server,無論通過圖形界面登錄還是命令行登錄,都需要進(jìn)行vSphere用戶認(rèn)證;另一處是Master程序執(zhí)行PowerCLI命令遠(yuǎn)程訪問Client虛擬機(jī)時,需要提供當(dāng)前機(jī)器和目標(biāo)機(jī)器的操作系統(tǒng)用戶認(rèn)證.登錄信息屬于用戶敏感信息,在安全級別較高的環(huán)境中,不能以明文顯示、存儲和傳輸[13].PowerCLI命令支持通過證書方式連接vSphere Server和執(zhí)行遠(yuǎn)程命令,證書認(rèn)證可以更好地保護(hù)用戶敏感信息,在部署階段輸入密碼生成加密證書,程序中根據(jù)證書和用戶名創(chuàng)建內(nèi)部證書對象,在后續(xù)命令中使用證書對象驗(yàn)證,獲取程序如下:
read-host-assecurestring |convertfrom-securestring| out-file “path_of_credential_file” (創(chuàng)建證書)
$password=get-content “path_of_credential_file”| convertto-securestring (讀取證書、獲取密文密碼)
$credential=new-object-typename
System.Management.Automation.PSCredential-argumentlist $username,$password (創(chuàng)建證書內(nèi)部對象)
$server=connect-viserver $ip-credential $credential-port $port (證書連接)
其中,path_of_credential_file為存儲密碼的證書文件,$username、$ip、$port分別為vSphere用戶名、服務(wù)器ip地址和端口號.
Master程序主要由PowerShell腳本、CMD/BAT腳本以及一個方便用戶使用的圖形化接口工具構(gòu)成.PowerShell &PowerCLI腳本程序用于執(zhí)行對部署Slave程序的Client虛擬機(jī)的控制和查詢,實(shí)現(xiàn)主要功能包括:開機(jī)、斷電關(guān)機(jī)、重啟、物理連接/斷開網(wǎng)絡(luò)設(shè)備、拷貝文件到遠(yuǎn)程機(jī)器、執(zhí)行遠(yuǎn)程機(jī)器腳本等.Windows系統(tǒng)出于安全考慮,限制PowerShell腳本直接運(yùn)行,自動化測試為了避開這種限制而又不修改腳本執(zhí)行權(quán)限,通常通過BAT/CMD腳本封裝PowerShell腳本.
在BAT/CMD腳本被調(diào)用時,內(nèi)部啟動Power-Shell解釋器,執(zhí)行PowerShell腳本,并將傳給BAT/CMD的命令參數(shù)轉(zhuǎn)發(fā)給PowerShell腳本.PowerCLI腳本程序提供了操控vSphere虛擬機(jī)的能力,但測試用例中的協(xié)同控制邏輯需要借助自動化腳本實(shí)現(xiàn),當(dāng)自動化腳本需要操作或查詢虛擬機(jī)時,則調(diào)用BAT/CMD封裝的PowerCLI程序.自動化腳本調(diào)用命令在大多數(shù)情況下也很方便,但為了給自動化測試用戶、手動測試用戶以及虛擬機(jī)管理用戶提供更好的體驗(yàn)和靈活性,本文開發(fā)了一個圖形化接口工具,對命令參數(shù)及工具的配置可通過配置文件讀入,虛擬機(jī)操作和結(jié)果查看通過圖形界面直觀完成.圖2給出了Master程序的工作流.
圖2 Master程序工作流Fig.2 Workflow of Master program
Slave程序負(fù)責(zé)完成對部署它的Client機(jī)器的本地操作,主要由CMD/BAT腳本、PowerShell &PowerCLI腳本以及其它類型程序構(gòu)成.Slave程序用來執(zhí)行特定任務(wù),可由Master程序使用Invoke-VMScript命令遠(yuǎn)程啟動,方法如下:
Invoke-vmscript-scripttext “path_of_script_file”
-vm $client-hostcredential $host_cred
-guestcredential $guest_cred
-scripttype Bat-ErrorAction Stop
其中,path_of_script_file為Slave中的腳本程序,$client為部署Slave的虛擬機(jī),$host_cred為當(dāng)前機(jī)器系統(tǒng)用戶證書對象,$guest_cred為遠(yuǎn)程機(jī)器系統(tǒng)用戶證書對象.
在本文協(xié)同測試平臺中,Slave程序可以執(zhí)行的功能包括:使能或禁用NIC網(wǎng)卡,查詢Client機(jī)器上的dump文件生成情況以及查詢特定服務(wù)運(yùn)行狀態(tài)等.需要指出,在系統(tǒng)中使能或禁用網(wǎng)卡與物理上連接或斷開網(wǎng)絡(luò)設(shè)備雖然都能達(dá)到控制網(wǎng)絡(luò)連接的效果,但在軟件測試中并非等效的環(huán)境設(shè)置,因?yàn)檐浖绦驅(qū)Σ煌闆r下斷網(wǎng)的處理邏輯很可能不同,同樣物理斷電關(guān)機(jī)和系統(tǒng)關(guān)機(jī)在測試中也不是等效操作,所以本文測試平臺要求全面覆蓋不同用例情況.
為了提高測試效率,協(xié)同測試環(huán)境的部署需要自動完成.Jenkins是一個強(qiáng)大的基于開源項(xiàng)目的應(yīng)用平臺,具有功能豐富的插件可供擴(kuò)展,支持項(xiàng)目的持續(xù)集成和交付,廣泛應(yīng)用于軟件公司的CI(continuous integration)系統(tǒng)中[14].選擇一臺性能穩(wěn)定的機(jī)器安裝Jenkins服務(wù)器,在被Jenkins管理的虛擬機(jī)上部署Jenkins客戶端,通過Jenkins的Web管理接口在服務(wù)器中創(chuàng)建各類任務(wù)(Job),用于完成對虛擬機(jī)的管理、軟件安裝以及腳本運(yùn)行等.本文基于Jenkins部署協(xié)同測試環(huán)境的流程如圖3所示,圖3中流程對應(yīng)完成相應(yīng)功能的Jenkins任務(wù).
圖3 Jenkins任務(wù)工作流Fig.3 Workflow of Jenkins task
本文主要測試FactoryTalk?View Site Edition (SE)10.0軟件的冗余功能.SE軟件是分布式人機(jī)交互接口(HMI)平臺,用于實(shí)現(xiàn)對工業(yè)生產(chǎn)過程的自動監(jiān)控,對系統(tǒng)可靠性和魯棒性要求很高.冗余功能支持對HMI服務(wù)器、數(shù)據(jù)服務(wù)器、報警服務(wù)器的冗余配置,在Primary Server出現(xiàn)故障的情況下,自動切換到Secondary Server,同時也支持Secondary到Primary的反向切換.本文構(gòu)建了冗余功能的自動化測試平臺,測試環(huán)境部署如表2所示.
表2 測試環(huán)境配置Tab.2 Configuration of testing environment
冗余功能是SE產(chǎn)品的重要功能之一,在測試中需要構(gòu)建各種讓在線Server失去通信而自動切換到備份Server的用例情形.測試用例除了要驗(yàn)證無故障情況下各種功能正常外,還要驗(yàn)證在物理開關(guān)機(jī)、系統(tǒng)開關(guān)機(jī)、系統(tǒng)重啟、系統(tǒng)內(nèi)使能/禁用網(wǎng)卡、物理連接/斷開網(wǎng)絡(luò)等情況下冗余功能是否可按預(yù)期工作.在以往沒有協(xié)同測試環(huán)境支持的情況下,主要依靠測試人員直接操作和查看狀態(tài),代價大、效率低.本文提出的協(xié)同測試平臺可以自動測試腳本,實(shí)現(xiàn)了冗余功能人工測試的等價模擬.自動測試腳本調(diào)用Master圖形工具監(jiān)控虛擬機(jī)的接口執(zhí)行效果圖如圖4所示.
圖4 接口程序執(zhí)行效果Fig.4 Execution results of interface program
表3給出了SE軟件冗余功能手動測試和自動測試的耗時情況對比.考慮到測試過程會受偶然因素影響,為減小測試誤差,每種測試情形各執(zhí)行5次,表3中數(shù)據(jù)為5次執(zhí)行時間的平均值.Primary表示主HMI服務(wù)器虛擬機(jī),Secondary表示備用HMI服務(wù)器虛擬機(jī),每種測試情形下需要執(zhí)行的用戶操作類似,需要檢查的驗(yàn)證點(diǎn)基本相同(包括查看系統(tǒng)功能執(zhí)行情況,以及各服務(wù)器的工作和在網(wǎng)狀態(tài)).
表3 冗余功能手動測試與自動測試耗時對比Tab.3 Comparison of time consumption between manual and automatic tests for redundancy function s
自動測試在界面操作速度和結(jié)果驗(yàn)證速度方面快于手動測試,但為了保證軟件運(yùn)行穩(wěn)定,自動測試往往會在一些步驟之后加入較長的延時等待,以確保關(guān)鍵步驟執(zhí)行完畢后可繼續(xù)往下執(zhí)行,所以在耗時方面自動化測試相比手動測試不一定占優(yōu).本文對實(shí)驗(yàn)平臺自動化測試腳本進(jìn)行了優(yōu)化,盡可能采用判斷目標(biāo)出現(xiàn)或消失的方法取代等時操作,所以時間成本降低約13%,本文方案在測試耗時方面可被接受.自動測試的最大優(yōu)勢是可以選定在非工作時段執(zhí)行,而不受人力分配影響,也解決了人工測試固有的體能問題.
針對復(fù)雜分布式軟件系統(tǒng)在自動化測試中需要解決多機(jī)器協(xié)同配合的問題,提出了一種基于vSphere虛擬化平臺的、多種技術(shù)方案融合的新型解決方法.分別從技術(shù)選型、平臺體系結(jié)構(gòu)設(shè)計、關(guān)鍵技術(shù)分析等方面進(jìn)行了論述,并以FactoryTalk View SE的冗余功能作為測試實(shí)例驗(yàn)證了所提方法的可行性和有效性,使原本只能手工執(zhí)行的測試用例實(shí)現(xiàn)了自動化,提升了軟件生產(chǎn)效率.此外,所設(shè)計的圖形化操作接口程序,不僅可被自動化腳本調(diào)用,也可為手動測試人員操控虛擬機(jī)帶來方便,提升人工測試效率.未來研究可根據(jù)測試需求,開發(fā)出功能更豐富的Slave程序和Master程序組件,靈活實(shí)現(xiàn)對協(xié)同測試平臺的功能擴(kuò)展.