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