Android自己的自动化测试Monkeyrunner和用法示例
眼下android SDK在配有現(xiàn)成的測試工具monkey 和 monkeyrunner兩。
也許我們不看一樣的兄弟名字。但事實是完全跑了兩個完全不同的工具。在測試的不同區(qū)域的應(yīng)用程序。總體,monkey主要用于壓力和可靠性測試,擬鍵盤事件流。而且能夠自定義發(fā)送的次數(shù),以此觀察被測應(yīng)用程序的穩(wěn)定性和可靠性。應(yīng)用起來也比較簡單,記住那幾個命令即可了。而monkeyrunner呢,相比之下會強大一些,它主要可應(yīng)用于功能測試。回歸測試。而且能夠自定義測試擴展,靈活性較強。而且測試人員能夠全然控制。
本篇乃本人學(xué)習(xí)monkeyrunner時筆記。查看網(wǎng)絡(luò)中的資料并經(jīng)本人測試而出,因為本人剛接觸,所以本篇內(nèi)容不免膚淺。高手們請繞走~
在測試本人下面實例時。請自行搭建Android環(huán)境。
一、打開模擬器
執(zhí)行monkeyrunner之前必須先執(zhí)行對應(yīng)的模擬器。不然monkeyrunner無法連接設(shè)備。
用Elipse打開Android模擬器或在CMD中用Android命令打開模擬器。這里重點講一下在CMD中用Android命令打開模擬器
命令:emulator -avd test (注意:test為虛擬設(shè)備的名稱——AVD的全稱為:Android Virtual Device,就是Android執(zhí)行的虛擬設(shè)備,例如以下圖所看到的:)
上面命令中的test是模擬器名稱。
使用時須要改成實際名字。
?
?
假設(shè)正常,模擬器應(yīng)該能夠啟動起來了。
假設(shè)運行的結(jié)果出現(xiàn)下面錯誤內(nèi)容:
PANIC: Could not open: C:\Documents and Settings\sAdministrator\.android/avd/test.ini例如以下圖所看到的:
原因在于你的環(huán)境變量缺少配置。請在“系統(tǒng)變量”中加入“ANDROID_SDK_HOME”,設(shè)置其值為“C:\Documents and Settings\Administrator”(注意:這里的值不能為C:\Documents and Settings\Administrator\.android),例如以下圖所看到的:
確定后,關(guān)閉CMD窗體。又一次打開CMD。運行以上命令。
將會啟用模擬器。
模擬器啟動成功后,我們?nèi)栽贑MD環(huán)境中操作。如今進(jìn)入monkeyrunner的shell命令交互模式。
命令:monkeyrunner
進(jìn)入shell命令交互模式后,首要一件事就是導(dǎo)入monkeyrunner所要使用的模塊。直接在shell命令下輸入:
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice 回車
OK,這步完畢我們就能夠利用monkeyrunner進(jìn)行測試工作了。
這里有兩種方案,一是直接在shell命令下輸入下面命令。
命令說明
device=MonkeyRunner.waitForConnection() #連接手機設(shè)備
device.installPackage("../samples/android-10/ApiDemos/bin/Apidemos.apk") #安裝apk包到手機設(shè)備。
啟動當(dāng)中的隨意activity了,僅僅要傳入package和activity名稱就可以。命令例如以下:
device.startActivity(component="com.example.android.apis/com.example.android.apis.ApiDemos")
此時模擬器會自己主動打開ApiDemos這個應(yīng)用程序的主頁。
device.reboot() #手機設(shè)備重新啟動
device.touch(300,300,'DOWN_AND_UP')
MonkeyRunner.alert("hello")#在emulator上會彈出消息提示
device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)
device.type('hello')#向編輯區(qū)域輸入文本'hello'
二是將下面命令寫到python文件中。比如test.py,然后我們再從命令行直接通過monkeyrunner執(zhí)行它就可以。比方。我們還是用上面的樣例,語法例如以下:monkeyrunner test.py 接下來monkeyrunner會自己主動調(diào)用test.py。并執(zhí)行當(dāng)中的語句。相當(dāng)方便。
實例:test.py
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice device=MonkeyRunner.waitForConnection() device.startActivity(component="your.www.com/your.www.com.TestActivity")在CMD中運行
monkeyrunner test.py
可能出現(xiàn)錯誤“Can't open specified script file”,例如以下圖所看到的:
原因在于python腳本文件路徑不對。
你能夠有下面解決的方法:
1、將test.py文件存放到monkeyrunner文件同一文件夾中。能夠運行:monkeyrunner test.py 調(diào)用
2、指定python文件位置。假設(shè)test.py文件在D盤根文件夾下,能夠這樣運行:monkeyrunner d:\test.py
學(xué)習(xí)筆記
以下是學(xué)習(xí)中的筆記,有點亂。就放在本篇最后吧。
環(huán)境變量
變量名: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設(shè)備和模擬器,我們能夠?qū)懸粋€python程序?qū)ndroid應(yīng)用程序或測試包進(jìn)行安裝、執(zhí)行、發(fā)送模擬擊鍵。對用戶界面進(jìn)行截圖并將截圖存儲在workstation上等操作。monkeyrunner工具的主要設(shè)計目的是用于測試application/framework層上的應(yīng)用程序和設(shè)備、或用于執(zhí)行單元測試套件,也能夠用于其他目的。
monkey工具,是直接執(zhí)行在設(shè)備或模擬器的adb shell中,生成用戶或系統(tǒng)的偽隨機事件流。
monkeyrunner為android測試提供了下面獨特的功能:
1、多設(shè)備控制:monkeyrunner API能夠跨多個設(shè)備或模擬器實施測試套件。能夠在同一時間接上所有設(shè)備或一次啟動所有模擬器,根據(jù)程序依次連接到每個,然后執(zhí)行一個或多個測試。也能夠用程序啟動一個配置好的模擬器。執(zhí)行一個或多個測試。然后關(guān)閉模擬器。
2、功能測試:monkeyrunner能夠為一個應(yīng)用自己主動貫徹一次功能測試。
您提供按鍵或觸摸事件的輸入數(shù)值,然后觀察輸出結(jié)果的截屏。
4、回歸測試:monkeyrunner能夠執(zhí)行某個應(yīng)用。并將其結(jié)果截屏與既定已知正確的結(jié)果截屏相比較,以此測試應(yīng)用的穩(wěn)定性。
4、可擴展的自己主動化:因為monkeyrunner是一個API工具包,我們能夠開發(fā)基于python模塊和程式的一整套系統(tǒng),以此來控制android設(shè)備。除了使用monkeyrunner API,我們還能夠使用標(biāo)準(zhǔn)的python os和ubprocess模塊來調(diào)用android debug bridge這種android工具。如ADB這種android工具。也能夠?qū)⒆约簩懙念惣尤氲絤onkeyrunner API中。
執(zhí)行monkeyrunner
能夠直接使用一個代碼文件執(zhí)行monkeyrunner。抑或在交互式對話中輸入monkeyrunner語句。
不論使用哪種方式,你都須要調(diào)用SDK文件夾的tools子文件夾下的monkeyrunner命令。
假設(shè)提供一個文件名稱作為執(zhí)行參數(shù)。則monkeyrunner將視文件內(nèi)容為python程序。并加以執(zhí)行;否則。它將提供一個交互對話環(huán)境。
monkeyrunner命令語法
monkeyrunner -plugin <plugin_jar> <programe_filename> <programe_option>
monkeyrunner API
主要包含三個模塊
1、MonkeyRunner:這個類提供了用于連接monkeyrunner和設(shè)備或模擬器的方法。它還提供了用于創(chuàng)建用戶界面顯示提供了方法。
2、MonkeyDevice:代表一個設(shè)備或模擬器。
這個類為安裝和卸載包、開啟Activity、發(fā)送按鍵和觸摸事件、執(zhí)行測試包等提供了方法。
3、MonkeyImage:這個類提供了捕捉屏幕的方法。這個類為截圖、將位圖轉(zhuǎn)換成各種格式、對照兩個MonkeyImage對象、將image保存到文件等提供了方法。
注意:在執(zhí)行monkeyrunner之前必須先執(zhí)行對應(yīng)的模擬器,否則monkeyrunner無法連接到設(shè)備
執(zhí)行模擬器有兩種方法:1、通過eclipse中執(zhí)行模擬器 2、在CMD中通過命令調(diào)用模擬器
這里介紹通過命令,在CMD中運行模擬器的方法
命令:emulator -avd test
上面命令中test是指模擬器的名稱。
導(dǎo)入須要的模塊
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
假設(shè)給導(dǎo)入的模塊起了別名。就應(yīng)該使用別名,而不能使用原名,否則會出現(xiàn)錯誤。
比方連接設(shè)備或模擬器,起了以上別名后。命令應(yīng)該例如以下:
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()
#等待連接到設(shè)備。與模擬器連接。返回monkeydevice對象,代表連接的設(shè)備。
沒有報錯的話說明連接成功。
參數(shù)1:超時時間。單位秒,浮點數(shù)。默認(rèn)是無限期地等待。
參數(shù)2:串deviceid,指定的設(shè)備名稱。默覺得當(dāng)前設(shè)備(手機優(yōu)先,比方手機通過USB線連接到PC、其次為模擬器)。
默認(rèn)連接:device=MonkeyRunner.waitForConnection()
參數(shù)連接:device = mr.waitForConnection(1.0,'emulator-5554')
向設(shè)備或模擬器安裝要測試的APK
device.installPackage('myproject/bin/MyApplication.apk') #參數(shù)是相對或絕對APK路徑
路徑級別用“/”,不能用“\”。比方d:\www\a.apk,而應(yīng)該寫成d:/www/a.apk
成功安裝返回true,此時查看模擬器我們能夠在IDLE界面上看到安裝的APK的圖標(biāo)了。
從設(shè)備中刪除指定的軟件包,包含其相關(guān)的數(shù)據(jù)和調(diào)整緩存
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")
此時能夠向模擬器發(fā)送如按鍵、滾動、截圖、存儲等操作了。
運行一個adb shell命令,并返回結(jié)果。假設(shè)有的話
device.shell("...")
暫停眼下正在執(zhí)行的程序指定的秒數(shù)
MonkeyRunner.sleep(秒數(shù)。浮點數(shù))
獲取設(shè)備的屏蔽緩沖區(qū)。產(chǎn)生了整個顯示器的屏蔽捕獲。(截圖)
result=device.takeSnapshot()
返回一個MonkeyImage對象(點陣圖包裝),我們能夠用下面命令將圖保存到文件
result.writeToFile('takeSnapshot\\result1.png','png')
寫文件MonkeyImage
MonkeyImage.writeToFile(參數(shù)1:輸出文件名稱,也能夠包含路徑,參數(shù)2:目標(biāo)格式)
寫成功返回true,否則返回false
鍵盤上的類型指定的字符串。這相當(dāng)于要求每一個字符串中的字符按(鍵碼。DOWN_AND_UP).
字符串發(fā)送到鍵盤
device.type('字符串')
喚醒設(shè)備屏幕(在設(shè)備屏幕上喚醒)
device.wake()
又一次引導(dǎo)到指定的引導(dǎo)程序指定的設(shè)備
device.reboot()
=========================================================
在指定位置發(fā)送觸摸事件(x,y的單位為像素)
device.touch(x,y,TouchPressType-觸摸事件類型)
發(fā)送到指定鍵的一個關(guān)鍵事件
device.press(參數(shù)1:鍵碼,參數(shù)2:觸摸事件類型)
參數(shù)1:見android.view.KeyEvent
參數(shù)2。如有TouchPressType()返回的類型-觸摸事件類型,有三種。
1、DOWN 發(fā)送一個DOWN事件。
指定DOWN事件類型發(fā)送到設(shè)備,相應(yīng)的按一個鍵或觸摸屏幕上。
2、UP 發(fā)送一個UP事件。指定UP事件類型發(fā)送到設(shè)備,相應(yīng)釋放一個鍵或從屏幕上抬起。
3、DOWN_AND_UP 發(fā)送一個DOWN事件,然后一個UP事件。相應(yīng)于輸入鍵或點擊屏幕。
以上三種事件做為press()或touch()參數(shù)。原英文例如以下:
use this with the type argument of press() or touch() to send a down event.
為了模擬輸入鍵,發(fā)送DOWN_AND_UP。
參數(shù)1的部分詳細(xì)內(nèi)容邏輯:
按下HOME鍵 device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)?
按下BACK鍵 device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)?
按下下導(dǎo)航鍵 device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP)?
按下上導(dǎo)航鍵 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?
上導(dǎo)航鍵 KEYCODE_DPAD_UP?
下導(dǎo)航鍵 KEYCODE_DPAD_DOWN?
左導(dǎo)航 KEYCODE_DPAD_LEFT?
右導(dǎo)航鍵 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
轉(zhuǎn)載于:https://www.cnblogs.com/hrhguanli/p/4589704.html
總結(jié)
以上是生活随笔為你收集整理的Android自己的自动化测试Monkeyrunner和用法示例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AngularJs ngIf、ngSwi
- 下一篇: android 4.4 生僻字,Andr