前言html
本章內容爲開發者指南(Dev Guide)/Developing/Tools/monkeyrunner,版本爲Android2.3 r1,翻譯轉載並整理自譯言:"biAji",原文地址:"http://article.yeeyan.org/view/37503/164523",再次感謝"bjAji" !期待你一塊兒參與翻譯Android的相關資料,聯繫我over140@gmail.com。
python
聲明android
本文檔轉載並整理自譯言:Monkeyrunner 使用說明shell
Android中文翻譯組:http://goo.gl/6vJQl
編程
原文
app
正文編程語言
monkeyrunner工具提供了一個API,使用此API寫出的程序能夠在Android代碼以外控制Android設備和模擬器。經過monkeyrunner,您能夠寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發送模擬擊鍵,截取它的用戶界面圖片,並將截圖存儲於工做站上。monkeyrunner工具的主要設計目的是用於測試功能/框架水平上的應用程序和設備,或用於運行單元測試套件,但您固然也能夠將其用於其它目的。ide
monkeyrunner工具與(UI/Application Exerciser Monkey)用戶界面/應用程序測試工具,也稱爲monkey工具並沒有關聯。monkey
工具直接運行在設備或模擬器的adb
shell中,生成用戶或系統的僞隨機事件流。而monkeyrunner工具則是在工做站上經過API定義的特定命令和事件控制設備或模擬器。工具
monkeyrunner工具爲Android測試提供瞭如下特性:
* 多設備控制:monkeyrunner API能夠跨多個設備或模擬器實施測試套件。您能夠在同一時間接上全部的設備或一次啓動所有模擬器(或通通一塊兒),依據程序依次鏈接到每個,而後運行一個或多個測試。您也能夠用程序啓動一個配置好的模擬器,運行一個或多個測試,而後關閉模擬器。
* 功能測試: monkeyrunner能夠爲一個應用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數值,而後觀察輸出結果的截屏。
* 迴歸測試:monkeyrunner能夠運行某個應用,並將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。
* 可擴展的自動化:因爲monkeyrunner是一個API工具包,您能夠基於Python模塊和程序開發一整套系統,以此來控制Android設備。除了使用monkeyrunner API以外,您還能夠使用標準的Python os
和subprocess
模塊來調用如Android Debug Bridge這樣的Android工具 。
您還能夠向monkeyrunner API中添加您本身的類。咱們將在使用插件擴展monkeyrunner一節中對此進行詳細討論 。
monkeyrunner工具使用Jython(使用Java編程語言的一種Python實現)。Jython容許monkeyrunnerAPI與Android框架輕鬆的進行交互。使用Jython,您能夠使用Python語法來獲取API中的常量、類以及方法。
一個簡單的monkeyrunner程序實例(A Simple monkeyrunner Program)
如下爲一個簡單的monkeyrunner程序,它將會鏈接到一個設備,建立一個MonkeyDevice對象。使用MonkeyDevice對象,程序將安裝一個Android應用包,運行其中一個活動,並向其發送按鍵事件。程序接下來會將結果截圖,建立一個MonkeyImage對象,並使用這個對象截圖將保存至.png文件。
The monkeyrunner API
monkeyrunnerAPI於com.android.monkeyrunner包中包含三個模塊:
* MonkeyRunner
:一個爲monkeyrunner程序提供工具方法的類。這個類提供了用於鏈接monkeyrunner至設備或模擬器的方法。它還提供了用於建立一個monkeyrunner程序的用戶界面以及顯示內置幫助的方法。
* MonkeyDevice
:表示一個設備或模擬器。這個類提供了安裝和卸載程序包、啓動一個活動以及發送鍵盤或觸摸事件到應用程序的方法。您也能夠用這個類來運行測試包。
* MonkeyImage
:表示一個截圖對象。這個類提供了截圖、將位圖轉換成各類格式、比較兩個MonkeyImage對象以及寫圖像到文件的方法。
在python程序中,您將以Python模塊的形式使用這些類。monkeyrunner工具不會自動導入這些模塊。您必須使用相似以下的from語句:
其中,爲您想要導入的類名。您能夠在一個from語句中導入超過一個模塊,其間以逗號分隔。
Running monkeyrunner
您能夠直接使用一個代碼文件運行monkeyrunner,抑或在交互式對話中輸入monkeyrunner語句。不論使用哪一種方式,您都須要調用SDK目錄的tools子目錄下的monkeyrunner命令。若是您提供一個文件名做爲運行參數,則monkeyrunner將視文件內容爲Python程序,並加以運行;不然,它將提供一個交互對話環境。
monkeyrunner命令的語法爲:
表 1闡釋了命令的標誌和參數。
參數 |
說明 |
|
(可選)指定一個內含monkeyrunner插件的 |
|
若是您指定此參數,monkeyrunner將視文件內容爲Python程序並予以執行。若是此參數未予指定,則開啓一個交互式會話。 |
|
(可選)<程序文件名> 所指定的程序所需的參數 |
monkeyrunner內建幫助(monkeyrunner Built-in Help)
您能夠用如下命令來生成monkeyrunner的API參考:
參數說明:
* 能夠爲text
或html
,分別表明純文本和HTML輸出。
* 指定了輸出文件的全路經名稱。
使用插件擴展monkeyrunner(Extending monkeyrunner with Plugins)
您能夠用Java語言建立新的類,並打包成一個或多個.jar
文件,以此來擴展monkeyrunnerAPI。您能夠使用您本身寫的類或者繼承現有的類來擴展monkeyrunnerAPI。您還能夠使用此功能來初始化monkeyrunner環境。
爲了使monkeyrunner加載一個插件,您應當如使用如表1中所述的-plugin
參數來調用monkeyrunner命令。
在您編寫的插件中,您能夠導入或繼承位於com.android.monkeyrunner包中的幾個主要的monkeyrunner類:MonkeyDevice, MonkeyImage和MonkeyRunner(參見monkeyrunnerAPI )。
請注意,插件沒法讓你訪問Android的SDK。您不能導入com.android.app等包。這是由於monkeyrunner是在框架API層次之下與設備或模擬器進行交互的。
插件啓動類(The plugin startup class)
用於插件的.jar文件能夠指定一個類,使其在腳本執行以前就實例化。如欲指定這個類,您須要在.jar文件的manifest中添加鍵MonkeyRunnerStartupRunner。其值爲啓動時運行的類的名稱。如下代碼段顯示瞭如何在一個ant構建腳本達到這樣的目的:
如欲訪問 monkeyrunner 的運行時環境,啓動類能夠實現 com.google.common.base.Predicate<PythonInterpreter> 。例如,用這個類在默認的命名空間中設置一些變量: