Android測試APP工具(一)

來源:互聯網
上載者:User

標籤:測試   自動化測試   測試載入器   效能測試   單元測試   

        最近面試APP開發人員的時候,遇到了技術總監問 APP測試的概念性問題,後面感覺基本的項目流程、項目邏輯、螢幕適配、

測試是完全沒有問題的,但是對於APP的效能測試、壓力測試等高端的測試,還是存在著美中不足之處呀,畢竟是搞專業的APP開發

人員。但是,自己追求APP開發的流程是永不止境的,所以下定決心去瞭解深挖一下APP的測試,餓補一下APP的高端測試流程及其常

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

架、CTS、Monkey、Monkeyrunner、benchmark、其它test tool等等。因接觸時間很短,很多地方有不足之處,希望能和大家多多交

流。下面先瞭解一個常用的測試載入器:

一、什麼是monkeyrunner
monkeyrunner工具提供了一個API,使用此API寫出的程式可以在Android代碼之外控制Android裝置和模擬器。通過monkeyrunner,您可以寫出一個Python程式去安裝一個Android應用程式或測試包,運行它,向它發送類比擊鍵,截取它的使用者介面圖片,並將儲存於工作站上。monkeyrunner工具的主要設計目的是用於測試功能/架構水平上的應用程式和裝置,或用於運行單元測試套件,但您當然也可以將其用於其它目的。

二、monkeyrunner工具同Monkey工具的差別
Monkey:
Monkey工具直接運行在裝置或模擬器的adb shell中,產生使用者或系統的偽隨機事件流。
monkeyrunner:
monkeyrunner工具則是在工作站上通過API定義的特定命令和事件控制裝置或模擬器。

三、monkeyrunner的測試類型
1、多裝置控制:monkeyrunner API可以跨多個裝置或模擬器實施測試套件。您可以在同一時間接上所有的裝置或一次啟動全部模擬器(或統統一起),依據程式依次串連到每一個,然後運行一個或多個測試。您也可以用程式啟動一個配置好的模擬器,運行一個或多個測試,然後關閉模擬器。
2、 功能測試: monkeyrunner可以為一個應用自動貫徹一次功能測試。您提供按鍵或觸摸事件的輸入數值,然後觀察輸出結果的截屏。
3、 迴歸測試:monkeyrunner可以運行某個應用,並將其結果截屏與既定已知正確的結果截屏相比較,以此測試應用的穩定性。
4、 可擴充的自動化:由於monkeyrunner是一個API工具包,您可以基於Python模組和程式開發一整套系統,以此來控制Android裝置。除了使用monkeyrunner API之外,您還可以使用標準的Python os和subprocess模組來調用Android Debug Bridge這樣的Android工具。

四、運行monkeyrunner
您可以直接使用一個代碼檔案運行monkeyrunner,抑或在互動式對話中輸入monkeyrunner語句。不論使用哪種方式,您都需要調用SDK目錄的tools子目錄下的monkeyrunner命令。如果您提供一個檔案名稱作為運行參數,則monkeyrunner將視檔案內容為Python程式,並加以運行;否則,它將提供一個互動對話環境。
monkeyrunner的命令文法為:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

五、執行個體
以sample中的ApiDemos為例,先將其產生ApiDemos.apk。
前提:已有device串連
1、 將ApiDemos.apk放在$Android_Root\tools下。
2、 在$Android_Root\tools下建立一個monkeyrunnerprogram.py檔案,裡面內容為:

                    # Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# 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(‘./ApiDemos.apk‘)
# Runs the component
device.startActivity(component=‘com.example.android.apis/.ApiDemos‘)
# Presses the Menu button
device.press(‘KEYCODE_MENU‘,‘DOWN_AND_UP‘)
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile(‘./shot1.png‘,‘png‘)

3、 開啟命令列轉到Android_Root\tools目錄下運行一下命令:

monkeyrunner monkeyrunnerprogram.py

110307 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 12345

110307 15:33:22.718:S [pool-1-thread-1] [com.android.monkeyrunner.adb.AdbMonkeyDevice]com.android.ddmlib.ShellCommandUnresponsiveException

110307 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已經執行成功。

      4、 可以Android_Root\tools下查看產生的shot1.png的。

六、執行個體擴充

      因為ApiDemos首頁上按下MENU鍵沒有菜單出現,為了更加形象化,在執行個體五的基礎上繼續實驗:

      1、 在$Android_Root\tools下建立一個monkeyrunnerprogram1.py檔案,裡面內容為:

                    # Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection()
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile(‘./shotbegin.png‘,‘png‘)
# Presses the Down button
device.press(‘KEYCODE_DPAD_DOWN‘,‘DOWN_AND_UP‘)
device.press(‘KEYCODE_DPAD_DOWN‘,‘DOWN_AND_UP‘)
device.press(‘KEYCODE_DPAD_DOWN‘,‘DOWN_AND_UP‘)
device.press(‘KEYCODE_DPAD_DOWN‘,‘DOWN_AND_UP‘)
device.press(‘KEYCODE_DPAD_DOWN‘,‘DOWN_AND_UP‘)
# Takes a screenshot
result = device.takeSnapshot()
# Writes the screenshot to a file
result.writeToFile(‘./shotend.png‘,‘png‘)


2、  將畫面定位在Apidemos的首頁,並將游標定位在第一項上。
3、  在$Android_Root\tools目錄下運行一下命令:
monkeyrunner monkeyrunnerprogram1.py

      

Android測試APP工具(一)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.