編輯:關於Android編程
最近在復習之前的筆記,在回顧MonkeyRunner時看了看google官網的內容,寫得不錯,就翻譯出來分享下。其實google官網真是一個學習的好地方。
MonkeyRunner工具提供了一個API用於在Android代碼之外控制Android設備和模擬器。通過MonkeyRunner,您可以寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發送模擬擊鍵,截取它的用戶界面圖片,並將截圖存儲於工作站上。monkeyrunner工具的主要設計目的是用於測試功能/框架水平上的應用程序和設備,或用於運行單元測試套件,但您當然也可以將其用於其它目的。
MonkeyRunner工具與monkey工具並無關聯。monkey工具直接運行在設備或模擬器的adbshell中,生成用戶或系統的偽隨機事件流。而MonkeyRunner工具則是在工作站上通過API定義的特定命令和事件控制設備或模擬器。
MonkeyRunner工具為Android測試提供了以下特性:
多設備控制:MonkeyRunner的API可以跨多個設備或模擬器實施測試套件。您可以在同一時間接上所有的設備,也可以一次啟動全部模擬器,依據程序來依次連接到每個設備,然後運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試。
功能測試:MonkeyRunner可以為一個應用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數值,然後觀察輸出結果的截屏。
回歸測試:MonkeyRunner可以運行某個應用,並將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。
可擴展的自動化:由於MonkeyRunner是一個API工具包,您可以基於Python模塊和程序開發一整套系統,以此來控制Android設備。除了使用MonkeyRunner的API之外,您還可以使用標准的Python os和subprocess模塊來調用如adb這樣的Android工具。
您還可以向MonkeyRunnerAPI中添加您自己的類。我們將在後面會對此進行詳細討論。
MonkeyRunner工具使用Jython(使用Java編程語言的一種Python實現)。Jython允許MonkeyRunner API與Android框架輕松的進行交互。使用Jython,您可以使用Python語法來獲取API中的常量、類以及方法。
以下為一個簡單的MonkeyRunner程序,它將會連接到一個設備,創建一個MonkeyDevice對象。使用MonkeyDevice對象,程序將安裝一個Android應用包,運行其中一個活動,並向其發送按鍵事件。程序接下來會將結果截圖,創建一個MonkeyImage對象,並使用這個對象截圖將保存至.png文件。
# 導入此程序所需的MonkeyRunner模塊
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# 連接當前設備,返回一個MonkeyDevice對象
device = MonkeyRunner.waitForConnection()
# 安裝Android包,注意,此方法返回的返回值為boolean,由此您可以判斷安裝過程是否正常
device.installPackage('myproject/bin/MyApplication.apk')
# 運行此應用中的一個活動 device.startActivity(component='com.example.android.myapplication.MainActivity')
# 按下菜單按鍵
device.press('KEYCODE_MENU','DOWN_AND_UP')
# 截取屏幕截圖
result = device.takeSnapShot
# 將截圖保存至文件
result.writeToFile('myproject/shot1.png','png')
MonkeyRunner 在com.android.monkeyrunner包中總共包含三個模塊:
MonkeyRunner:一個為monkeyrunner程序提供工具方法的類。這個類提供了用於連接monkeyrunner至設備或模擬器的方法。它還提供了用於創建一個monkeyrunner程序的用戶界面以及顯示內置幫助的方法。
MonkeyDevice :表示一個設備或模擬器。這個類提供了安裝和卸載程序包、啟動一個活動以及發送鍵盤或觸摸事件到應用程序的方法。您也可以用這個類來運行測試包。
MonkeyImage :表示一個截圖對象。這個類提供了截圖、將位圖轉換成各種格式、比較兩個MonkeyImage對象以及寫圖像到文件的方法。
在python程序中,您將以Python模塊的形式使用這些類。monkeyrunner工具不會自動導入這些模塊。您必須使用類似如下的from語句:
fromcom.android.monkeyrunner import
其中,為您想要導入的類名。您可以在一個from語句中導入超過一個模塊,其間以逗號分隔。
您可以直接使用一個代碼文件運行MonkeyRunner,抑或在交互式對話中輸入MonkeyRunner語句。不論使用哪種方式,您都需要調用SDK目錄的tools子目錄下的MonkeyRunner命令。如果您提供一個文件名作為運行參數,則MonkeyRunner將視文件內容為Python程序,並加以運行;否則,它將提供一個交互對話環境。
MonkeyRunner命令的語法為:
monkeyrunner -plugin <程序文件名> <程序選項>
-plugin : (可選)指定一個內含MonkeyRunner插件的.jar文件。欲了解更多關於monkeyrunner插件的內容,參考下文。要指定多個文件,可以多次使用此參數。
<程序文件名>: 如果您指定此參數,MonkeyRunner將視文件內容為Python程序並予以執行。如果此參數未予指定,則開啟一個交互式會話。
<程序選項>:(可選)<程序文件名>中所指定的程序所需的參數。
您可以用以下命令來生成monkeyrunner的API參考:
monkeyrunner help.py
參數說明:
可以為text或html,分別代表純文本和HTML輸出。
指定了輸出文件的全路徑名稱。
您可以用Java語言創建新的類,並打包成一個或多個.jar文件,以此來擴展 MonkeyRunner API。您可以使用您自己寫的類或者繼承現有的類來擴展MonkeyRunner API。您還可以使用此功能來初始化MonkeyRunner環境。
為了使MonkeyRunner加載一個插件,您應當如使用如前面所述的-plugin參數來調用MonkeyRunner命令。
在您編寫的插件中,您可以導入或繼承位於com.android.monkeyrunner包中的幾個主要的monkeyrunner類:MonkeyDevice, MonkeyImage和MonkeyRunner。
請注意,插件無法讓你訪問Android的SDK。您不能導入com.android.app等包。這是因為monkeyrunner是在框架API層次之下與設備或模擬器進行交互的。
用於插件的.jar文件可以指定一個類,使其在腳本執行之前就實例化。如欲指定這個類,您需要在.jar文件的manifest中添加鍵 MonkeyRunnerStartupRunner。其值為啟動時運行的類的名稱。以下代碼段顯示了如何在一個ant構建腳本達到這樣的目的:
如欲訪問MonkeyRunner的運行時環境,啟動類可以實現com.google.common.base.Predicate。例如,用這個類在默認的命名空間中設置一些變量:
package com.android.example;
import com.google.common.base.Predicate;
import org.python.util.PythonInterpreter;
public class Main implements Predicate {
@Override
public boolean apply(PythonInterpreter anInterpreter) {
/*
* Examples of creating and initializing variables in the monkeyrunner environment's
* namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
* and "use_emulator"
*
*/
anInterpreter.set("newtest", "enabled");
anInterpreter.set("use_emulator", 1);
return true;
}
}
MonkeyRunner到此翻譯完,用好自動化測試框架對android開發有很大幫助。
導入Android工程出現unable to get system library for the project 錯誤提示問題與現象:當向eclipse導
在前幾篇文章中《Android 采用get方式提交數據到服務器》《Android 采用post方式提交數據到服務器》《Android 采用HttpClient提交數據到服
先給大家展示下效果圖,如果大家感覺還不錯,請參考實現代碼很簡單的一個例子,點擊刷新驗證碼,刷新當前顯示的驗證碼,點擊確定,如果輸入的和顯示的匹配,就會跳轉到下一個界面中,
Android如何獲取手機聯系人信息,本文為大家揭曉。獲取手機聯系人信息步驟: 1、獲取 ContentResolver ContentResolver resolver