Monkey随机性能压测初探(一)
Monkey介紹
Monkey程序由Android系統自帶,是Android SDK提供的一個命令行工具, 可運行Android模擬器和實體設備上。Monkey會發送偽隨機的用戶事件流,通過Monkey程序模擬用戶觸摸屏幕、滑動、 按鍵等操作來對程序進行壓力測試,檢測多長時間發生異常、會Crash、以及內存泄露檢測可稱為隨機測試或穩定性測試。
Monkey 命令啟動方式: ?
a)可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試?
b)在PC上adb shell 進入Android系統,通過執行 monkey {+命令參數} 來進行Monkey 測試 ? ?
c ) ?在Android機或者模擬器上直接執行monkey 命令,可以在Android機上安裝Android終端模擬器
Monkey框架
Monkey命令基本參數
-p
用此參數指定一個或多個包。指定包之后,monkey將只允許系統啟動指定的app。如果丌指定包, monkey將允許系統啟動設備中的所有app。
指定一個包:adb shell monkey -p com.shjt.map 100 ??
指定多個包:adb shell monkey -p fishjoy.control.menu ?–p com.shjt.map ?100 ?
-v
用亍指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別,分別對應的參數如下 表所示:?
Level 0 ?: ?adb shell monkey -p com.shjt.map -v 100 ? ? ? ? ? ? ? // 缺省值,僅提供啟動提示、測試完成和最終結果等少量信息 ??
Level 1 ?: ?adb shell monkey -p com.shjt.map -v ?-v 100 ? ? ? ? ?// 提供較為詳細的日志,包括每個發送到Activity的事件信息
Level 2 ?: ?adb shell monkey -p com.shjt.map -v ?-v ?-v 100 ? ? // 最詳細的日志,包括了測試中選中/未選中的Activity信息
—s隨機數種子(沒有指定此值會默認生成一個seed)
用亍指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。 ?示例:
monkey測試1:adb shell monkey -p com.shjt.map –s 10 100
monkey測試2:adb shell monkey -p com.shjt.map –s 10 100
—throttle毫秒
每個事件的間隔時間3000毫秒
例:adb shell monkey -p com.shjt.map --throttle 3000 100 ??
?
實時測試
1、配好sdk、adb環境
2、手機連接電腦,開啟開發者模式和調試模式
3、adb devices查看設備連接情況
4、進入要測試的app,查看包名
adb shell dumpsys window | findstr mCurrentFocus
adb shell dumpsys window w |findstr \/ |findstr name=
5、向app發送一些事件
向app發送10個隨機事件,adb shell monkey -p com.rabbit.doctor -v 10 ? ?僅提供啟動提示、測試完成和最終結果等少量信息
向app發送10個隨機事件,adb shell monkey -p com.rabbit.doctor -v -v 10 ?提供較為詳細的日志,包括每個發送到Activity的事件信息
向app發送10個隨機事件,adb shell monkey -p com.docrab.pro -v -v -v 10 ?最詳細的日志,包括了測試中選中/未選中的Activity信息
指定一個seed值-s 10,相同的seed值執行的操作相同 ? adb shell monkey -p com.rabbit.doctor -v -s 10 10
向app發送100個隨機事件,每個事件間隔3秒 adb shell monkey -p com.docrab.pro --throttle 3000 -v -v -v ?50
向app發送10個隨機事件,并保存至路徑下adb shell monkey -p com.rabbit.doctor -v 10 >c:\monkeylog.txt
向指定設備device壓測 ? adb -s emulator-5554 shell monkey -p your.www.com -v 500 ?-s 加 device ? emulator-5554?
6、測試結果展示
C:\Windows\system32>adb shell monkey -p com.docrab.pro -v 100? ? ? ? ? ? ? ? ? ? ?//p表示指定測試程序,v表示monkey生成的詳細隨機事件名,100事件數
:Monkey: seed=1510018290134 count=100? ? ? ? ? ? ? ?//開始未指定時,隨機生成的seed值
:AllowPackage: com.docrab.pro? ? ? ? ? ? ? ? ?//包名
:IncludeCategory: android.intent.category.LAUNCHER
:IncludeCategory: android.intent.category.MONKEY
// Event percentages:? ? ? ? ? ? ? ? ? ??//各種事件占的比例
// ? 0: 15.0%
// ? 1: 10.0%
// ? 2: 2.0%
// ? 3: 15.0%
// ? 4: -0.0%
// ? 5: -0.0%
// ? 6: 25.0%
// ? 7: 15.0%
// ? 8: 2.0%
// ? 9: 2.0%
// ? 10: 1.0%
// ? 11: 13.0%? ? ? ? ? ? ? ? ? ??//表示跳轉到com.example.android.apis 里面的ApiDemos這一個Activity里。
:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.docrab.pro/com.squareup.leakcanary.internal.DisplayLeakActivity;end
? ? ? ? // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.docrab.pro/com.squareup.leakcanary.internal.DisplayLeakActivity } in package com.docrab.pro
:Sending Touch (ACTION_DOWN): 0:(501.0,218.0)
? ? ??// Injection Failed
:Sending Touch (ACTION_UP): 0:(492.16553,221.75143)
? ? ?// Injection Failed
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0)? ? ? ? ? ? ??//發送的一些動作,如點擊按下,點擊放開,移動。
:Sending Trackball (ACTION_UP): 0:(0.0,0.0)
:Sending Touch (ACTION_DOWN): 0:(462.0,51.0)
:Sending Touch (ACTION_UP): 0:(377.56924,0.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,-1.0)
:Sending Touch (ACTION_DOWN): 0:(451.0,1139.0)
:Sending Touch (ACTION_UP): 0:(445.72433,1140.6277)
:Sending Touch (ACTION_DOWN): 0:(717.0,464.0)
:Sending Touch (ACTION_UP): 0:(720.0,483.52737)
:Sending Trackball (ACTION_MOVE): 0:(-4.0,3.0)
:Sending Trackball (ACTION_UP): 0:(0.0,0.0)
:Sending Touch (ACTION_DOWN): 0:(684.0,69.0)
:Sending Touch (ACTION_UP): 0:(691.5189,169.68057)
:Sending Touch (ACTION_DOWN): 0:(376.0,1005.0)
:Sending Touch (ACTION_UP): 0:(382.10815,1030.8892)
Events injected: 100? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??//完成次數
:Sending rotation degree=0, persist=false
:Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0? ? ? ? ? ? ?//丟棄的,鍵=0,指針=2,軌跡球=0,翻轉=0。
## Network stats: elapsed time=327ms (0ms mobile, 0ms wifi, 327ms not connected)? ? ??//花費時間
// Monkey finished? ? ? ? ? ??//完成
?
Monkey日志分析
1、正常情況, ?如果Monkey測試順利執行完成, 在log的最后, 會打印出當前執行事件的次數和所花費的時間; // Monkey finished 代表執行完成\
2、異常情況? ??
Monkey 測試出現錯誤后,一般的分析步驟?
看Monkey的日志 (注意第一個swith以及異常信息等)
? ? ? ? ? 1. 程序無響應的問題: 在日志中搜索 “ANR”,ANR: Application Not Responding 應用程序無響應。ANR一般有以下三種類型:
? ? ? ? ? ? ? ? ? ? ? ? ??1:KeyDispatchTimeout(5 seconds) --主要類型:按鍵或觸摸事件在特定時間內無響應
? ? ? ? ? ? ? ? ? ? ? ? ??2:BroadcastTimeout(10 seconds):BroadcastReceiver在特定時間內無法處理完成
? ? ? ? ? ? ? ? ? ? ? ? ??3:ServiceTimeout(20 seconds) --小概率類型:Service在特定的時間內無法處理完成
? ? ? ? ? ? ? ? ? ? ? ? ?
此外當ANR問題發生后我們可以使用adb pull命令(此命令無需root權限)從被測設備的/data/anr目錄下導出名為traces.txt的對應log文件。例子: adb pull /data/anr/traces*.txt > C:\ ??
? ? ? ? ? ? 2. 崩潰問題搜索 “CRASH”? ? ?
? ? ? ? ? ? ?3、異常問題搜索 “Exception”(如果出現空指針, NullPointerException,需格外重視,肯定有bug)。
? ? ? ? ? ? ?
? ? ? ? ? ? ? ?4、內存泄露問題搜索"GC"(需進一步分析)
? ? ? ? ? ? ? ? ? ? ? 1、當手機提示Out of Memory(內存不足)時基本確定有內存泄露的問題。
? ? ? ? ? ? ? ? ? ? ? 2、當查看logcat時有GC字段,可能有內存泄露問題。
? ? ? ? ? ? ? ??與GC相關的字段有如下四個:
? ? ? ? ? ? ? ??GC_FOR_ALLOC 在分配內存時內存不夠引發
? ? ? ? ? ? ? ? GC_EXPLICIT 表明GC被顯式請求觸發的,如System.gc調用
? ? ? ? ? ? ? ? GC_CONCURRENT, 表明GC在內存使用率達到一定的警戒值時,自動觸發
? ? ? ? ? ? ? ? GC_BEFORE_OOM, 表明在虛擬機拋出內存不夠異常OOM之前,執行最后一次回收內存垃圾
?當出現內存泄露問題時可以加上--hprof參數再執行一次monkey測試,便可獲得對應的profiling報告。
如果指定了這個選項,monkey會在發送時間的前后生成app內存快照文件,一般會在手機設備的/data/misc目錄下生成hprof的文件。【/data/misc ?需要root權限,可以在手機上安裝個RE查看或通過手機助手查看
? ? ? ? ? ? ? ??
BUG實例1:
BUG實例2:
?
?
adb指令:
關閉adb服務 ?adb kill-server
開啟adb服務 ?adb start-server
上傳文件:
adb push <本地文件><遠程路徑> 例:adb push d:\3.txt storage/sdcard
下載文件:
adb pull <遠程路徑><本地路徑> 例:adb pull storage/sdcard/3.txt d:\
輸出調試的信息:adb bugreport
?
android list targets ?#顯示系統中全部android平臺
adb install -r 應用程序.apk ?#安裝apk程序
adb push D:Test.apk/syste/app/ ? #安裝apk程序
adb push D:file.txt/system/temp/ ? #向手機寫入文件
adb pull /system/temp/ D:file.txt ?#從手機獲取文件
adb logcat ?#查看日志
adb logcat | find "com.rabbit.doctor" >c:\hello.txt ?#記錄日志到電腦上
adb logcat -v time > ?d:/sss.log ? #當前日志輸出到d盤的sss.log中
?
打印日志保存下來
adb logcat | find "com.koubeigongzuo.ck" >C:/logg.txt
實時監控對應app日志
adb logcat | find "com.koubeigongzuo.ck"
實時監控對應app報錯日志
adb logcat *:E | find "com.koubeigongzuo.ck"
顯示所有優先級大于等于錯誤(Error)的日志
adb logcat *:E
顯示所有優先級大于等于嚴重錯誤的日志
adb logcat *:F
查看安卓版本號
adb shell pm dump com.koubeigongzuo.ck | findstr "versionName
apk的應用信息、版本信息
adb shell dumpsys package com.koubeigongzuo.ck
獲取應用執行時的內存等相關信息
adb shell dumpsys meminfo com.koubeigongzuo.ck
點擊
adb shell input tap 250 250
滑動
adb shell input swipe 250 250 300 300
總結
以上是生活随笔為你收集整理的Monkey随机性能压测初探(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 生物大分子的计算机模拟就业,生物大分子模
- 下一篇: 教师进修学校计算机教学反思,优秀教学反思