日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android測试APP工具(一)

發布時間:2024/4/14 Android 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android測试APP工具(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? 近期面試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工具(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。