monkeyrunner一個簡單的教程.docx_第1頁
monkeyrunner一個簡單的教程.docx_第2頁
monkeyrunner一個簡單的教程.docx_第3頁
monkeyrunner一個簡單的教程.docx_第4頁
monkeyrunner一個簡單的教程.docx_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Android自動測試之monkeyrunner工具 monkeyrunner工具前言:最近開始研究Android自動化測試方法,對其中的一些工具、方法和框架做了一些簡單的整理,其中包括android測試框架、CTS、Monkey、Monkeyrunner、benchmark、其它test tool等等。因接觸時間很短,很多地方有不足之處,希望能和大家多多交流。一、什么是monkeyrunnermonkeyrunner工具提供了一個API,使用此API寫出的程序可以在Android代碼之外控制Android設備和模擬器。通過monkeyrunner,您可以寫出一個Python程序去安裝一個Android應用程序或測試包,運行它,向它發(fā)送模擬擊鍵,截取它的用戶界面圖片,并將截圖存儲于工作站上。monkeyrunner工具的主要設計目的是用于測試功能/框架水平上的應用程序和設備,或用于運行單元測試套件,但您當然也可以將其用于其它目的。二、monkeyrunner工具同Monkey工具的差別Monkey:Monkey工具直接運行在設備或模擬器的adbshell中,生成用戶或系統(tǒng)的偽隨機事件流。monkeyrunner:monkeyrunner工具則是在工作站上通過API定義的特定命令和事件控制設備或模擬器。三、monkeyrunner的測試類型1、多設備控制:monkeyrunner API可以跨多個設備或模擬器實施測試套件。您可以在同一時間接上所有的設備或一次啟動全部模擬器(或統(tǒng)統(tǒng)一起),依據(jù)程序依次連接到每一個,然后運行一個或多個測試。您也可以用程序啟動一個配置好的模擬器,運行一個或多個測試,然后關閉模擬器。2、 功能測試: monkeyrunner可以為一個應用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數(shù)值,然后觀察輸出結果的截屏。3、 回歸測試:monkeyrunner可以運行某個應用,并將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩(wěn)定性。 4、 可擴展的自動化:由于monkeyrunner是一個API工具包,您可以基于Python模塊和程序開發(fā)一整套系統(tǒng),以此來控制Android設備。除了使用monkeyrunner API之外,您還可以使用標準的Python os和subprocess模塊來調用Android Debug Bridge這樣的Android工具。四、運行monkeyrunner您可以直接使用一個代碼文件運行monkeyrunner,抑或在交互式對話中輸入monkeyrunner語句。不論使用哪種方式,您都需要調用SDK目錄的tools子目錄下的monkeyrunner命令。如果您提供一個文件名作為運行參數(shù),則monkeyrunner將視文件內(nèi)容為Python程序,并加以運行;否則,它將提供一個交互對話環(huán)境。monkeyrunner的命令語法為:monkeyrunner -plugin 五、實例以sample中的ApiDemos為例,先將其生成ApiDemos.apk。前提:已有device連接1、 將ApiDemos.apk放在$Android_Roottools下。2、 在$Android_Roottools下新建一個monkeyrunnerprogram.py文件,里面內(nèi)容為: 1 # Imports the monkeyrunner modules used by this program 2 3 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 4 5 # Connects to the current device, returning a MonkeyDevice object 6 7 device = MonkeyRunner.waitForConnection() 8 9 # Installs the Android package. Notice that this method returns a boolean, so you can test10 11 # to see if the installation worked.12 13 device.installPackage(./ApiDemos.apk)14 15 16 # Runs the component17 18 device.startActivity(component=com.example.android.apis/.ApiDemos)19 20 21 # Presses the Menu button22 23 device.press(KEYCODE_MENU,DOWN_AND_UP)24 25 26 # Takes a screenshot27 28 result = device.takeSnapshot()29 30 31 # Writes the screenshot to a file32 33 result.writeToFile(./shot1.png,png)注意:SDK上的例子有些錯誤,不可直接復制,否則執(zhí)行命令時會發(fā)生錯誤。具體可與我的上面這段代碼對照。3、 打開命令行轉到Android_Roottools目錄下運行一下命令:monkeyrunner monkeyrunnerprogram.py110307 15:33:19.625:I main com.android.monkeyrunner.MonkeyManager Monkey Command: wake.110307 15:33:20.625:I main com.android.monkeyrunner.MonkeyManager Monkey Command: wake.110307 15:33:21.625:I main com.android.monkeyrunner.MonkeyManager Monkey Command: wake.110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice Error starting command: monkey -port 12345110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevicecom.android.ddmlib.ShellCommandUnresponsiveException110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at com.android.ddmlib.Device.executeShellCommand(Device.java:276)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at com.android.monkeyrunner.adb.AdbMonkeyDevice$1.run(AdbMonkeyDevice.java:89)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at java.util.concurrent.Executors$RunnableAdapter.call(UnknownSource)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at java.util.concurrent.FutureTask.run(Unknown Source)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at java.util.concurrent.ThreadPoolExecutor$Worker.run(UnknownSource)110307 15:33:22.718:S pool-1-thread-1 com.android.monkeyrunner.adb.AdbMonkeyDevice at java.lang.Thread.run(UnknownSource)110307 15:33:57.437:I main com.android.monkeyrunner.MonkeyManager Monkey Command: press KEYCODE_MENU.110307 15:33:59.171:I main com.android.monkeyrunner.MonkeyManager Monkey Command: quit.注:里面exception的提示我們可以忽略,因為我們可以看見Monkey Command: press KEYCODE_MENU已經(jīng)執(zhí)行成功。4、 可以Android_Roottools下查看生成的shot1.png的截圖。六、實例擴展因為ApiDemos首頁上按下MENU鍵沒有菜單出現(xiàn),為了更加形象化,在實例五的基礎上繼續(xù)試驗:1、 在$Android_Roottools下新建一個monkeyrunnerprogram1.py文件,里面內(nèi)容為: 1 # Imports the monkeyrunner modules used by this program 2 3 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage 4 5 # Connects to the current device, returning a MonkeyDevice object 6 7 device = MonkeyRunner.waitForConnection() 8 9 # Takes a screenshot10 11 result = device.takeSnapshot()12 13 # Writes the screenshot to a file14 15 result.writeToFile(./shotbegin.png,png)16 17 # Presses the Down button18 19 device.press(KEYCODE_DPAD_DOWN,DOWN_AND_UP)20 21 device.press(KEYCODE_DPAD_DOWN,DOWN_AND_UP)22 23 device.press(KEYCODE_DPAD_DOWN,DOWN_AND_UP)24 25 device.press(KEYCODE_DPAD_DOWN,DOWN_AND_UP)26 27 device.press(KEYCODE_DPAD_DOWN,DOWN_AND_UP)28 29 # Takes a screenshot30 31 result = device.takeSnapshot()32 33 # Writes the screenshot to a file34 35 result.writeToFile(./sho

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論