【摘要】隨著3G手機等智能終端的普及和移動互聯網速度愈來愈快,移動互聯網用戶數量不斷攀升,移動應用發展迅速,測試需求日漸迫切。本文從移動互聯網、移動應用的發展現狀和測試需求談起,著重介紹了Android系統開放的技術架構,對Android測試基礎框架進行了詳細的闡述,推薦了基于Android系統的一系列測試工具,介紹其測試功能,并展望了移動應用的云端測試服務發展趨勢。
【關鍵詞】移動應用Android測試
一、引言
移動互聯網將移動通信和互聯網二者結合起來,成為一體,在最近幾年里,移動通信和互聯網成為當今世界發展最快、市場潛力最大、前景最誘人的兩大業務,隨之而來的移動互聯網應用也是繽紛多彩,娛樂、商務、信息服務等各種各樣應用開始滲入人們的生活。基于移動終端的便攜性,移動應用呈現出跨平臺、輕量化和Web化等特點,移動應用類型涉及語音類、消息類、視頻類、內容類、個人信息管理類、位置服務、電子商務、游戲類等。
隨著3G手機等智能終端的普及和移動互聯網速度愈來愈快,移動互聯網用戶數量不斷攀升,3G移動互聯網也催生出了眾多創新型的企業營銷或業務應用。隨著移動企業應用的普及,各行業的移動應用測試需求也將與日俱增,包括移動辦公(電子政務等),銀行、證券業的移動支付以及旅游業應用等,這些需求可以來自運營商、移動應用開發商、移動終端廠商、互聯網絡運營商、應用開發企業等。移動應用的測試類型涉及功能性測試、性能測試、安全性測試、穩定性測試、易用性測試、可靠性測試、兼容性測試及非技術性測試;眾多的移動應用及其推向市場的快速響應需求,以及移動終端使用的便利性,對測試的質量和響應速度提出了更高的要求。
Android是一種以Linux為基礎的開放源代碼操作系統,主要競爭對手是蘋果公司的iOS以及RIM的Blackberry OS。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。基于開源的Android系統還提供了一系列的開源測試技術和工具,使得Android移動應用的開發、測試更加易于開展。
二、Android系統架構介紹
Android作為一個基于Linux系統的移動設備平臺,其軟件層次結構包括了一個操作系統(OS),中間件(MiddleWare)和應用程序(Application)。其軟件層次結構自下而上分為以下幾個層次:
這樣,在啟動程序的時候就會先啟動一個Application,然后在此Application運行過程中根據情況加載相應的Activity,而Activity是需要一個界面的。但是Instrumentation并不是這樣的,可以將Instrumentation理解為一種沒有圖形界面的,具有啟動能力的,用于監控其他類(用Target Package聲明)的工具類。任何想成為Instrumentation的類必須繼承android.app.Instrumentation。
對于單元測試,需要認真了解的就是android.test.InstrumentationTestRunner類。這是Android單元測試的主入口。它相當于JUnit當中TestRunner。加載它首先要在manifest文件中加入一行關于Instrumentation的聲明,比如Android Api Demos中的測試里的manifest是這么寫的:
如果用Eclipse的ADT插件(0.8版本以上),也可以用圖形界面來添加。編輯好manifest,就可以打包,然后安裝到虛擬機上(用adb install命令)。之后就可以利用命令行的方式來加載單元測試了。在Android Shell中加載一個Instrumentation的方法是利用以下命令:
adb shell am instrument w XXXXXX
其中-w是指定Instrumentation要測試類的參數標志。
四、Android系列測試支持工具
基于Instrumentaion測試框架,Android形成了一系列的自動化測試工具,供開發者選擇使用:
1.Debug工具Adb
ADB全稱Android Debug Bridge,是Android Sdk自帶的一個工具,用這個工具可以直接操作管理android模擬器或者真實的andriod設備(如手機)。它的主要功能有:(1)運行設備的shell(命令行);(2)管理模擬器或設備的端口映射;(3)計算機和設備之間上傳/下載文件;(4)將本地apk軟件安裝至模擬器或android設備。
2.Android調試工具DDMS
DDMS的全稱是Dalvik Debug Monitor Service,也是是Android Sdk自帶的一款工具,可以提供例如:為測試設備截屏,針對特定的進程查看正在運行的線程以及堆信息、Logcat、廣播狀態信息、模擬電話呼叫、接收SMS、虛擬地理坐標等等。
3.輔助測試工具———Android腳本語言環境ASE
Android Scripting Environment(ASE)是Google針對Android操作系統發布的一個小工具。ASE將腳本語言帶入Android,允許用戶編輯和執行腳本,直接在Android設備上運行交互式解釋器。腳本將能大幅度簡化任務界面,目前支持Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl, shell,借助ASE可以直接通過腳本(解釋語言)方便快捷的調用Android系統中大部分的API,針對手機功能展開測試。
4.壓力測試工具Monkey
Monkey也是Android Sdk中的一個命令行工具,可以運行在模擬器里或實際設備中。它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。Monkey測試是一種為了測試軟件的穩定性、健壯性的快速有效的方法。
5.功能測試工具Monkey Runner
Monkeyrunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設備和模擬器。通過Monkeyrunner,可以寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發送模擬擊鍵,截取它的用戶界面圖片,并將截圖存儲于工作站上。它與Monkey工具的差別在于:Monkey直接運行在設備或模擬器的adb?shell中,生成用戶或系統的偽隨機事件流。Monkeyrunner則是在工作站上通過API定義的特定命令和事件控制設備或模擬器。
6.UI識別測試工具Hierarch viewer
一般的UI自動化測試很重要的一點就是元素的獲取,android中提供了一個叫做hierarchyviewer的工具,可以識別android的控件元素,該工具也在Android SDk中。hierarchyviewer的使用非常簡單,啟動模擬器或者連接上真機后,啟動hierarchyviewer.bat即可。
7.功能測試工具Robotium
Robotium是一款測試Android Application的測試框架,它使得編寫黑盒測試代碼更加容易和穩定。通過使用Robotium,測試用例開發人員能夠跨越多個Activity,開發出功能、系統以及驗收測試用例。Robotium是基于Android測試框架InstrumentationTestCase2進行的2次封裝,其在測試過程中,不需要測試程序的源代碼,只要apk文件(需要知道測試程序的package和activity),而且應用apk與測試apk的簽名須保持一致。
8.UI自動化測試工具NativeDriver
NativeDriver是Google推出的一個開源的跨平臺的UI自動化測試框架。該工具是WebDriver API的一種實現,使用原生UI而不是瀏覽器UI(Selenium)的自動化測試框架,用于運行Android應用程序的功能測試。
五、移動應用測試云端發展
移動互聯網開發者和測試人員在移動應用的開發及測試過程中,對移動應用的質量、性能的測試環節工作量異常繁重,甚者還要購買大量的移動終端設備。相對原始機械的測試手段,低效率,高成本,超長的測試周期,已無法滿足移動互聯網應用產品的快速迭代要求,這就需要我們借助自動化的測試技術和工具,改良測試服務模式,提高工作效率,來滿足更多的用戶需求。
大家知道,要想滿足所有測試的需要,單從終端設備數量上來說就很龐大,很難要求某一家企業購置所有類型的終端設備,這使我們聯想到了資源整合與共享。互聯網上資源整合的發展趨勢是云計算,云計算系統是以付費使用的形式向用戶提供各種服務的分布式計算系統,其本質是對虛擬化的計算和存儲資源池進行動態部署、動態分配/重分配、實時監控的系統,從而向用戶提供滿足QoS要求的計算服務、數據存儲服務以及平臺服務。
為破解移動應用測試資源需求的諸多難題,人們提出了“云測試”模式。云測試是基于云計算的一種新型測試方案,一般用戶在本地把自動化測試腳本寫好,上傳到服務平臺網站,然后在平臺上運行腳本,得到測試結果。云測試具有遠程使用、終端齊備、低成本、高效率等優勢,借助日趨成熟的云服務模式,將測試任務分發到互聯網社區,調動全球互聯網上廣大公眾的終端設備參與到測試中來,從而實現了云端移動應用的測試服務模式,這種測試模式已經在一些移動應用服務平臺開始實施。