摘要:分析了Windows Mobile中的軟件自動化測試框架及其層次關(guān)系,通過實例在Visual Studio 2005中實現(xiàn)了對目標設(shè)備UI的自動化測試。在產(chǎn)品開發(fā)實踐中表明,這種自動化測試具有測試效率高、可靠性好、易維護等優(yōu)點,對于Windows Mobile設(shè)備中其他方面的自動化測試研究具有一定參考價值。
關(guān)鍵詞:Windows Mobile;軟件測試;自動化測試;用戶接口測試;測試用例
中圖分類號:TP309文獻標志碼:A
文章編號:1001-3695(2007)07-0165-03
Key words:Windows Mobile;software testing;automation testing;UI testing;test case
軟件測試是軟件工程過程的一個重要階段,是在軟件投入運行前,對軟件需求分析、設(shè)計和編碼各階段產(chǎn)品的最終檢查,是為了保證軟件開發(fā)產(chǎn)品的正確性、完全性和一致性,從而檢測軟件錯誤、修正軟件錯誤的過程[1]。在嵌入式智能終端中,有限的硬件資源對其軟件的功能性和穩(wěn)定性方面提出了更高的要求。因此,需要對設(shè)備上的各種軟件進行全面測試。
Windows Mobile 是 Microsoft 用于 Pocket PC 和 Smartphone 的軟件平臺,面向個人移動電子消費市場,最新版本是Windows Mobile 2005,現(xiàn)在Windows Mobile的合作伙伴已擴展到全球48個國家的40家硬件廠商和68家移動運營商。對原始設(shè)備制造商(OEM)來講,Windows Mobile是一個集合,包括一組事先定制的Windows CE(微軟的通用嵌入式操作系統(tǒng))組件、其他附加的與Windows Mobile相關(guān)的組件和OEM所必須遵守的產(chǎn)品功能性要求。OEM利用這些組件,并添加必要的設(shè)備驅(qū)動程序和其他應(yīng)用,然后拷貝到設(shè)備的ROM中。在Windows Mobile的產(chǎn)品開發(fā)中,軟件測試大約占50%的開銷。針對如何在Windows Mobile中開發(fā)自動化測試以降低測試費用、提高測試質(zhì)量和效率,本文分析了Windows Mobile中自動化測試框架及其內(nèi)部各模塊的關(guān)系,并實現(xiàn)了對產(chǎn)品UI自動化測試的實例。
1Windows Mobile中的自動化測試框架
在Windows Mobile的智能終端上,采用Mobility Toolkit Development Kit工具包來對UI進行自動化測試[7]。Windows Mobile中自動化測試框架由.NET類庫組成。在實際中為實現(xiàn)不同的測試功能,測試框架采用分層結(jié)構(gòu)。圖1描述了各類庫層次依賴關(guān)系。
虛線下的Logging 和Utils.NET可以被其他各模塊使用。
1.1Logging
Logging庫包含了與導出測試數(shù)據(jù)和測試結(jié)果管理相關(guān)的類。Logging是通用的,滿足了除.NET測試工具之外的如桌面測試工具可使用Logging。對于.NET自動化測試來說,Logging的主要接口是GlobalLogger和GlobalLogResultManager。
MTK、UIAL、Area Libraries和Test components利用GlobalLogger在測試中自動向日志文件導出測試信息。此外,GlobalLogger還支持不同的測試信息導出等級。例如,對UIAL層的注釋是在調(diào)試等級,在調(diào)試過程GlobalLogger才記錄相關(guān)信息;而對測試等級下的測試信息則無此限制。GlobalLogResultManager主要用在Test Cases and Suites和Area Libraries兩層,當一次執(zhí)行多個測試用例時可以用來跟蹤每個用例的測試結(jié)果。
1.2Utils.NET
Utils.NET代碼庫包含了可以被MTK、UIAL、Area Libraries和Tests使用的面向設(shè)備的代碼。.NET Framework為桌面工具提供了豐富的代碼庫,而.NET Compact Framework只包含了該代碼庫的一個子集。Utils.NET涵蓋了在.NET Compact Framework中所沒有但在測試目標設(shè)備要用到的代碼。
Utils.NET提供的代碼對于.NET自動化測試和.NET Compact Framework的使用者都是很有幫助的。此外,Utils.NET還為在目標設(shè)備與開發(fā)工作站之間共享代碼提供了方便。
1.3Device Automation ToolKit (DATK)
主要是C#類庫,其中的類映射了對目標設(shè)備上UI的控制。DATK中的有些類映射了目標設(shè)備上的編輯框、列表視圖和按鈕等。除了這些可以映射的控制類之外,還有Windows Finder類,該類在使用DATK中是很重要的。Windows Finder可以指定對設(shè)備進行控制的某些特征如類型、文本或進程等,并將該控制與DATK控制對象綁定。而利用DATK控制對象可以得到對目標設(shè)備控制的信息如類型、已選/未選狀態(tài)等,進一步利用DATK控制對象可以與目標設(shè)備控制的交互,這樣就實現(xiàn)了利用DATK對目標設(shè)備上UI的自動化測試。
DATK目前尚不依賴Logging或Utils.NET組件。
1.4Mobility ToolKit (MTK)
MTK是與DATK類庫中對MDPG部分的擴展。比如說,軟按鍵在Windows Mobile的設(shè)備上是很重要的組件,但Windows CE本身卻不支持,因此DATK中也不提供與軟按鍵對應(yīng)的控制類,這在對Windows Mobile的設(shè)備測試時是很不方便的。基于此,在DATK中添加了針對Windows Mobile設(shè)備的控制類,形成了測試Windows Mobile設(shè)備的專用類庫即MTK。此外,MTK還提供了有助于自動化測試的其他類,如ApplicationManager可以映射為啟動Windows Mobile設(shè)備上的應(yīng)用程序。
MTK包含了很多從DATK衍生而來的類,且依賴于Logging 和Utils.NET。
1.5UIAL
DATK提供了大量的類來映射UI控件對目標設(shè)備的UI進行控制。實際中要映射到目標設(shè)備的UI控件還要使用DATK中的Windows Finder類來初始化DATK層的UI控件。提供給Windows Finder搜索條件如類名字、標題、控制ID號等,Windows Finder會根據(jù)給定條件找出所需的控制類。搜索條件對設(shè)備UI中設(shè)計與實現(xiàn)上的變化是很敏感的,這樣提供了一種抽象模式來保護UI測試自動化免受上述變化的影響。
UIAL在一個應(yīng)用程序中封裝了各種形式的控件,這樣自動化測試開發(fā)者可直接用Windows Finder來獲取該控件。C#庫為目標設(shè)備上的具體控件和DATK控制對象提供了1∶1的映射。應(yīng)用中,每個應(yīng)用程序應(yīng)該對應(yīng)一個UIAL,且UIAL中具有相應(yīng)的屬性與該應(yīng)用程序中的控件對應(yīng)。主要是對控件屬性進行標記,避免了UI中有控件變化時不必修改全部測試代碼,只需改動UIAL即可。UIAL依賴于DATK、MTK、Utils.NET和 Logging。且被Area Libraries所調(diào)用。
1.6Area Libraries
UIAL降低了在DATK中尋找控件的難度,但并未將這些控件與特定的應(yīng)用場景綁定。Area Libraries可以在目標設(shè)備上將這些控件應(yīng)用到特定的情境中。
Area Libraries的目的是使自動化測試腳本的編寫,像描述手動測試用例的步驟一樣直觀。這樣與手工測試相比,代碼就變得非常簡潔。例如測試Microsoft Word的用例中第一個步驟是打開Word,該步驟對應(yīng)了在UI中的一組命令:點擊開始、選擇程序、點擊Word等。測試用例的Open Word步驟就可以在Area Library中直接執(zhí)行,屏蔽了打開Word時的細節(jié)。此外,Area Library還自適應(yīng)不同的產(chǎn)品(PocketPC或Smartphone)、使用的SKU等。Area Libraries依賴于UIAL、MTK、Utils.NET和Logging,且只為其上層的Tests層服務(wù)。
1.7Tests Cases and Suites
在.NET Automation Framework中,測試套件是從TestSuite類繼承來的一系列子類。測試用例是標記了屬性的C#方法,是根據(jù)屬性包含在相應(yīng)的測試套件中,從功能上依賴于Area Libraries,包含了根據(jù)需求對該庫的一系列調(diào)用。這樣一系列的特定行為組成了測試用例要完成的測試動作。一般情況下,測試用例并不直接調(diào)用UIAL,除非對較特殊的設(shè)備應(yīng)用程序進行測試。該層依賴于Area Libraries,少數(shù)情況下需要UIAL、MTK或DATK的支持。
2基于DATK開發(fā)UI自動化測試
利用DATK實現(xiàn)UI自動化測試關(guān)鍵在于創(chuàng)建抽象運行對話框和設(shè)計測試用例。
2.1開發(fā)環(huán)境搭建
(1)將Visual Studio 2005安裝文件中的MtkKit文件拷貝到C:\\MtkKit。
(2)安裝ActiveSync和Visual Studio 2005。
ActiveSync. ActiveSync是開發(fā)工作站與目標設(shè)備之間的同步軟件,利用ActiveSync可使兩者的數(shù)據(jù)保持實時更新。
Visual Studio 2005,微軟的最新系列的集成開發(fā)環(huán)境,其最新版本是Visual Studio 2005 Team Suite。
(3)將Windows Mobile上的設(shè)備連接到ActiveSync。
將模擬器與ActiveSync相連。在Visual Studio 2005的模擬器管理器中可以啟動模擬器。需要注意的是連接模式選擇DMA,且需要Cradle待連接的模擬器。
(4)將開發(fā)工作站上的c:\\mtkkit\\DeviceFiles\\文件拷貝到目標設(shè)備的\est目錄下。
2.2創(chuàng)建抽象運行對話框
當開發(fā)環(huán)境搭建好后,就可以開始實現(xiàn)UI自動化測試了。關(guān)鍵之一是要創(chuàng)建抽象運行對話框,當創(chuàng)建好之后需要編寫測試用例進行調(diào)用。
首先,在Visual Studio 2005的工程目錄下創(chuàng)建要建立的工程文件MyDemo,一般路徑為C:\\Documents and Settings\\XXX\\My Documents\\Visual Studio 2005\\Projects\\,將C:\\MtkKit\\TuxNetSkeleton下的內(nèi)容拷貝到工程文件夾MyDemo下,需要注意的是,要將拷貝過來的與Windows Explorer相關(guān)的文件屬性清除只讀的限制。其次,把C:\\MtkKit\\Common文件夾及其內(nèi)容拷貝到工程目錄下,同樣,對文件屬性清除只讀的限制。
在目標設(shè)備上激活shell32.exe,打開運行程序?qū)υ捒颉F浯芜€需要生成RCML文件,在該文件中含有對話框的XML形式表示,采取這種形式有利于向?qū)υ捒蚣捌淇丶砑颖匾畔ⅰI蒖CML文件的具體步驟:在開發(fā)工作站上執(zhí)行C:\\WINDOWS\\system32\\cmd.exe /k .\\Bin\\CommandWindow.bat,其快捷鍵為C:\\MtkKit\\CommandWindow.lnk。
在命令行窗口中鍵入rapistart \"\est\\RcmlSnap.exe\"命令,這實際上是在工作站上遠程執(zhí)行了RCML Snap程序,該程序產(chǎn)生與shell32對話框相關(guān)的RCML文件。對話框如圖2所示。
大約一分鐘過后,目標設(shè)備上出現(xiàn)顯示了產(chǎn)生的RCML文件名字的對話框,可以點擊OK,如圖3所示。此時目標設(shè)備上屏幕的截圖也會以位圖的形式保存下來,這兩個文件默認情況在目標設(shè)備的根目錄下。之后需要將這兩個文件拷貝到工作站的工程文件夾下。在Visual Studio 2005下打開產(chǎn)生的RCML文件shell32.exeDialog.RCML和c:\\MtkKit\\RunDialogSample\\RunDialog.rcml文件,編輯shell32.exeDialog.RCML文件的標記屬性使之與RunDialog.rcml文件中的屬性匹配。
接下來需要從RCML文件中產(chǎn)生C#源文件。為此需要在圖2的命令行對話框中到MyDemo目錄下,運行rctocs -dll shell32.exe -rcml . -o c:\\Auto命令,該命令啟動了RCML文件中的RcToCs工具,RcToCs產(chǎn)生在工程中需要的一組C#源文件,同時創(chuàng)建c:\\Auto文件夾,自動將產(chǎn)生的兩個C#文件拷貝到該文件夾,因此還需要手動拷貝到工程文件MyDemo。C#源文件如圖4所示。
在Visual Studio 2005中打開c:\\mtkkit\\MyDemo\\TuxNetSkeleton.sln,且將C#源文件中的代碼添加到TuxNetSkeleton工程中。至此已經(jīng)成功地創(chuàng)建了抽象運行對話框。
2.3設(shè)計測試用例
在編寫測試用例之前需要對有關(guān)文件及類進行重命名:將SkeletonTests.cs源文件改為RunDialogTests.cs;將TuxNetSkeletonTests類更名為RunDialogTests(同時對其構(gòu)造函數(shù)更名)。接下來可以編寫測試用例了。
在RunDialogTests.cs文件的using區(qū)添加using Microsoft.MobileDevices.AbstractionLayer.Shell.PocketPC;//聲明測試用例針對PocketPC對RunDialogTests類添加啟動方法。實現(xiàn)代碼為
#region Utility Methods
/// 〈summary〉Launch the run dialog using Win+R 〈/summary〉
public void Launch()
{
Utils.GlobalLogger.AddComment(\"Launch the Run Dialog\");
//向XML測試結(jié)果中添加注釋
Datk.KeyBoard.SendKey(Datk.KeyBoard.Key.LWin, Datk.KeyBoard.EventFlags.KeyDown);
Datk.KeyBoard.SendKey(′R′);
Datk.KeyBoard.SendKey(Datk.KeyBoard.Key.LWin, Datk.KeyBoard.EventFlags.KeyUp);
}
#endregion
展開測試用例的功能區(qū),添加實現(xiàn)該測試用例的功能性代碼:
/// 〈summary〉Use the Run dialog to launch iexplore.exe
/// 說明: 該測試用例只在Pocket PC phone上適用.〈/summary〉
///〈returns〉LogResult.Pass on success〈/returns〉
[TestCaseAttribute(\"RunDialog launching iexplore\", Type = TestType.Functional)]
//標記測試用例的屬性,以便Tux.NET可以識別該用例
[MobileDevicesDescriptor ( Product = Products.PocketPC ) ]
//測試用例針對PocketPC產(chǎn)品
public Log.LogResult LaunchIExplore()
{
RunDialog run = new RunDialog();
Launch(); //啟動一個運行對話框
Utils.GlobalLogger.AddComment(\"Select the edit control\");
//向XML測試結(jié)果中添加注釋
run.OpenTextBox.Click();
Utils.GlobalLogger.AddComment(\"Enter 'iexplore'\");
Datk.KeyBoard.SendString(\"iexplore\");
Utils.GlobalLogger.AddComment(\"Click Ok\");
run.OKButton.Click();
Utils.GlobalLogger.AddComment(\"Verify that iexplore is launched\");
Datk.WindowFinder iexploreFinder = new Datk.WindowFinder();
iexploreFinder.ProcessName = \"iexplore.exe\";
iexploreFinder.FindForm();
//如果iexplorer未找到,則拋出異常,并有效地記錄測試失敗
return Log.LogResult.Pass; //返回測試結(jié)果為Pass
}
至此已經(jīng)完成對測試用例的設(shè)計。
2.4運行對Internet Explorer自動化測試
利用快捷鍵F5(Start with Debugging)運行該測試。可看到目標設(shè)備上鼠標自動啟動運行對話框,鍵入iexplorer.exe,點擊OK按鈕,之后Internet Explorer就被啟動了。該測試用例實現(xiàn)了對目標設(shè)備上瀏覽器的自動化測試。通過ActiveSync可以在目標設(shè)備的\est文件夾下查看測試日志文件Result.log。其中以XML形式記錄了測試過程中的詳細信息。
3結(jié)束語
Windows Mobile為嵌入式智能移動終端產(chǎn)品的開發(fā)提供了比較完整的解決方案,特別是在PocketPC和Smartphone領(lǐng)域正獲得越來越廣泛的應(yīng)用。針對基于Windows Mobile上的設(shè)備,微軟提供了Logo Testing規(guī)范在一定程度上來保證OEM廠商的產(chǎn)品質(zhì)量,實際上,廠家所發(fā)布的產(chǎn)品不僅要嚴格通過該規(guī)范,還需要就具體產(chǎn)品作出更有針對性的測試。本文就利用Tux.NET在Visual Studio 2005中實現(xiàn)了Windows Mobile上設(shè)備UI自動化測試,對實現(xiàn)其他應(yīng)用程序UI自動化測試具有借鑒意義。在實際應(yīng)用中,可以對一系列應(yīng)用程序UI設(shè)計具體自動化測試,將之集成到Windows Mobile CE Test Kit中,實現(xiàn)自動執(zhí)行對多個應(yīng)用程序UI測試,從而在較大程度上提高了測試效率,有助于提高測試質(zhì)量,縮短了產(chǎn)品開發(fā)周期。
參考文獻:
[1]陳浩,鄒北驥,江文,等.基于消息機制的自動化黑盒測試方法研究[J]. 計算機應(yīng)用研究,2004,21(10):33-35,103.
[2]劉淵,王開云,范曉嵐,姜建國.內(nèi)核網(wǎng)絡(luò)協(xié)議棧功能測試自動化的實現(xiàn)[J].計算機應(yīng)用,2005,25(5):1052-1054.
[3]王軼辰,劉斌.嵌入式軟件仿真測試環(huán)境的軟件體系結(jié)構(gòu)設(shè)計[J]. 計算機工程與應(yīng)用,2005,41(16):97-99.
[4]王毅,蔡建平.基于API測試的分布式測試框架的研究與實現(xiàn)[J].計算機工程與設(shè)計,2004,25(8):1299-1301,1304.
[5]MOHAMOD A B.Using genetic algorithm to improve the performance of multi-h(huán)ost vulnerability checkers[J].IEEE,2001,23(17):368-376.
[6]WEYUKER E J.Experience with performance testing of software systems:issues,an approach, and case study[J].IEEE Transaction on Software Engineering,2000,26(12): 1147-1156.
[7]FEWSTER M,GRAHAM D.軟件測試自動化技術(shù)與實例詳解[M].舒智勇,等譯.北京:電子工業(yè)出版社,2000.
[8]ROBINSON S,et al.C#高級編程[M]. 李敏波,等譯.北京:清華大學出版社,2005:45-78,160-219.
注:“本文中所涉及到的圖表、注解、公式等內(nèi)容請以PDF格式閱讀原文”