1. 程式人生 > >Android自動化測試之Monkeyrunner使用方法及例項

Android自動化測試之Monkeyrunner使用方法及例項

目前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,MonkeyDevice
device=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使用方法例項

目前android SDK裡自帶的現成的測試工具有monkey 和 monkeyrunner兩個。大家別看這倆兄弟名字相像,但其實是完完全全不同的兩個工具,應用在不同的測試領域。總的來說,monkey主要應用在壓力和可靠性測試上,執行該命令可以隨機地向目標程式傳送各種模擬鍵

android自動化測試MonkeyRunner使用例項(三)

一、使用CMD命令開啟模擬器 執行monkeyrunner之前必須先執行相應的模擬器或連上裝置,不然monkeyrunner無法連線裝置。 1.1  用Elipse開啟Android模擬器或在CMD中用Android命令開啟模擬器。 1.2  這裡重點講一下在CMD

Android自動化測試Monkeyrunner從零開始

控制 麻煩 關於 人員 bsp android開發 直接 記錄 自動 最近由於公司在組織一個Free CoDE的項目,也就是由大家自己選擇研究方向來做一些自己感興趣的研究。由於之前我學過一點點關於android的東西,並且目前android開發方興未艾如火如荼,但自動化測試

Android自動化測試——MonkeyRunner(1)

一、MonkeyRunner是什麼 MonkeyRunner是使用Jython(使用Java程式語言實現的Python)寫出來的,它提供了多個API,通過monkeyrunner API 可以寫一個Python的程式來模擬操作控制Android裝置app,測試其穩定性並通過截圖可以方便地記錄出現的問題。

Android自動化測試——MonkeyRunner(2)

一、MonkeyRunner API MonkeyRunner API包含了三個模組在com.android.monkeyruner包中: 1、MonkeyRunner 一類用於MonkeyRunner程式的實用方法。該類提供了一種將MonkeyRunner連線到裝置或模擬器的方法。它還提供了為monk

Android自動化測試——MonkeyRunner(3)

本文主要介紹MonkeyDevice的方法。 上文中,使用MonkeyRunner方法連線裝置並返回一個MonkeyDevice物件,使用該物件呼叫MonkeyDevice方法可實現對裝置的操作。主要包括:點選、拖拽、截圖、按鍵、輸入內容 一、常量 MonkeyDevice的touch()、press(

Android自動化測試Monkeyrunner 指令碼編寫

# File:   Test1.py# Vision: V1.0# Author: Findyou# 引入本程式所用到的模組from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage# 連線手機裝置device = 

Android-自動化測試MonkeyRunner教程(詳細)

# File:   Test1.py# Vision: V1.0# Author: Findyou# 引入本程式所用到的模組from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage# 連線手機裝置device

Android自動化測試Monkeyrunner解決ID重複問題

原文: 時光過得太快了,一晃離上一篇monkeyrunner系列的部落格已經一年多了。這一年多時間經歷了太多改變,一直沒時間好好去總結和分享。直到今天在微博上和朋友聊到monkeyrunner,才想起趁這個機會再總結一下之前所積累的一些經驗和技巧,在這裡再次和大家分享下

Android自動化測試遇到的問題解決方法(1)

粘貼 png family 學習 再次 jmeter log 初始 mage 編者按:本文是小小小提姆在使用自動化測試工具TestWriter時的一點使用心得~我叫小小小提姆,是一名在IT行業的洪流中力爭上遊的軟件測試員,個人軟件測試擅長方向:1、功能測試(熟悉Fiddle

android自動化測試單元測試例項 .

這樣,在啟動程式的時候就會先啟動一個Application,然後在此Application執行過程中根據情況載入相應的 Activity,而Activity是需要一個介面的。但是Instrumentation並不是這樣的。你可以將Instrumentation理解為一種沒有圖形介面的,具有啟動能力的,用於監控

Android自動化測試Monkey使用

      Mokey是Android中的一個命令列工具,可以執行在模擬器裡或實際裝置中。它向系統傳送偽隨機的使用者事件流(如按鍵輸入、觸控式螢幕輸入、手勢輸入等),實現對正在開發的應用程式進行壓力

python自動化測試setUp與tearDown例項

class RomanNumeralConverter(object): def __init__(self): self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I":1}

android 自動化測試Robotium 測試apk時遇到的問題

1.執行測試工程時提示:         Test run failed: Permission Denial: starting instrumentation ComponentInfo{com.example.androidcalculator.test/andro

Android自動測試monkeyrunner工具

monkeyrunner工具  前言: 最近開始研究Android自動化測試方法,對其中的一些工具、方法和框架做了一些簡單的整理,其中包括android測試框架、CTS、Monkey、Monkeyrunner、benchmark、其它test tool等等。因接觸時間

android自動化測試--appium執行的坑問題解決方法

問題 1. error: Failed to start an Appium session, err was: Error: Requested a new session but one was in progress   之前的會話沒有關閉,然後你又運行了測試例項,也沒有設定覆蓋.  解決:  1.

Android自動化測試工具MonkeyRunner

                                          monkeyrunner工具  前言: 最近開始研究Android自動化測試方法,對其中的一些工具、方法和框架做了一些簡單的整理,其中包括android測試框架、CTS、Monke

android 自動化測試案例 MonkeyScript

時間 運行 nbsp speed sources patch html 搜索功能 net #文件名 MonkeyScript.mks #功能: 使用monkey script測試app,此案例是測試搜索功能(輸入關鍵字,然後點擊搜索按鈕)#參考: http://blog.

Android 測試 MonkeyRunner

The bsp 目的 基於 connect 結束 什麽 交互式 screen 一、什麽是MonkeyRunner monkeyrunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設備和模擬器。通過monkeyrunner,您

Android自動化測試手段Monkey(adb shell monkey)

android monkey原始碼下載見:http://fanfq.iteye.com/blog/781694 Monkeyrunner在這裡:http://www.51testing.com/html/59/n-242759.html ================