加入RUN!PC粉絲團
最近新增的精選文章
 
最多人點閱的精選文章
 
 
精選文章 - 開發技術
分享到Plurk
分享到FaceBook
 
TFS 2012 實驗室管理(3)
文‧圖/胡百敬 2013/3/4 下午 03:19:56

  在前兩期專欄中,我們說明了如何透過Visual Studio 2012/Team Foundation Server 2012建立測試用的「標準環境」,在本期專欄中,繼續介紹搭配SCVMM(Microsoft System Center Virtual Machine Manager)建立虛擬測試環境,TFS稱之為SCVMM環境。這可以提供虛擬環境快照、儲存實驗室環境、從虛擬機範本建立環境…等,「標準環境」無法支援的功能。兩者間的功能差異可以參考線上說明的列表:
http://msdn.microsoft.com/zh-tw/library/dd997438.aspx
  當下,因為Visual Studio/TFS、Windows、SCVMM等,都在2012年底更新版本,而在實作環境中,需要遷就既有平台與版權,你可能組合不同產品的某個版本。基本上,除了SCVMM 2012 SP1要安裝在Windows 2012,且這個版本的SCVMM才能管理Windows 2012 Hyper-V 3.0的虛擬機外,其他多可以混和新舊版本安裝。
  在此文章中,我們採用最新的版本組合:Visual Studio 2012/TFS 2012、Windows Server 2012/Hyper-V 3.0、SCVMM 2012 SP1來說明。

架構概述

  TFS提供的「實驗室管理」服務執行在伺服器端,是 TFS 提供的眾多服務之一,用以整合與管理測試環境的資源,如:主機,虛擬機、儲存團隊專案集合(Team Project Collection)和團隊專案、測試計畫與案例…等。整個環境架構如圖1所示:

圖1 測試管理員透過 TFS 可以搭配 SCVMM 動態管理與配置測試環境。

  TFS利用微軟的另一項產品:SCVMM管理虛擬實驗室基礎設施。SCVMM可支援多種虛擬化平台的虛擬機器(Virtual Machine)。但若要搭配 TFS 的實驗室管理,則僅能用自家的 Hyper-V,並不支援其他如 VMWare 的虛擬機器。相關規格可以參考如下網址:
http://msdn.microsoft.com/zh-tw/library/dd380687.aspx
  圖1中的「Hyper-V主機(Host)」代表實體機器,其上可執行一個以上的 Hyper-V 虛擬機器。虛擬機器是執行在實體電腦內,它模擬完整的硬體架構,形成獨立的作業系統環境,執行各種應用程式。
  測試或開發人員操控Test Manager或Visual Studio以存取Team Foundation Server(TFS),TFS經由「Lab Management」與SCVMM溝通,透過SCVMM設定與管理眾多虛擬機。執行測試時,藉由SCVMM叫起裝有「測試代理程式(Test Agent)」的虛擬機器,讓「測試代理程式」與「測試控制器」及TFS溝通,以執行測試並收集資料。
  當然,若你要測試的功能或內容Hyper-V不支援,例如Hyper-V無法透過USB存取裝置,就無法在虛擬環境中測試USB裝置。
  虛擬機器提供快照功能(Virtual Machine Snapshot),記錄在特定時間點下,虛擬機器的完整狀態。一個虛擬機器可以建立多個快照,並回復到任何虛擬機器先前建立的快照,從特定的點開始啟動執行。這讓測試者可以完成特定的測試方案,例如,回復到乾淨的虛擬機基礎狀態,然後再安裝一個新的待測程式版本。或是將發生問題的環境保留下來,讓開發人員得以分析檢討發生問題的環境。
  若要從 TFS 的「實驗室管理」存取Hyper-V 建立的虛擬機器,但 TFS服務與 SCVMM 服務安裝在不同的電腦,必須於 Lab Management 所在的機器上安裝和設定「SCVMM 管理員控制台」,SCVMM 服務與資料庫可以安裝在其他機器上。可從管理員控制台存取SCVMM服務,以管理 Hyper-V 主機電腦及其上的虛擬機。
  換句話說,TFS的Lab Management 會呼叫 SCVMM管理員控制台,SCVMM管理員控制台再與SCVMM 服務溝通,以便使用虛擬機器和範本來建立環境。透過SCVMM的安裝程式可以選擇安裝伺服器還是管理員控制台。
  透過 SCVMM 可以建置與管理「主機群組(host group) 」,也就是定義成一組的實體主機,以便於管理、監測與分配資源。另一功能是建置共享程式庫(Library Share),虛擬機器的特色之一是不需要依存特定主機,它可以將虛擬機器的定義以檔案形式儲存在磁碟上,並在短時間內恢復成執行中的虛擬環境。SCVMM的共享程式庫是將虛擬機器定義存放在網路共享的資料夾,需要時才將其複製到某個實體主機後啟動。而Visual Studio /TFS 提供的實驗室管理則是倚靠 SCVMM 的控管能力來產生彈性的測試環境。
  要靈活使用TFS的實驗室管理一定要熟悉SCVMM和Hyper-V,但由於虛擬技術不是本書的重點,在此也就不多談,建議你可以參考趙驚人老師撰寫,悅知文化出版的<>一書。
