之前有寫過monkey測試詳細說明,幾天就說說monkeyrunner。
monkeyrunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設備和模擬器。通過monkeyrunner,您可以寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發送模擬擊鍵,截取它的用戶界面圖片,并將截圖存儲于工作站上。monkeyrunner工具的主要設計目的是用于測試功能/框架水平上的應用程序和設備,或用于運行單元測試套件。
這里好是要說說Monkeyrunner和monkey之間的差異
Monkey工具直接運行在設備或模擬器的adb
shell中,生成用戶或系統的偽隨機事件流。monkeyrunner工具則是在工作站上通過API定義的特定命令和事件控制設備或模擬器,它支持,自己編寫插件,控制事件,隨時截圖,簡而言之,任何你在模擬器/設備中能干的事情,MonkeyRunner都能干,而且還可以記錄和回放。
monkeyrunner的測試類型
多設備控制:monkeyrunner API可以跨多個設備或模擬器實施測試套件。您可以在同一時間接上所有的設備或一次啟動全部模擬器(或統統一起),依據程序依次連接到每一個,然后運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試,然后關閉模擬器。
APP功能測試:monkeyrunner可以為一個應用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數值,然后觀察輸出結果的截屏。
自動回歸測試:monkeyrunner可以運行某個應用,并將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。
可擴展的自動化:由于monkeyrunner是一個API工具包,您可以基于Python模塊和程序開發一整套系統,以此來控制Android設備。除了使用monkeyrunner API之外,您還可以使用標準的Python os和subprocess模塊來調用Android Debug Bridge這樣的Android工具。
運行monkeyrunner
可以直接使用一個代碼文件運行monkeyrunner,抑或在交互式對話中輸入monkeyrunner語句。不論使用哪種方式,您都需要調用SDK目錄的tools子目錄下的monkeyrunner命令。如果您提供一個文件名作為運行參數,則monkeyrunner將視文件內容為Python程序,并加以運行;否則,它將提供一個交互對話環境。
實例
#coding=utf-8
#導入我們需要用到的包和類并且起別名
import sys
from com.android.monkeyrunner importMonkeyRunner as mr
from com.android.monkeyrunner importMonkeyDevice as md
from com.android.monkeyrunner importMonkeyImage as mi
#connect device連接設備
#第一個參數為等待連接設備時間
#第二個參數為具體連接的設備
device =mr.waitForConnection(5.0,'emulator-5554')
if not device:
print >> sys.stderr,"fail"
sys.exit(1)
#定義要啟動的Activity
componentName='com.example.simulate/.ShellActivity'
#啟動特定的Activity
device.startActivity(component=componentName)
mr.sleep(3.0)
#do someting進行我們的操作
#輸入helloworld
device.type('helloworld')
#輸入回車
device.press('KEYCODE_ENTER')
#return keyboard
#device.press('KEYCODE_BACK')
#------
#takeSnapshot截圖
mr.sleep(3.0)
result = device.takeSnapshot()
#save to file保存到文件
result.writeToFile('./shot1.png','png');
命令行輸入:
monkeyrunner MonkeyRunnerTest.py
cmd2
TestBird-手游和App自動化測試平臺