什么是monkeyrunner
monkeyrunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設(shè)備和模擬器。通過monkeyrunner,您可以寫出一個Python程序去安裝一個Android應(yīng)用程序或測試包,運行它,向它發(fā)送模擬擊鍵,截取它的用戶界面圖片,并將截圖存儲于工作站上。monkeyrunner工具的主要設(shè)計目的是用于測試功能/框架水平上的應(yīng)用程序和設(shè)備,或用于運行單元測試套件,但您當然也可以將其用于其它目的。
monkeyrunner工具同Monkey工具的差別
Monkey:
Monkey工具直接運行在設(shè)備或模擬器的adb shell中,生成用戶或系統(tǒng)的偽隨機事件流。
monkeyrunner:
monkeyrunner工具則是在工作站上通過API定義的特定命令和事件控制設(shè)備或模擬器。
monkeyrunner的測試類型
1. 多設(shè)備控制:monkeyrunner API可以跨多個設(shè)備或模擬器實施測試套件。您可以在同一時間接上所有的設(shè)備或一次啟動全部模擬器(或統(tǒng)統(tǒng)一起),依據(jù)程序依次連接到每一個,然后運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試,然后關(guān)閉模擬器。
2.功能測試: monkeyrunner可以為一個應(yīng)用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數(shù)值,然后觀察輸出結(jié)果的截屏。
3.回歸測試:monkeyrunner可以運行某個應(yīng)用,并將其結(jié)果截屏與既定已知正確的結(jié)果截屏相比較,以此測試應(yīng)用的穩(wěn)定性。
4. 可擴展的自動化:由于monkeyrunner是一個API工具包,您可以基于Python模塊和程序開發(fā)一整套系統(tǒng),以此來控制Android設(shè)備。除了使用monkeyrunner API之外,您還可以使用標準的Python os和subprocess模塊來調(diào)用如adb這樣的Android工具 。
5.monkeyrunner工具使用Jython(使用Java編程語言的一種Python實現(xiàn))。Jython允許monkeyrunnerAPI與Android框架輕松的進行交互。使用Jython,您可以使用Python語法來獲取API中的常量、類以及方法。
運行monkeyrunner
您可以直接使用一個代碼文件運行monkeyrunner,抑或在交互式對話中輸入monkeyrunner語句。不論使用哪種方式,您都需要調(diào)用SDK目錄的tools子目錄下的monkeyrunner命令。如果您提供一個文件名作為運行參數(shù),則monkeyrunner將視文件內(nèi)容為Python程序,并加以運行;否則,它將提供一個交互對話環(huán)境。
monkeyrunner的命令語法為:
monkeyrunner -plugin 《plugin_jar》 《program_filename》 《program_options》
monkeyrunner測試教程
如果你需要實現(xiàn)自動測試,Android的monkeyrunner 工具可以幫助你實現(xiàn)自動測試,它提供了一組API可以用來控制Android設(shè)備或模擬器,使用monkeyrunner,你可以編寫Python 程序來安裝Android應(yīng)用或是測試包,運行應(yīng)用或測試,發(fā)送按鍵消息,并可以截屏,然后保存在計算機中。monkeyrunner 主要目的是用來在應(yīng)用程序或框架層次來測試應(yīng)用程序或運行單元測試包,但你也可以用作其它目的。
monkeyrunner 工具包不同于UI/Application Exerciser Monkey(也稱為Money),money 通過adb shell 來運行,可以模擬“猴子”隨機按鍵或是發(fā)送系統(tǒng)消息給指定的應(yīng)用來實現(xiàn)Stress 測試。
monkeyrunner API 主要通過下面三個包:
MonkeyRunner: 主要提供了monkeyrunner 應(yīng)用的輔助方法以及,用來鏈接設(shè)備或是模擬器的方法,并提供UI支持等。
MonkeyDevice: 代表一個設(shè)備或是模擬器,提供安裝,卸載應(yīng)用的方法,啟動一個Activity,發(fā)送按鍵或是Touch 事件等。
MonkeyImage: 代表一個截屏圖像,可以截取不同格式的圖像,比較兩個MonkeyImage圖像,保存圖像等。
下面為一個 Python 寫的monkeyrunner 應(yīng)用, 因為涉及到Python 語言,這里不詳細說明了
?。踦ython] view plain copy# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
# Installs the Android package. Notice that this method returns a boolean,
# so you can test to see if the installation worked.
device.installPackage(‘myproject/bin/MyApplication.apk’)
# sets a variable with the package‘s internal name
package = ’com.example.android.myapplication‘
# sets a variable with the name of an Activity in the package
activity = ’com.example.android.myapplication.MainActivity‘
# sets the name of the component to start
runComponent = package + ’/‘ + activity
# Runs the component
device.startActivity(component=runComponent)
# Presses the Menu button
device.press(’KEYCODE_MENU‘,’DOWN_AND_UP‘)
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile(’myproject/shot1.png‘,’png‘)
詳細的API說明請參考Android文檔 ,如果你需要實現(xiàn)自動測試,編寫測試代碼,可以使用Python通過monkeyrunner API來實現(xiàn)。
評論
查看更多