前言:
在上一個小節中給大家簡單介紹了WM6 SDK中帶的Windows Mobile Test Framework。各位朋友可能對Windows Mobile Test Framework有了一個大概的印象,但是對於怎麼使用它還是有些疑惑。由於我的工作比較繁忙,一直沒有時間更新這個系列,對此很是抱歉。今天,我們就來用這個Windows Mobile Test Framework來做一個小小的測試,看看它是怎麼啟動並執行。讓大家對它有個感性的認識。
一、準備工作
1. 開啟Visual Studio 2005的菜單中的 工具-〉裝置模擬器管理器。然後開啟一個Windows Mobile 6的Professional模擬器。然後將該模擬器通過ActiveSync(如果是Vista則用WMDC)與電腦進行串連。
2. 將Windows Mobile Test Framework.zip解開到某一個目錄中。雙擊運行其中的CommandWindows捷徑。則會彈出來一個命令提示字元視窗。您在該視窗中輸入“Set”然後斷行符號,會發現“Path”參數中增加了Windows Mobile Test Framework下得Bin目錄的路徑。以及增加了_WMTFROOT這個變數。
3. 在該命令提示字元視窗中輸入“SetupDevice”然後斷行符號。則會自動向裝置上Copy和安裝一些必要的檔案。(SetupDevice是一個批次檔,您也可以在Bin目錄下找到)
4.在裝置模擬器上,你會發現在“程式”中安裝了一個捷徑“CalView”。在裝置的根目錄下有一個test目錄,裡面是剛才copy進來的那些檔案。其中包含CalView。您可以開啟CalView,它是一個用來查看pOutlook中的行事曆資訊的小程式。
5. 通過ActiveSync或者WMDC將“%ProgramFiles%\Windows Mobile 6 SDK\Tools\Security\SDK Development Certificates\Certs.cab”拷貝到模擬器中,然後安裝它。
6. 手動在模擬器中的日曆中建立一個條目以備後面的步驟使用。
二、瞭解測試工程
1. 開啟_WMTFROOT下的CalViewSample這個目錄,您會發現其中有三個子目錄,分別是“AbstractionLayer”,“AreaLibrary”和“Tests”。它們就是在上一小節中介紹過的“UIAL”、“AreaLibrary”和“Tests”層。至於DATK和MTK,呵呵,他們都是微軟已經提供了的。您可以在_WMTFROOT下的DeviceFiles目錄中找到(分別是Microsoft.WindowsCE.DATK.dll和Microsoft.MobileDevices.MobilityToolKit.dll)。
2. 由於Tests層的代碼要引用Area Library層的代碼;而Area Library層的代碼要引用UIAL層的代碼。所以,我們先用VS2005開啟AbstractionLayer下的項目。CalView的AbstractionLayer分別針對PPC和Smartphone做了兩個版本。我們先開啟PocketPC目錄下的解決方案。你會發現該解決方案中有兩個項目,一個是“Microsoft.MobileDevices.AbstractionLayer.CalView.PocketPC”,一個是“TuxNet”。其中前者就是CalView的PPC版的程式的UIAL層代碼,後者其實是一個空的項目,它的目的只是為了將它裡麵包含的那些檔案部署到裝置上去。開啟UIAL層項目的屬性,“裝置”選項頁。複選中“Authenticode簽名”中的“用此認證對項目輸出進行簽名”。然後點擊“選擇認證...”,選中“TEST USE ONLY - Sample Privileged Root for Windows Mobile SDK”,這是一個測試用的特權認證。如果這裡沒有顯示這個認證,那麼點擊“管理憑證”,然後匯入“%ProgramFiles%\Windows Mobile 6 SDK\Tools\Security\SDK Development Certificates\SamplePrivDeveloper.pfx”。然後再次開啟這個選擇認證頁面就可以看到。它的目的就是給您的UIAL層代碼進行測試簽名,這樣便於訪問一些特權函數,避免運行過程中不斷的彈出那些提示框,然後再編譯此解決方案。接著關閉該解決方案,同樣處理以及編譯Smartphone版的UIAL層解決方案和Area Library層的解決方案。
3. 開啟Tests的解決方案同樣處理。然後設定Tests層項目的屬性中“調試”選項頁中,“啟動操作”為“啟動外部程式”,並設定其值為“\test\TuxNet.exe”。
三、運行測試程式
1. 按下F5運行解決方案,注意請選擇您已經啟動好的那個模擬器。
2. 您會發現模擬器中系統自動開啟運行了CalView這個程式。然後調用了其中的“copy”功能表項目來複製了一個行事曆項目。最後退出程式。
3. 從模擬器中開啟\test目錄,您會發現一個results.log檔案,將它從模擬器中copy到PC端,用記事本開啟,它就是剛才的運行記錄,內容比較長,我摘錄其中幾個部分如下:
................................................................ <TESTCASE ID="0"> *** Test Name: Microsoft.MobileDevices.Tests.CalView.CalViewTests.CalViewBVT *** Test ID: 0 BVT: BVT Repro: -assembly Microsoft.MobileDevices.Tests.CalView.dll -suites CalViewTests -tests CalViewBVT Begin Step: CalViewBVT [1] LaunchApplication(CalView, finder): Attempting to launch from start menu [1] LaunchFromStartMenu(CalView, WindowFinder, False): Opening start menu [1] OpenStartMenu(): Clicking on start menu to open it [1] ClickStartMenu(): Clicking on start menu at (2, 2) [1] ClickStartMenu(): Start menu successfully opened [1] LaunchFromStartMenu(CalView, WindowFinder, False): Getting list of start menu items [1] LaunchFromStartMenu(CalView, WindowFinder, False): Item found - clicking on index 9 [1] countBefore = 1 [1] countAfter = 2 [1] Verification = Pass: Count after is one greater [1] ClickOK(): Clicking on task bar at (230, 10) End Step : CalViewBVT Verification = Pass: CalViewBVT *** Result: Passed </TESTCASE>
................................................................ *** SUITE SUMMARY *** *** Results *** Passed: 1 *** Skipped: 0 *** Failed: 0 *** Aborted: 0 *** -------- --------- *** Total: 1 </TESTGROUP> ................................................................ |
4. 上面Log中的我標記出來的第一部分即是我們剛才跑的一條test case的運行記錄;標記的後一段是該啟動並執行整體情況,這次運行總共1條case,結果為pass。
5. 我們看到這條case的名稱為Microsoft.MobileDevices.Tests.CalView.CalViewTests.CalViewBVT ,那麼我們在tests工程的CalViewTests.cs中可以找到如下代碼,它就是這條case:
/// <summary> /// Add a description of the steps this test executes. /// eg: /// 1) Open Contact app /// 2) Create a Contact /// 3) Verify contact appeats in Main list view /// 4) Close Contacts app /// </summary> /// <returns>Log.LogResult.Pass on success</returns> [TestCaseAttribute("BVT", Type = TestType.BVT)] public Log.LogResult CalViewBVT() { // Open the application CalViewAreaLib.General.LaunchApp(); // Store and log the beginning count int countBefore = CalViewAreaLib.MainDialog.GetItemCount(); Utils.GlobalLogger.AddComment("countBefore = {0}", countBefore.ToString()); // Select and copy one of the items CalViewAreaLib.MainDialog.SelectItem(0); CalViewAreaLib.MainDialog.CopySelectedItem(); // Store and log the count after copy int countAfter = CalViewAreaLib.MainDialog.GetItemCount(); Utils.GlobalLogger.AddComment("countAfter = {0}", countAfter.ToString()); // Log a result based on the conditional that countAfter is one greater than countBefore Utils.GlobalLogResultManager.Results.Add("Count after is one greater", (countAfter == (countBefore + 1))); // Close the app to clean up CalViewAreaLib.General.CloseApp(); // Results manager kept track of the result for you, return its summary return Utils.GlobalLogResultManager.Results.Summary; } |
從case的步驟我們可以看到/猜測,它先後開啟CalView程式,然後選擇其中第一個條目,然後複製一個。然後察看是否條目數量增加了一個。最後關閉程式再輸出結果。在這裡這些代碼的含義您可以通過UAIL或者AreaLibrary的代碼來查看具體含義,在後面我的Blog中也會陸續進一步介紹。
四、小結
從上面的示範我們看到我們可以很方便的通過我們的代碼來類比使用者來操作我們的程式並進行驗證。不錯吧?
好了,就先介紹到這裡吧.在下一節中,我們將會介紹一下Tests層代碼的結構以及它的運作機制。