使用 Coded UI 進行 UI 的自動化測試
介紹
曾經有一段時間,人們習慣于在MS Excel里面編寫單元測試用例,然后開發人員就按照單元測試用例一步一步的來實現用例。這通常是很耗時的漫長的過程,尤其是如果應用很大或者UI很復雜的話。
這一套單元測試的執行過程常常成為瓶頸,因為任何代碼修改都會帶來手工執行大量單元測試,以確保新的修改沒有破壞原有功能。
如今是個快節奏時代,人們希望工作能夠無需人工介入、自動化的快速完成。每個人都喜歡執行一個命令就能把工作搞定,而且在執行期間不需要人工介入。需要做的僅僅是檢查一下最終的輸出結果。
當這個世界正在邁向自動化時,自動化測試也不甘落后,不論是在功能測試方面還是UI測試方面。每天我們都能聽說自動化測試方面涌現出的新軟件。
本文提供了一些信息給那些想用Coded UI自動測試框架來進行應用界面自動化的.Net開發者。
什么是Coded UI?
最近我一直在尋找一個自動化的用戶接口測試的解決方案。用戶接口測試需要用戶多次進行手工輸入操作,這是一個既枯燥又費時的過程。因此,我想尋找一種更智能的自動化UI測試的方案,這種UI測試在不需要人工干預下,能夠被保存,記錄并提供支持 ,快速測試代碼的改變。
Coded UI 采用用戶接口來驅動應用的進行自動化測試。這些測試包括UI控制的功能性測試。他們使你可以驗證整個應用的功能是否正確,其中包括了用戶接口。Coded UI尤其適合用于用戶接口中存在校驗或者其它的登錄方式的測試,比如網頁。Coded UI也可以用于人工測試用例的自動化。
Coded UI 測試幫助用戶測試應用程序的用戶接口。這些測試允許用戶驗證應用程序的功能。Coded UI 多數時間用于幫助驗證在UI層本身的有效邏輯。它能夠驗證值對用戶接口的控制的正確性。
其它方案
市場有許多自動化用戶接口的方案,比如HP的QuickTest Professional, IBM Rational Functional Tester. 其它著名的,易于使用的開源工具解決用戶接口自動化問題的有Selenium,也能夠記錄測試,需要的時候回放。市場上還有來自Microsoft的也能不需要太多努力做同樣的事。用Visual Studio Microsoft還有Coded UI的方案用于單元測試。
Coded UI適合在哪兒用?
大多數安裝了Visual Studio的開發者都喜歡在Visual Studio的環境里進行單元測試,而不是使用第三方工具。由微軟提供的Coded UI,在Visual Studio環境里可謂上手即用。在開發者的機器上無需另外安裝任何東西。一旦你安裝了Visual Studio的Premium版或者Ultimate版,你就同時也安裝好了Coded UI。
Coded UI可用性
為了使用Coded UI,需要安裝Visual Studio 2010/2012/2013的Premium版或者Ultimate版。
Coded UI 測試的組成
Coded UI 測試的組成容易理解。它可分成下列文件:
UIMap.uitest
這個文件是UIMap類的XML表示。UIMap類包括視窗,控件,屬性,方法,斷言和動作。
UIMap.cs
對UIMap的自定義部分都存在這文件里。如果修改直接存在UIMap.designer.vb文件的話,那些修改都會在記錄結束后丟失,因為這個文件重新創建了。
給每個在測應用程序中的每個模塊創建一個獨立的UIMap文件。
UIMap.Designer.cs
這是部分類表達各種類。這各種類是給多樣的控件和他們的范圍,屬性,方法的類。
提示:不要直接修改 UIMap.Designer.cs。加入你這樣做,這個修改會被覆蓋掉。
CodedUITest.cs
這類表示的實際的CodeUI測試類,方法調用,和斷言調用,所有的方法和斷言默認都是從UIMap.Designer.cs文件調用的。這類有具有【codedUITest]屬性TestClass和包含具有【TestMethod]屬性的多種方法。
Coded UI的特性/好處
-
進行用戶界面測試的同時進行校驗.
-
生成VB.Net/C#代碼.
-
測試用例可以被記錄和重放.
-
集成了ALM Story
-
能夠作為每日構建的一部分來運行.
-
根據需要進行高級擴展.
-
和Visual Studio集成在一起,所以無需單獨購買許可.
-
Coded UI對Web和Windows應用同樣適用.
-
著名的Microsoft支持.
創建Coded UI測試
Coded UI測試可以用下列方式創建
-
使用MTM進行快速自動構建
-
從現有的記錄(從手動測試中記錄下來的操作)中創建Coded UI
-
在Coded UI Test Builder創建的底稿的基礎上創建一個新的Coded UI測試.
-
自己寫Coded UI.
這個白皮書的范圍僅限于“在Coded UI Test Builder創建的底稿之上創建一個新的Coded UI測試”。
小貼士: 盡量使用Coded UI Test Builder。
Coded UI Test Builder
每一個Coded UI測試的生成都需要遵從下列步驟.
-
記錄/停止/暫停
-
編輯記錄下來的步驟
-
添加斷言
-
生成代碼
創建Coded UI 測試
創建新的Coded UI 項目
要開始使用Coded UI,首先我們需要創建一個測試項目,用來保存所有Coded UI測試。創建一個新的Coded UI項目包含下列步驟
-
打開Visual Studio 2012
-
選擇 File > New > Project
-
選擇需要的語言模板 (C# or VB.Net). 我們選擇了C#.
-
選擇Coded UI Project
-
輸入一個名字
-
點擊 OK 按鈕
添加 Coded UI 測試
Visual Studio默認配置為創建Coded UI 測試使用 "Generate a new Coded UI Test from scratch using Coded UI Test Builder"
提示:在測試的應用程序中,當你創建UI控件時盡量使用有意義的名稱,從而對于自動生成的控件顯得更加有意義和可用。
一旦 Coded UI 測試工程創建完成,將會自動打開生成Coded UI 測試代碼的對話框,請給出以下選項的設置。
-
記錄操作,編輯UI地圖或添加斷言
-
使用一個已經存在的操作記錄
默認情況下 選擇記錄操作,編輯UI地圖或添加斷言,無需做任何操作,然后點擊 "ok"
Coded UI Test Builder
選擇了上述選項后,Coded UI Test Builder就會被打開,同時Visual Studio窗口被最小化。這意味著我們已經為記錄操作做好了準備。
正如之前描述的,Coded UI Test Builder基于下列4個操作來做記錄
-
Record Steps
-
Update or Delete Steps
-
Verify Results (Add Assertions)
-
Generate Code
小貼士: 如果用戶界面(UI)變化了,就重新記錄測試方法或斷言方法,或者重新記錄一個既有測試方法中受影響的部分。
記錄一個序列的操作.
記錄一個操作主要需要下列幾步.
-
Start Recording, 通過選擇Record按鈕即可.
-
Pause Recording, 用來處理記錄過程中的其它操作,即Generate Code.
-
Edit/Delete 操作, 以防錯誤的操作被記錄。
-
Generate code為記錄下來的操作創建編號。會給每一個記錄下來的操作都生成編號。
-
Add Assertions 用來校驗結果。
小貼士: 創建斷言最好使用Coded UI Test Builder,因為它會在UIMap.Designer.cs文件中自動添加一個斷言方法。
為記錄動作做計劃
任何事情的成功都取決于它計劃得有多好。較好地計劃最大限度保證了任務成功完成。這樣總是比較好,在開始記錄動作之前,我們計劃好所有的所有要計劃的步驟。
這里我們將要使用應用程序Windows計算器來記錄步驟。我們要自動地加和減兩個數字。在記錄加和減兩個數字的時候,下面的步驟將會用到。
。點擊“開始記錄”控件
。到開始,點擊執行
。在執行窗口,輸入”calc"
。停止記錄,看記錄的步驟
。刪除錯誤的步驟(存在的話)
。產生代碼;提供和動作相匹配的名字。比如,打開計算器。
提示:當你產生一個方法時候,使用一個有意義的方法的名字,代替默認名字。
有意義的名字幫助識別方法的木的。
。重新記錄,提供第一個數字,暫停記錄產生代碼
。重新記錄,提供操作(加或者減),暫停記錄,產生代碼
。重新記錄,提供第二個數字,暫停記錄,產生代碼。
。加斷言
提示: 產生你的測試作為一系列記錄的方法
提示: 可以的時候,限制每個方法小于10個動作。這模塊化的方法讓UI改變時候容易替換方法。
結論
我們已經看到了Coded UI可以使開發者的生活變得多么輕松,尤其是遇到每次都需要進行很多輸入的復雜頁面的時候。這時,測試用例只需要被記錄一次,就可以按照需要執行任意多次。使用Coded UI比使用其它工具的好處是,它能自動適配Web頁面和Windows窗口應用。Coded UI測試可以用Visual Studio 2010來運行,也可以用任何版本的VS來運行,它們的功能正變得越來越強大。無需多說,Coded UI是一個由技術領導者提供的強大工具,想要體驗Coded UI測試的強大,我們應該開始在項目中使用它看看它能帶來多少ROI,我確信Coded UI不會讓你失望。
參考文章和延伸閱讀…
http://msdn.microsoft.com/en-us/library/dd286726.aspx
http://msdn.microsoft.com/en-us/library/dd286681(v=vs.100).aspx