近年來智慧行動裝置使用數目逐年增長,而市場研究公司Strategy Analytics近期也發佈消息,[1] 2013年第三季智慧型手機中,以Android系統佔整個智慧手機81.3%為最高,也比2012年同期市佔增長6.3%。如此高的比例乃在於其開放式系統的便利性上受到APP開發者或是消費者的喜愛,不過同樣也衍生出不少問題。
累積至2013年7月,放在Google Play上的APP已達100萬個 [2],但這些已經放上架的APP幾乎都要持續更新,除了新款智慧手機上市需要支援外尚有不少是被消費者抱怨出現的bug修復;或者是因為Android系統的版本快速更新,容易導致硬體與Android系統的相容性問題。如何在一放上架就能減少被抱怨來提升產品品質與評價,讓開發的APP能在這100萬多的APP海中脫穎而出;或是提高嵌入式產品的穩定與品質,其APP檢測是不可或缺的。
對於現有智慧型手機款式種類上千種且以每年全球固定約有上百款智慧手機推出的速度來看,開發的任意一個Android APP若要在這數量龐大的手機上都以手動的方式安裝並執行測試,其人力耗費與測試時間的考量,都難以符合APP快速開發時程的要求,故自動化測試的需求也因應而生。而所謂的自動化測試即是撰寫所謂的測試腳本程式碼,以程式去呼叫執行待測之APP並執行一系列仿人行為(模擬對螢幕點擊、滑動、數據比對、截圖…等)的測試動作,目前要做到所有測試全以自動化去實現仍有許多問題需克服,但目前已有不少免費的Android自動化測試工具,大部分的測項已能使用自動化的方式來實現。而這些眾多的Android自動化測試工具也將在下一個章節介紹分析。
智慧型手機作業系統 | 2012年第三季
全球市佔比% |
2013年第三季
全球市佔比% |
---|---|---|
Android | 75% | 81.3% |
Apple | 15.6% | 13.4% |
Microsoft | 72.1% | 4.1% |
BlackBerry | 4.3% | 1.0% |
其他 | 3.0% | 0.2% |
目前也已有不少Android自動化測試工具被開發出來免費提供使用,而現有熱門的免費Android自動化測試工具如:Robotium、MonkeyTalk、UiAutomator、Monkeyrunner與Monkey均會在後面小節更多的介紹。
Robotium是一種開放式原始碼的Android自動化測試Library,其繼承自Android JUnit使用Android的Instrumentational框架並支援SDK Android 1.6以上版本。
Robotium不只能對APP進行白箱測試,如單元測試,甚至也可以進行黑箱測試,無需待測APP的原始碼,僅需待測APP包好的安裝檔(APK檔)。
另外在寫測試腳本時,若無程式原始碼而僅有APK檔時,則有兩件事情需特別注意:(1)需知道待測APP的package name及main activity這兩個資訊,(2)且對於APK檔需做重新簽名的動作,至於測試程式碼的撰寫格式可以到Robotium的官網[3]去下載測試腳本範例程式來修改,即可進行測試。
至2013年11月,最新的Robotium版本已更新到了4.3.1,提供支援的功能也是越來越多,從基本的一些簡單的APP畫面操作動作,如點擊按鈕、輸入欄位、各式滑動畫面方式、輸出結果數據比對、畫面拍照截圖,而進階的如,可加入等待時間、等待的事件條件設定、與APP具網路功能的混合測試。
MonkeyTalk [4] 也是一套方便用於APP的自動化測試工具,跟其它介紹的自動化測試工具不同的是,本文唯獨MonkeyTalk不是Google而是Gorilla Logic這家公司所開發。可以對APP的操作過程進行側錄的動作來做出自動化測試腳本框架,接著再輸入測試的參數即可完成自動化測試腳本,對於回歸測試(即修改測試參數但不更動整個測試碼結構)上很方便,不只支援Android系統也適用於iOS系統的APP測試,另外也支援APP具網路功能的混合測試。MonkeyTalk不只支援命令格式,也有自己的IED操作介面,如圖1所示。
MonkeyTalk對於錄製腳本上雖然很方便,但有一點是需要注意的,因為MonkeyTalk需設定MonkeyTalk Agent去對APP進行呼叫,需要APP的原始碼才能進行呼叫,若無APP原始碼則無法進行MonkeyTalk的自動化測試。
UiAutomator [5] 則是google自己推出的UI測試工具,其功能不限定於APP的測試,甚至可對狀態列、webview及手機上硬體按鈕的操作動作模擬。不需要待測APP的程式原始碼甚至也不需要APK檔,只要測試行動裝置上有安裝了待測APP即可。
UiAutomator的功能很強大,除了可以模擬手機螢幕上的點擊、對話框輸入、滑動螢幕、畫面截圖等基本功能外,甚至可以對行動裝置上進行更進一步的控制,如關掉螢幕、喚醒螢幕、旋轉螢幕、按Home鍵、點擊畫面上某個元件一段時間等動作。
但測試行動裝置其Android系統需4.1或以上的版本才有支援使用UiAutomator去進行操作測試。並且若需要進行輸出數據比對,則需把JUnit包含進專案才可,不像Robotium已經是繼承JUnit框架,不用特別引用即可使用JUnit所提供的數據比對函式/方法。
Monkeyrunner [6] 則類似UiAutomator一樣,可對行動裝置畫面上進行模擬操作,也很方便。透過Monkeyrunner,也可以寫出一個Python程式執行安裝Android APP的動作,並執行,送出模擬點擊、螢幕滑動等動作,最後也可以對畫面進行截圖。
Monkey [7] 則是針對Android APP進行畫面點擊的模擬,以下指令的方式,可以設定點擊的次數與點擊的時間間隔,但點擊的方式則無法控制確切的點擊位置,而是隨機的點擊,僅能透過設定亂數seed參數值來改變隨機點擊的方式。
其指令基本格式如下:
adb shell monkey [options] {event-count}
,其中
[options] : 表示配置monkey的設置
{event-count} : 表示monkey發送事件次數
其基本範例如下:
adb shell monkey -p your.package.name -v 500
,其中 -p 後面則是選擇要執行測試APP的package name、增加一個-v則在執行測試時會顯示一些測試的資訊,每增加一個-v就會多更多資訊,最多可以三個-v如-v –v –v、最後的500表示點擊畫面500次。
Monkey也可以設定不同種類的點擊百分比,如調整系統按鍵的百分比(如Home鍵、Back Off鍵、發話按鈕、斷話鍵、聲音大小聲等),調整APP啟動的百分比(透過startActivity()這個API呼叫Activity做為最大化測試涵蓋率到要測試的package方法),其語法句型範例如下:
adb shell monkey –p com.android.calculator2 –pct-touch 50 –pct-motion 50 -v 10
,此語法即設定將touch及motion事件頻率改為各50%。
在2.1節已有對Android自動化測試工具做了大致的介紹,下面我們再以各自的特性去做比較,如表2所示。
工具名稱 | 需要待測APP的程式碼提供程度 | 特性 | 支援功能 | 適合測試類型 |
---|---|---|---|---|
Robotium[3] | 可以不需要APP的程式原始碼,但至少要APK檔 | 針對APP去進行撰寫測試腳本模擬APP操作行為 | 可截圖、輸出數據比對、滑動畫面、點擊畫面、輸入值動作、支援需網路的APP | APP功能測試、回歸測試、網頁混和測試 |
MonkeyTalk[4] | 需要APP的原始碼才行 | 可針對操作APP進行錄製測試腳本 | 有錄製鍵,以錄製APP操作過程來完成測試腳本,但部分參數仍需手動輸入 | APP功能測試、回歸測試、網頁混和測試 |
UiAutomator[5] | 無需程式原始碼,也不用APK檔 | 不只可對APP甚至可對手機上畫面進行模擬人的操作行為 | 可截圖、滑動畫面、點擊畫面、輸入值動作、關掉或喚醒螢幕、旋轉螢幕 | 行動裝置操作畫面本身及APP的功能測試、回歸測試、網頁混和測試 |
MonkeyRunner[6] | 無需程式原始碼,也不用APK檔 | 不只可對APP甚至可對手機上畫面進行模擬人的操作行為 | 操作上比UiAutomator簡單,但是相對的支援的功能較少 | 行動裝置操作畫面本身及APP的功能測試、回歸測試 |
Monkey[7] | 無需程式原始碼,也不用APK檔 | 針對APP上的畫面進行隨機點擊的測試 | 可設定點擊的次數、點擊的間隔時間、不同類型的點擊比例設定 | 畫面點擊壓力測試 |
檢測對於APP開發有助於提升其品質,對於目前充斥在google play上大量的Android APP,其品質參差不齊,如果快速且有效的檢測讓開發的APP能在大量的機海上都能正常運作是不容易的,但透過自動化測試的工具能省去不少的測試人力成本與測試時程。
本文介紹了不少Android自動化測試工具,可針對測試類型去挑選適當的測試工具,定能讓檢測事半功倍。
- [1] "Strategy Analytics: Android Captures Record 80 Percent Share of Global Smartphone Shipments in Q2 2013,", Aug. 1, 2013.
- [2] "里程碑!Google Play app正式突破100萬個 超越蘋果", 2013年7月25日。
- [3] Robotium 官網
- [4] MonkeyTalk 官網
- [5] UiAutomator 官網
- [6] Monkeyrunner 官網
- [7] Monkey 官網