2012年10月8日 星期一

Android 自動化操作與測試 - monkeyrunner

English Version


在2012這個年代,Android大軍已經在各家品牌廠與中國的白牌廠商等硬體廠商遍地開花。各式各樣的品牌,琳瑯滿目。不過在這個一個Android大軍的共同點,大家都是系出同門。來自谷歌大門。因此,我們有幸得以使用相同的開發或控制資源於不同廠牌的Android手機或機器人。

對於一些軟體或硬體開發廠商來說,要確保自己的產品能夠有足夠的品質,必須投資相當多的測試資源。在測試過程中,最昂貴的投資不外乎是設備與人。但谷歌在開發Android時,已經貼心的幫後續使用Android OS的廠商們提供一個操控Android機器人可溝通的語言。他就是猴子跑步 - monkeyrunner。利用這個套件可以不需要購買額外特別昂貴的軟體設備.同時也可以協助人力成本的運用。

猴子跑步 (monkeyrunner) 是甚麼 ?

monkeyrunner是谷歌的Android開發團隊提供的一套工具,這套工具題供一組指令集,讓使用者可以發送控制命令給Android手機、平板電腦或Android驅動的電子設備。

monkeyrunner工具所提供的指令包含發送按鍵(Key/Button)控制事件、拉滑(Drag/Slide)螢幕控制事件、觸控(Touch)螢幕控制、儲存即時螢幕畫面成為圖檔(為PNG或BMP格式)、傳回選定圖片檔案與即時Android畫面比較的結果、輸入一段文字、執行Shell命令、顯示提示訊息、喚醒螢幕、安裝APP、移除APP、設定重新開機與取得系統資訊等功能。

該從哪開始 ?

首先你需要一個Android的裝置,若有實際的Android硬體裝置比較好。但若沒有,又想跟monkeyrunner玩耍,Android SDK內建的Emulator也是一個選擇。

你的電腦需要安裝Oracle的J2SDK,6或7版本皆可可於下方網址取得
http://www.oracle.com/technetwork/java/javase/downloads/index.html

你需要下載Android SDK,可於下方網址取得
http://developer.android.com/sdk/index.html

Android SDK可於以下三種作業系統使用
1. Microsoft Windows
2. Linux (i386) (Ubuntu 是Linux 系統中開發Android程式比較好的選擇)
3. Mac OS X (intel)

設定ADB USB Driver
以Microsoft Windows作業系統為例,插入USB線到手機與電腦後,第一次連線電腦通常需要安裝ADB USB Driver,於Windows作業系統會要求安裝不明裝置的USB Driver。關於Google Nexus的裝置,你可用Android SDK中的USB Driver (置於SDK_目錄\extras\google\usb_driver)來安裝ADB Interface Driver。若您的裝置不是Nexus,你則需要安裝手機品牌廠的ADB USB Driver。例如HTC的手機,你需要到HTC的官網去下載。

以Unbutu作業系統與在各系統的Emulator為例,不需要安裝USB Driver。

通常我會建議大家把Android SDK的tools與platform-tools兩個資料夾的路徑加在系統環境變數的path中. 這樣可以讓你在執行過程中呼叫adb與monkeyrunner的環境更加的便利。

最後一個步驟就是設定Android裝置進入USB Debug Mode。這個選項在大部分的Android裝置會放在設定->開發人員選項->USB偵錯。

最後確認一下,喚出cmd視窗,使用adb devices的指令,確認電腦有認到Android裝置,如下畫面。


執行adb devices後,會出現目前已連接上你的電腦USB的Android裝置的機器序號,在序號後必須是顯示device才能算是連線成功。

以上設置需求完成後,就可以來跟猴子跑步玩耍。

基礎練習

monkeyrunner的執行方式必須由電腦端發起,並且透過adb連線來對Android裝置下命令。現在讓我們來用一個最簡單的範例帶您進入monkeyrunner的控制。

以下的範例以Microsoft Windows 7的方式呈現. Windows XP或Vista的行為應該與Windows 7大同小異。

打開Android SDK的資料夾,資料夾內有個tools的資料夾,執行內部有個monkeyrunner.bat的批次檔。


開啟另一個cmd視窗,確認你的Android device的序號(Serial Number)後面顯示device。


在已開啟的monkeyrunner視窗中輸入如下的內容:
monkeyrunner命令中,大小寫的字母視為相異,務必確認大小寫一致。

第一個命令<from com.android.monkeyrunner import ...> 是把monkeyrunner相關的class預載進來執行環境。
第二個命令是進行Android device與電腦的monkeyrunner建立連線,並且把連線的掌控權交給device這個變數。若電腦同時接到多台Android裝置,需要在waitForConnection的括號中輸入指定的Android裝置序號,例如("emulator-5554")。
第三個命令是利用第二個命令已經設定好的並擁有控制權的變數device來下指令。這邊下的指令是按壓選單鍵控制。因此可以看到以下Android裝置的圖片一為下press指令前,第二張圖片為下press指令後,主畫面的選單跳出來。


下press指令前

下press指令後

猴子能協助你跑那些地方

在Google的官方網頁中提到,monkeyrunner可以做幾個用途,這些用途有多個Android裝置控制、功能測試、回歸測試、與延伸自動化。其實說得明白些,monkeyrunner可以讓你取代人工操作螢幕上可執行的動作。如前文所提,monkeyrunner可以幫你觸碰螢幕、拉滑畫面、觀察螢幕上圖像的變化。只要讓adb與monkeyrunner環境可以順利執行,就可以用預先錄製下來的一連串行動 (Scenario),對Android裝置做控制。

以一般使用者想做的事,最可能會有反覆性的動作應該會是玩Android遊戲時要練功。若是反覆性行為就可以利用monkeyrunner來達成。

以軟體或硬體開發商而言,想要開發一個有品質的產品,除了優良的設計流程管理,也不能漏掉最重要的驗收階段。對於每一個產品功能 (Feature),要有反覆性的驗證,對於穩定度測試,monkeyrunner更能24小時,日以繼夜,任勞任怨的為你工作。除了操控用的電腦當機情形外,基本上他不會罷工。

進階練習

介紹到這,我們可以來舉個稍微多點情境的例子。若我們想要做一個Bluetooth開啟與關閉測試,我們可以利用monkeyrunner來幫我們達成。

首先我們讓手機進到主畫面(Launcher),然後執行下列的動作:

  monkeyrunner 指令
>>> device1.press('KEYCODE_MENU','DOWN_AND_UP',' ')
  觸發Menu按鍵,呼叫選單,如圖m-2
>>> device1.touch ( 95, 417, "DOWN_AND_UP")
  觸發觸碰Menu清單的Settings選項,如圖m-3
>>> device1.touch ( 197, 96, "DOWN_AND_UP")
  觸發觸碰Bluetooth Off的螢幕位子,如圖m-4
>>> device1.touch ( 155, 95, "DOWN_AND_UP")
  觸發觸碰Bluetooth On的螢幕位子,如圖m-5


 圖-m1
 圖-m2
 圖-m3
 圖-m4
圖-m5

後語
我們談完基本的monkeyrunner的用法,這些基本的方法可以很快的延伸到我們所想要的多種情景操作.但monkeyrunner可以做更多,才能達到我們所想要的結果.在別篇文章我們會再介紹monkeyrunner的強大用途.

參考資料
monkeyrunner, http://developer.android.com/tools/help/monkeyrunner_concepts.html , published by Google Inc.

沒有留言:

張貼留言