(註:由於 SCVMM 服務一定要安裝在加入網域(AD)的 Windows 2008 x64 以後版本之伺服器上,因此,TFS 2012 雖然可以沒有網域,但若要使用實驗室管理功能,則需要有網域。
其實,筆者聽到許多對安裝整個實驗室管理功能的困擾與抱怨,絕大部分都是出於對網路環境、Windows 網域、安全、SCVMM、Hyper-V等技術不熟悉。因此,若你是開發人員,若要安裝此功能,最好能就教於網管或伺服器管理人員。)
  而最新的System Center 2012 Virtual Machine Manager SP1 技術在我們撰寫本文時,僅能參考微軟的線上說明(參考:http://technet.microsoft.com/zh-tw/systemcenter/hh278293)。須提醒的是System Center 2012 Virtual Machine Manager要到SP1才能管理Windows 2012的Hyper-V 3.0。
  安裝好SCVMM服務和SCVMM管理員控制台之後,可以透過「Team Foundation Server 管理主控台」工具程式的「Lab Management」節點設定SCVMM服務所在位置,如圖2所示:


▲ 圖2 透過「Team Foundation Server 管理主控台」工具程式告知TFS SCVMM 服務所在機器。


  圖2中除了要在Lab Management設定SCVMM伺服器外,也需要在「Team 專案集合」的「Lab Management」頁籤設定SCVMM的「程式庫共用」與「主機群組」,如圖3所示:


▲ 圖3:設定某個「Team 專案集合」可用的SCVMM共用程式庫與「主機群組」。


  若SCVMM服務改了伺服器,也是回到圖2和圖3修改,讓TFS改用新的伺服器。另外,需自行準備給實驗室管理使用的虛擬機器;不管是執行在 Host 的虛擬機器,或存在共享程式庫內需要部署的虛擬機器 image,都需安裝 Visual Studio2012 提供的「測試代理程式(Test Agent) 」,以自動化測試流程。在Visual Studio 2010時是3個代理程式,其用途分別說明如下:
●組建代理程式(Build Agent):讓虛擬機器可以參與 Team Foundation 服務的組建流程(Build Process),這包含部署新的組建到測試環境,並執行 post-build 的部署腳本。
●測試代理程式(Test Agent):讓虛擬機器可以執行手動或自動測試。
●實驗室代理程式(Lab Agent):讓虛擬機器環境可以提供網路隔絕。
  2012後將其合併成一個「測試代理程式」。在下文中,我們將討論如何安裝代理程式。
  現今多層次的應用系統往往由多個角色組成,例如,目錄服務(Active Directory)、資料庫伺服器、應用程式伺服器、Web伺服器、客戶端,乃至於各種輔助的服務,如email、asp.net 的 session 服務、ftp、佇列服務…等,每個角色可能執行在一台以上的電腦內。也可以有多個角色在同一台電腦內運行。而這些角色的系統環境可以透過「測試管理員(Microsoft Test Manager 2012)」設定。
  Visual Studio提供的「測試管理員」有兩個不同的用途:「測試中心(Testing Center)」和「實驗室中心(Lab Center)」,如圖 4 所示:


▲ 圖4 透過測試管理員2012工具程式來管理測試案例與測試環境。


  簡而言之,「測試中心」負責設定、管理、設計、執行測試案例和檢視、分析執行結果及其相關資訊。「實驗室中心」則負責建置、設定、管理與監控執行測試的實體或虛擬環境。透過圖4上工具列的下拉選單,可在兩種功能模式中切換,而本文的重點在「實驗室中心」。
  於實驗室中心可以建立「環境」,代表執行特定的應用系統和實驗室設備需要的一組角色。如圖5所示:


▲ 圖5 透過實驗室中心建立測試環境所需的虛擬機器。


  圖5顯示了在實驗室環境中包括三台虛擬機器,這代表一整組的運作,也就是當你對環境做一個動作,如啟動、暫停、關閉、建立快照、從快照回復…等,這動作會施行在環境中所有的虛擬機器上。執行測試時,還可以記錄虛擬環境中的資訊與動作。
在「實驗室中心」滑鼠雙擊任一台環境中的虛擬機器時,會叫起「環境檢視器」介面,以統一操控一組機器,如圖6所示:

圖6 透過「環境檢視器」執行測試時,可同時操控多台機器。

  測試用的虛擬環境(Virtual environment)一般包含一個以上的虛擬機器,可以一起部署、啟動、建立快照集…等,只需以滑鼠右鍵選取圖6上方「實驗室中心」視窗之左方的虛擬機器環境名稱,透過快捷選單的選項讓管理與操作時可視為一體,以執行一組測試。
  點選圖6下方「Microsoft環境檢視器」視窗左方的小圖示,可以在右方的視窗檢視各執行環境的實際內容,遠端操控該機器。左邊視窗上方的工具列可以一體操控多台機器環境,右邊視窗上方的工具列則是針對右邊當下呈現的那台機器。
  由於整個測試流程是將建置好的軟體部屬到虛擬機器中執行測試,因此,第一個要做的是虛擬環境。接下來就簡單的在Windows 2012 Hyper-V 3.0的虛擬機器安裝測試代理程式。
(註:在我們撰寫這篇文章時,同時測試透過Lab Management的「環境檢視器」和SCVMM 2012 SP1,存取Windows 2008 R2 Hyper-V 2.0和Windows 2012 Hyper-V 3.0。Windows 2008 R2的虛擬機比較順暢地呈現,沒有什麼狀況。但存取Windows 2012 Hyper-V 3.0虛擬機時,在「環境檢視器」的左方小圖似乎因為安全登入的問題,不會出現當下系統狀況的縮圖外,透過SCVMM建立快照也會有錯誤。但由於設定方式都相同,此處以較新的Windows Server 2012示範。)

建置虛擬機器的Image
  虛擬機器上除了待測系統所需的作業平台與服務外,Visual Studio/TFS 2010版本需要手動安裝代理程式,2012版本後,如果僅是要將這些虛擬機器加入至測試環境,不需要手動在虛擬電腦上安裝測試代理程式。當這些電腦加入至實驗室環境時,Lab Management 會自動在機器上安裝測試代理程式。你可以跳過這一段文章,直接進入下一個主題:建置測試用虛擬環境。
  不過,若要將虛擬機器轉換成「虛擬機範本」,則建議在虛擬機器上安裝測試代理程式,再將它轉換成範本。 此外,如果要使用此範本來建立網路隔離環境,也必須先在電腦上安裝測試代理程式,再將它轉換成範本。
  在此就以虛擬機器的一個 Windows 8 Image 來安裝代理程式。測試代理程式需要額外透過「Visual Studio Agents 2012」光碟安裝,直接從「TestAgent」目錄下執行「vstf_testagent.exe」執行檔,其安裝程式的起始畫面如圖7所示:


▲ 圖7 測試代理程式的安裝程式起始畫面。


  若Windows作業系統上尚未安裝.NET Framework 4.5版,會先行安裝該版.NET Framework。另外,若我們的測試含有互動式操作,例如執行「自動程式碼 UI 測試」,則需要「測試代理程式(Test Agent)」以互動的方式執行。因此,安裝完「測試代理程式」後,在「設定測試代理程式」工具程式的「執行選項」需選擇「互動式處理序」,如圖8所示:


▲ 圖8 在虛擬環境中以互動的方式執行「測試代理程式」。


  若要Windows作業系統一啟動就自動以特定的使用者帳號登入,避免因作業系統重起但無人登入,也就無法執行有互動式操作的測試,則可以勾選圖8上方的「自動登入」選項。另外,「設定測試代理程式」對話窗中間的「向測試控制器註冊」選項如其下方的解釋,若該系統用在實驗室中心所建立的虛擬環境,則不需註冊至 Team 專案集合的現有測試控制器。
  相關細節也可參考如下的網址:

http://msdn.microsoft.com/zh-tw/library/ee702479.aspx

  在此線上說明中,有詳述將虛擬機轉成範本的步驟,在此不多做說明。
  我們準備好三個虛擬機器後,就可以搭配不同的虛擬機建立一組測試用虛擬環境,其做法如下。

建置測試用虛擬環境

  在建立完虛擬機器並安裝好 SCVMM 後,可以開啟Visual Studio的「測試管理員(Test Manager)」,並切換到「實驗室中心」,如圖9所示:



▲ 圖9 透過「實驗室中心」建立用於測試的「環境」。




  圖9中點選「新增」按鈕即可1,接著在「新增環境」設定畫面的「輸入與命名」步驟上方選擇「SCVMM環境」,並賦予環境「名稱」。
(註:Visual Studio/TFS 2010 版本時,建立虛擬環境的方式與選項不同,此處討論的是2012版本的做法。)

  接下來在「電腦」步驟選擇SCVMM所控管且當下執行中的虛擬機器,如圖10所示:



▲ 圖10 設定組合既有的虛擬機以建置完整的測試環境。




  接下來在「電腦」頁籤中可以從左方「虛擬機器可供使用」列表中選擇測試環境所需的機器,在圖10中可選擇的機器會受到前文圖3的設定所影響。
  選擇可用的虛擬機器後,點選上方的「加入至環境」按鈕以加入到右方「選取的電腦」環境後,可透過下拉選單選擇在待測系統擔任的角色,如圖10中,一台當作「Web 伺服器」另一台為「資料庫伺服器」,以及一台「網頁用戶端」。
  在接下來的「電腦屬性」頁籤較不需設定,若先前選擇採用從範本建立虛擬機器,則因為可以重新定義Windows作業系統的多項屬性,而提供許多選項。
  若在這個頁籤出現警告,例如虛擬機器的硬體組態中,有設定虛擬光碟機而無法使用。而你已經移除該光碟機設定,此處仍沒有更新資訊,則需要更新SCVMM的「Virtual Machine Manager Console」內該虛擬機的資訊,則此頁籤才能讀到虛擬機更新後的狀態。其透過「Virtual Machine Manager Console」更新虛擬機的畫面如圖11下方所示:



▲ 圖11 透過「Virtual Machine Manager Console」更新虛擬機資訊。




若有任何問題,例如改變了虛擬機的機器名稱,也需要更新「Virtual Machine Manager Console」,實驗室中心完全要靠SCVMM提供的資訊。你可以透過圖11檢視虛擬機的內容,若此處的資訊錯誤,會讓實驗室中心無法正確存取虛擬機。
接著,在圖12的「進階」頁籤設定目前設置的虛擬環境使用的測試控制器,以及是否支援UI測試:



▲ 圖12 設定測試控制器,以及是否支援UI測試。




  圖12的設定會在建立環境的步驟執行完畢,Lab Management自行對虛擬機器安裝與設定測試代理程式時,賦予到如前文圖8的測試代理程式設定項目。若有安裝多個測試控制器註冊到Team專案集合,則可以於圖12上方的「在這個環境上執行測試的測試控制器」下拉選單中選擇一個。
  若要執行UI測試,則測試代理程式需要以一般Windows或網域帳號登入虛擬機,才能以互動方式操控待測程式。故需選擇某種測試用途之類型的虛擬機器,並賦予登入帳號和密碼。此設定會讓虛擬機器啟動後,測試代理程式立刻登入Windows作業系統,並在左下角出現如圖13的「測試代理程式」執行畫面,以反映該代理程式正在執行的工作:



▲ 圖13 以互動方式執行的「測試代理程式」之程式畫面。




  在「摘要」步驟檢視先前設定無誤後,最後一步驟要執行「驗證」,點選右下角的「驗證」按鈕後(圖14已經驗證完畢,「驗證」按鈕自動轉成「完成」),會針對前述的設定驗證是否可以執行。在「驗證使用提供的使用者名稱和密碼是否可以存取電腦」步驟,必須要能存取到先前所選取的虛擬機,換句話說,虛擬機要在啟動狀態,且能透過網路存取。其畫面如圖14所示:



▲ 圖14 驗證虛擬環境的設定。




  一切驗證無誤,需要點選「完成」,Lab Management才真正開始準備虛擬環境,其畫面如圖15所示:



▲ 圖15 Lab Management在各個虛擬機上安裝測試代理程式並完成設定。




  圖15的安裝過程中,會到虛擬機上安裝測試代理程式,並等候測試代理程式與TFS和測試控制器溝通,但若虛擬機本身因為防火牆或DNS解析,乃至於任何其他網路問題,無法與TFS溝通就會造成安裝失敗。你可以到Windows系統的事件檢視器尋找蛛絲馬跡。
限於篇幅的關係,本期專欄就先介紹到此,在下期專欄中,繼續整合SCVMM虛擬測試環境與測試管理員和組建流程,以實際利用該環境進行測試。