標籤:
眼下android SDK在配有現成的測試載入器monkey 和 monkeyrunner兩。
也許我們不看一樣的兄弟名字。但事實是完全跑了兩個完全不同的工具。在測試的不同地區的應用程式。總體,monkey主要用於壓力和可靠性測試,擬鍵盤事件流。而且能夠自訂發送的次數,以此觀察被測應用程式的穩定性和可靠性。應用起來也比較簡單,記住那幾個命令即可了。而monkeyrunner呢,相比之下會強大一些,它主要可應用於功能測試。迴歸測試。而且能夠自訂測試擴充,靈活性較強。而且測試人員能夠全然控制。
本篇乃本人學習monkeyrunner時筆記。查看網路中的資料並經本人測試而出,因為本人剛接觸,所以本篇內容不免膚淺。高手們請繞走~
在測試本人下面執行個體時。請自行搭建Android環境。
一、開啟模擬器
執行monkeyrunner之前必須先執行對應的模擬器。不然monkeyrunner無法串連裝置。
用Elipse開啟Android模擬器或在CMD中用Android命令開啟模擬器。這裡重點講一下在CMD中用Android命令開啟模擬器
命令:emulator -avd test (注意:test為虛擬設備的名稱——AVD的全稱為:Android Virtual Device,就是Android執行的虛擬設備,例如以所看到的:)
上面命令中的test是模擬器名稱。
使用時須要改成實際名字。
假設正常,模擬器應該能夠啟動起來了。
假設啟動並執行結果出現下面錯誤內容:
PANIC: Could not open: C:\Documents and Settings\sAdministrator\.android/avd/test.ini
例如以所看到的:
原因在於你的環境變數缺少配置。請在“系統變數”中加入“ANDROID_SDK_HOME”,設定其值為“C:\Documents and Settings\Administrator”(注意:這裡的值不能為C:\Documents and Settings\Administrator\.android),例如以所看到的:
確定後,關閉CMD表單。又一次開啟CMD。運行以上命令。
將會啟用模擬器。
模擬器啟動成功後,我們仍在CMD環境中操作。如今進入monkeyrunner的shell命令互動模式。
命令:monkeyrunner
進入shell命令互動模式後,首要一件事就是匯入monkeyrunner所要使用的模組。直接在shell命令下輸入:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 斷行符號
OK,這步完畢我們就能夠利用monkeyrunner進行測試工作了。
這裡有兩種方案,一是直接在shell命令下輸入下面命令。
命令說明
device=MonkeyRunner.waitForConnection() #串連手機裝置
device.installPackage("../samples/android-10/ApiDemos/bin/Apidemos.apk") #安裝apk包到手機裝置。
啟動當中的隨意activity了,僅僅要傳入package和activity名稱就可以。命令例如以下:
device.startActivity(component="com.example.android.apis/com.example.android.apis.ApiDemos")
此時模擬器會自己主動開啟ApiDemos這個應用程式的首頁。
device.reboot() #手機裝置重新啟動
device.touch(300,300,‘DOWN_AND_UP‘)
MonkeyRunner.alert("hello")#在emulator上會彈出訊息提示
device.press(‘KEYCODE_HOME‘,MonkeyDevice.DOWN_AND_UP)
device.type(‘hello‘)#向編輯地區輸入文本‘hello‘
二是將下面命令寫到python檔案中。比如test.py,然後我們再從命令列直接通過monkeyrunner執行它就可以。比方。我們還是用上面的範例,文法例如以下:monkeyrunner test.py 接下來monkeyrunner會自己主動調用test.py。並執行當中的語句。相當方便。
執行個體:test.py
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevicedevice=MonkeyRunner.waitForConnection()device.startActivity(component="your.www.com/your.www.com.TestActivity")
在CMD中運行
monkeyrunner test.py
可能出現錯誤“Can‘t open specified script file”,例如以所看到的:
原因在於python指令檔路徑不對。
你能夠有下面解決的方法:
1、將test.py檔案存放到monkeyrunner檔案同一檔案夾中。能夠運行:monkeyrunner test.py 調用
2、指定python檔案位置。假設test.py檔案在D盤根資料夾下,能夠這樣運行:monkeyrunner d:\test.py
學習筆記
以下是學習中的筆記,有點亂。就放在本篇最後吧。
環境變數
變數名:ANDROID_SDK_HOME
變數值:C:\Documents and Settings\Administrator
變數名:Path
變數值:%SystemRoot%\system32;%SystemRoot%;C:\Python27;C:\py;D:\android\android-sdk-windows\tools;D:\android\android-sdk-windows\platform-tools
android自己主動化測試架構:CTS、monkey、monkeyrunner、benchmark
monkeyrunner
monkeyrunner工具提供了一個API。運用該API編寫的程式能夠不用通過android代碼來直接控制android裝置和模擬器,我們能夠寫一個python程式對android應用程式或測試包進行安裝、執行、發送類比擊鍵。對使用者介面進行並將儲存在workstation上等操作。monkeyrunner工具的主要設計目的是用於測試application/framework層上的應用程式和裝置、或用於執行單元測試套件,也能夠用於其他目的。
monkey工具,是直接執行在裝置或模擬器的adb shell中,產生使用者或系統的偽隨機事件流。
monkeyrunner為android測試提供了下面獨特的功能:
1、多裝置控制:monkeyrunner API能夠跨多個裝置或模擬器實施測試套件。能夠在同一時間接上所有裝置或一次啟動所有模擬器,根據程式依次串連到每個,然後執行一個或多個測試。也能夠用程式啟動一個配置好的模擬器。執行一個或多個測試。然後關閉模擬器。
2、功能測試:monkeyrunner能夠為一個應用自己主動貫徹一次功能測試。
您提供按鍵或觸摸事件的輸入數值,然後觀察輸出結果的截屏。
4、迴歸測試:monkeyrunner能夠執行某個應用。並將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。
4、可擴充的自己主動化:因為monkeyrunner是一個API工具包,我們能夠開發基於python模組和程式的一整套系統,以此來控制android裝置。除了使用monkeyrunner API,我們還能夠使用標準的python os和ubprocess模組來調用android debug bridge這種android工具。如ADB這種android工具。也能夠將自己寫的類加入到monkeyrunner API中。
執行monkeyrunner
能夠直接使用一個代碼檔案執行monkeyrunner。抑或在互動式對話中輸入monkeyrunner語句。
不論使用哪種方式,你都須要調用SDK檔案夾的tools子檔案夾下的monkeyrunner命令。
假設提供一個檔案名稱作為執行參數。則monkeyrunner將視檔案內容為python程式。並加以執行;否則。它將提供一個互動對話環境。
monkeyrunner命令文法
monkeyrunner -plugin <plugin_jar> <programe_filename> <programe_option>
monkeyrunner API
主要包含三個模組
1、MonkeyRunner:這個類提供了用於串連monkeyrunner和裝置或模擬器的方法。它還提供了用於建立使用者介面顯示提供了方法。
2、MonkeyDevice:代表一個裝置或模擬器。
這個類為安裝和卸載包、開啟Activity、發送按鍵和觸摸事件、執行測試包等提供了方法。
3、MonkeyImage:這個類提供了捕捉螢幕的方法。這個類為、將位元影像轉換成各種格式、對照兩個MonkeyImage對象、將image儲存到檔案等提供了方法。
注意:在執行monkeyrunner之前必須先執行對應的模擬器,否則monkeyrunner無法串連到裝置
執行模擬器有兩種方法:1、通過eclipse中執行模擬器 2、在CMD中通過命令調用模擬器
這裡介紹通過命令,在CMD中運行模擬器的方法
命令:emulator -avd test
上面命令中test是指模擬器的名稱。
匯入須要的模組
import sys
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
假設給匯入的模組起了別名。就應該使用別名,而不能使用原名,否則會出現錯誤。
比方串連裝置或模擬器,起了以上別名後。命令應該例如以下:
device=mr.waitForConnection()
也能夠採用下面方式
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
也能夠採用這樣的方式
import com.android.monkeyrunner
可是在使用時,就顯得特別麻煩
device=com.android.monkeyrunner.MonkeyRunner.waitForConnection()
我們也能夠給它一個別名
import com.android.monkeyrunner as cam
可是在使用時,就顯得特別麻煩
device=cam.MonkeyRunner.waitForConnection()
#等待串連到裝置。與模擬器串連。返回monkeydevice對象,代表串連的裝置。
沒有報錯的話說明串連成功。
參數1:逾時時間。單位秒,浮點數。預設是無限期地等待。
參數2:串deviceid,指定的裝置名稱。默覺得當前裝置(手機優先,比方手機通過USB線串連到PC、其次為模擬器)。
預設串連:device=MonkeyRunner.waitForConnection()
參數串連:device = mr.waitForConnection(1.0,‘emulator-5554‘)
向裝置或模擬器安裝要測試的APK
device.installPackage(‘myproject/bin/MyApplication.apk‘) #參數是相對或絕對APK路徑
路徑層級用“/”,不能用“\”。比方d:\www\a.apk,而應該寫成d:/www/a.apk
成功安裝返回true,此時查看模擬器我們能夠在IDLE介面上看到安裝的APK的表徵圖了。
從裝置中刪除指定的軟體包,包含其相關的資料和調整緩衝
device.removePackage(‘myproject/bin/MyApplication.apk‘)
刪除成功返回true。
#啟動隨意的Activity
device.startActivity(component="your.www.com/your.www.com.TestActivity")
或者
device.startActivity(component="your.www.com/.TestActivity")
此時能夠向模擬器發送如按鍵、滾動、、儲存等操作了。
運行一個adb shell命令,並返回結果。假設有的話
device.shell("...")
暫停眼下正在執行的程式指定的秒數
MonkeyRunner.sleep(秒數。浮點數)
擷取裝置的屏蔽緩衝區。產生了整個顯示器的屏蔽捕獲。()
result=device.takeSnapshot()
返回一個MonkeyImage對象(點陣圖封裝),我們能夠用下面命令將圖儲存到檔案
result.writeToFile(‘takeSnapshot\\result1.png‘,‘png‘)
寫檔案MonkeyImage
MonkeyImage.writeToFile(參數1:輸出檔案名稱,也能夠包含路徑,參數2:目標格式)
寫成功返回true,否則返回false
鍵盤上的類型指定的字串。這相當於要求每一個字串中的字元按(鍵碼。DOWN_AND_UP).
字串發送到鍵盤
device.type(‘字串‘)
喚醒裝置螢幕(在裝置螢幕上喚醒)
device.wake()
又一次引導到指定的引導程式指定的裝置
device.reboot()
=========================================================
在指定位置發送觸摸事件(x,y的單位為像素)
device.touch(x,y,TouchPressType-觸摸事件類型)
發送到指定鍵的一個關鍵事件
device.press(參數1:鍵碼,參數2:觸摸事件類型)
參數1:見android.view.KeyEvent
參數2。如有TouchPressType()返回的類型-觸摸事件類型,有三種。
1、DOWN 發送一個DOWN事件。
指定DOWN事件類型發送到裝置,相應的按一個鍵或觸控螢幕幕上。
2、UP 發送一個UP事件。指定UP事件類型發送到裝置,相應釋放一個鍵或從螢幕上抬起。
3、DOWN_AND_UP 發送一個DOWN事件,然後一個UP事件。相應於輸入鍵或點擊螢幕。
以上三種事件做為press()或touch()參數。原英文例如以下:
use this with the type argument of press() or touch() to send a down event.
為了類比輸入鍵,發送DOWN_AND_UP。
參數1的部分詳細內容邏輯:
按下HOME鍵 device.press(‘KEYCODE_HOME‘,MonkeyDevice.DOWN_AND_UP)
按下BACK鍵 device.press(‘KEYCODE_BACK‘,MonkeyDevice.DOWN_AND_UP)
按下下導航鍵 device.press(‘KEYCODE_DPAD_DOWN‘,MonkeyDevice.DOWN_AND_UP)
按下上導航鍵 device.press(‘KEYCODE_DPAD_UP‘,MonkeyDevice.DOWN_AND_UP)
按下OK鍵 device.press(‘KEYCODE_DPAD_CENTER‘,MonkeyDevice.DOWN_AND_UP)
device.press(‘KEYCODE_ENTER‘,MonkeyDevice.DOWN_AND_UP)#輸入斷行符號
device.press(‘KEYCODE_BACK‘,MonkeyDevice.DOWN_AND_UP)#點擊返回
home鍵 KEYCODE_HOME
back鍵 KEYCODE_BACK
send鍵 KEYCODE_CALL
end鍵 KEYCODE_ENDCALL
上導航鍵 KEYCODE_DPAD_UP
下導航鍵 KEYCODE_DPAD_DOWN
左導航 KEYCODE_DPAD_LEFT
右導航鍵 KEYCODE_DPAD_RIGHT
ok鍵 KEYCODE_DPAD_CENTER
上音量鍵 KEYCODE_VOLUME_UP
下音量鍵 KEYCODE_VOLUME_DOWN
power鍵 KEYCODE_POWER
camera鍵 KEYCODE_CAMERA
menu鍵 KEYCODE_MENU
許多其他:http://developer.android.com/reference/android/view/KeyEvent.html
Android自己的自動化測試Monkeyrunner和用法樣本