【Android測試】【第九節】MonkeyRunner—— 初識


 版權聲明:本文出自胖喵~的博客,轉載必須注明出處。

      轉載請注明出處:http://www.cnblogs.com/by-dream/p/4836815.html

 

 

      不得不說兩句,過了這么久才再次更新博客,主要原因是工作太忙,而且剛好又參與了很多業余活動,因此基本沒時間去寫,不過我還是決定堅持把我要寫的東西全部寫完,希望能夠幫助到剛剛入門的測試者們。

 

 

 

前言


  本節講解的內容是monkeyrunner,monkeyrunner和monkey同樣都是谷歌研發的測試工具,相比monkey用來做壓力測試而言,monkeyrunner更偏重於點觸式的UI自動化內容,接下來我們看看詳細的內容。

  同樣附上文檔地址,如果實在不願意閱讀,那就先看博客吧。http://www.android-doc.com/tools/help/monkeyrunner_concepts.html

 

 

簡介


  monkeyrunner工具提供了API,使用這個API你可以通過寫Android代碼之外的程序來操作控制Android設備的。通過monkeyrunner,你可以通過寫一個Python的程序來安裝一個Android應用程序、運行該程序,給該程序發送鍵盤事件,截屏並且將截屏的內容保存在工作站中(workstation)。

  monkeyrunner這個工具設計的主要目的是進行功能測試/franmework層的測試,或者用於單元測試套件(unit test suites),當然你也可以自由的使用它的其他用途。

  monkeyrunner和money沒有什么直接的關系,monkey是在設備的直接運行adb shell命令來生成隨機了事件來進行測試的。相比較而言,monkeyrunner則是通過API發送特定的命令和事件通過工作站來控制設備。

 

 

特性


  monkeyrunner為Android測試提供了以下特性:

  多設備控制:monkeyrunner的API可以跨多個設備實施測試套件。你可以同時連接所有的設備或一次啟動全部模擬器,依據程序依次連接到每一個,然后運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試,然后關閉它。

  功能測試:monkeyrunner可以自動的啟動Android程序直到完成測試,這期間你可以提供輸入值和鍵盤操作已經觸摸事件,然后通過截圖來查看結果。

  回歸測試(Regression testing ):monkeyrunner可以運行一個程序,將輸出的截圖與正確的結果截圖相比較,依次來測試程序的穩定性。

  可擴展的自動化(Extensible automation):因為monkeyrunner是一個API工具包,你可以開發基於Python模塊的整個系統來控制Android設備。除了使用monkeyrunner API本身,你還可以使用標准的Python OS和子模塊的調用Android的工具,例如ADB。

  

  monkeyrunner工具用的語言是Jython,使用Java編程語言實現的Python。Jython 運行monkeyrunner的API和Android的框架可以非常便捷的進行交互,使用Jython,你可以使用Python語法來訪問常量,類和API的方法。

 

 

實例


  這里我重新給個例子吧 谷歌給的有點不太直觀 。 我們以QQ為例。

  1、進入到 ..\sdk\tools 的目錄下,運行monkeyrunner

 

 

  2、引入monkeyrunner的包,輸入 "from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice"  敲回車

 

  3、確保qq是關閉的,先運行“device = MonkeyRunner.waitForConnection()”,

     再運行 “device.startActivity(component="com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity") ”,此時可以看到qq被喚起了

    p.s. 如果知道一個任意App的啟動頁的Activity,請點這里

 

  4、模擬按下“菜單鍵” ,運行“device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)”

 

  5、截圖,然后再把它保存到起來。

 

  6、去C盤下去看截圖內容:

  

  這就是monkeyrunner最簡單的命令行的方式來實現啟動App,點擊事件和截屏操作。

 

 

腳本


  當然上面的步驟我們可以將它寫到腳本里,然后去運行這個腳本,前面提到腳本的語言是Python,所以我們就將以下代碼寫到一個Python腳本中。

# 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('/sdcard/qq.apk')

# sets a variable with the package's internal name
package = 'com.tencent.mobileqq'

# sets a variable with the name of an Activity in the package
activity = 'com.tencent.mobileqq.activity.SplashActivity'

# sets the name of the component to start
runComponent = package + '/' + activity

# Runs the component
device.startActivity(component=runComponent)

# Presses the Menu button
MonkeyRunner.sleep(2)
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP) # Takes a screenshot MonkeyRunner.sleep(2)
result = device.takeSnapshot() # Writes the screenshot to a file MonkeyRunner.sleep(2)
result.writeToFile('c:\shot1.png','png')

   

  將腳本內容保存到Python文件qq.py當中。

 

  將腳本放到monkeyrunner的同級目錄下,直接運行“monkeyrunner qq.py”,就可以完成整個過程。

 

  學會了基本用法之后,你就可以根據你們自己的業務,結合monkeyrunner更加豐富的API寫出更加復雜的腳本,通過這種方法來進行運行。

 

 

API


  提供一些常用的API(上面例子中不再贅述了)

  1、指定設備連接:

    等待連接到設備,與模擬器連接,返回monkeydevice對象,代表連接的設備。沒有報錯的話說明連接成功。
    參數1:超時時間,單位秒,浮點數。默認是無限期地等待。
    參數2:串deviceid,指定的設備名稱。
    例子:device = mr.waitForConnection(1.0,'emulator-5554')

  2、運行shell命令:

    執行一個adb shell命令,如果有結果的話,返回結果
    例子:device.shell("...")

  3、喚醒設備:

    例子:device.wake()

  4、給指定位置發送觸摸事件:

    參數1、2:屏幕的橫縱坐標

    參數3:觸摸事件(共三種):DOWN、UP、DOWN_AND_UP

    device.touch(x,y,TouchPressType)

    例子:device.touch(300,200,MonkeyDevice.DOWN_AND_UP)  在屏幕坐標300,200的地方按下並且抬起

  5、發送指定鍵的事件:

    參數1:http://developer.android.com/reference/android/view/KeyEvent.html 例如 KEYCODE_HOME(home鍵),KEYCODE_BACK (back鍵)

    參數2:觸摸事件

    例子:device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP) 按下並抬起home鍵

  

 

  好!monkeyrunner的暫且到此為止,如有疑問,給我留言即可....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM