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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Monkey随机性能压测初探(一)

發(fā)布時間:2025/3/15 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Monkey随机性能压测初探(一) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Monkey介紹

Monkey程序由Android系統(tǒng)自帶,是Android SDK提供的一個命令行工具, 可運行Android模擬器和實體設(shè)備上。Monkey會發(fā)送偽隨機的用戶事件流,通過Monkey程序模擬用戶觸摸屏幕、滑動、 按鍵等操作來對程序進(jìn)行壓力測試,檢測多長時間發(fā)生異常、會Crash、以及內(nèi)存泄露檢測可稱為隨機測試或穩(wěn)定性測試。

Monkey 命令啟動方式: ?

a)可以通過PC機CMD窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來進(jìn)行Monkey測試?

b)在PC上adb shell 進(jìn)入Android系統(tǒng),通過執(zhí)行 monkey {+命令參數(shù)} 來進(jìn)行Monkey 測試 ? ?

c ) ?在Android機或者模擬器上直接執(zhí)行monkey 命令,可以在Android機上安裝Android終端模擬器

Monkey框架

Monkey命令基本參數(shù)

-p

用此參數(shù)指定一個或多個包。指定包之后,monkey將只允許系統(tǒng)啟動指定的app。如果丌指定包, monkey將允許系統(tǒng)啟動設(shè)備中的所有app。

指定一個包:adb shell monkey -p com.shjt.map 100 ??

指定多個包:adb shell monkey -p fishjoy.control.menu ?–p com.shjt.map ?100 ?

-v

用亍指定反饋信息級別(信息級別就是日志的詳細(xì)程度),總共分3個級別,分別對應(yīng)的參數(shù)如下 表所示:?

Level 0 ?: ?adb shell monkey -p com.shjt.map -v 100 ? ? ? ? ? ? ? // 缺省值,僅提供啟動提示、測試完成和最終結(jié)果等少量信息 ??

Level 1 ?: ?adb shell monkey -p com.shjt.map -v ?-v 100 ? ? ? ? ?// 提供較為詳細(xì)的日志,包括每個發(fā)送到Activity的事件信息

Level 2 ?: ?adb shell monkey -p com.shjt.map -v ?-v ?-v 100 ? ? // 最詳細(xì)的日志,包括了測試中選中/未選中的Activity信息

—s隨機數(shù)種子(沒有指定此值會默認(rèn)生成一個seed)

用亍指定偽隨機數(shù)生成器的seed值,如果seed相同,則兩次Monkey測試所產(chǎn)生的事件序列也相同的。 ?示例:

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環(huán)境

2、手機連接電腦,開啟開發(fā)者模式和調(diào)試模式

3、adb devices查看設(shè)備連接情況

4、進(jìn)入要測試的app,查看包名

adb shell dumpsys window | findstr mCurrentFocus

adb shell dumpsys window w |findstr \/ |findstr name=

5、向app發(fā)送一些事件

向app發(fā)送10個隨機事件,adb shell monkey -p com.rabbit.doctor -v 10 ? ?僅提供啟動提示、測試完成和最終結(jié)果等少量信息

向app發(fā)送10個隨機事件,adb shell monkey -p com.rabbit.doctor -v -v 10 ?提供較為詳細(xì)的日志,包括每個發(fā)送到Activity的事件信息

向app發(fā)送10個隨機事件,adb shell monkey -p com.docrab.pro -v -v -v 10 ?最詳細(xì)的日志,包括了測試中選中/未選中的Activity信息

指定一個seed值-s 10,相同的seed值執(zhí)行的操作相同 ? adb shell monkey -p com.rabbit.doctor -v -s 10 10

向app發(fā)送100個隨機事件,每個事件間隔3秒 adb shell monkey -p com.docrab.pro --throttle 3000 -v -v -v ?50

向app發(fā)送10個隨機事件,并保存至路徑下adb shell monkey -p com.rabbit.doctor -v 10 >c:\monkeylog.txt

向指定設(shè)備device壓測 ? adb -s emulator-5554 shell monkey -p your.www.com -v 500 ?-s 加 device ? emulator-5554?

6、測試結(jié)果展示

C:\Windows\system32>adb shell monkey -p com.docrab.pro -v 100? ? ? ? ? ? ? ? ? ? ?//p表示指定測試程序,v表示monkey生成的詳細(xì)隨機事件名,100事件數(shù)

: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%? ? ? ? ? ? ? ? ? ??//表示跳轉(zhuǎn)到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)? ? ? ? ? ? ??//發(fā)送的一些動作,如點擊按下,點擊放開,移動。

: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? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??//完成次數(shù)

:Sending rotation degree=0, persist=false

:Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0? ? ? ? ? ? ?//丟棄的,鍵=0,指針=2,軌跡球=0,翻轉(zhuǎn)=0。

## Network stats: elapsed time=327ms (0ms mobile, 0ms wifi, 327ms not connected)? ? ??//花費時間

// Monkey finished? ? ? ? ? ??//完成

?

Monkey日志分析

1、正常情況, ?如果Monkey測試順利執(zhí)行完成, 在log的最后, 會打印出當(dāng)前執(zhí)行事件的次數(shù)和所花費的時間; // Monkey finished 代表執(zhí)行完成\

2、異常情況? ??

Monkey 測試出現(xiàn)錯誤后,一般的分析步驟?

看Monkey的日志 (注意第一個swith以及異常信息等)

? ? ? ? ? 1. 程序無響應(yīng)的問題: 在日志中搜索 “ANR”,ANR: Application Not Responding 應(yīng)用程序無響應(yīng)。ANR一般有以下三種類型:

? ? ? ? ? ? ? ? ? ? ? ? ??1:KeyDispatchTimeout(5 seconds) --主要類型:按鍵或觸摸事件在特定時間內(nèi)無響應(yīng)

? ? ? ? ? ? ? ? ? ? ? ? ??2:BroadcastTimeout(10 seconds):BroadcastReceiver在特定時間內(nèi)無法處理完成

? ? ? ? ? ? ? ? ? ? ? ? ??3:ServiceTimeout(20 seconds) --小概率類型:Service在特定的時間內(nèi)無法處理完成

? ? ? ? ? ? ? ? ? ? ? ? ?

此外當(dāng)ANR問題發(fā)生后我們可以使用adb pull命令(此命令無需root權(quán)限)從被測設(shè)備的/data/anr目錄下導(dǎo)出名為traces.txt的對應(yīng)log文件。例子: adb pull /data/anr/traces*.txt > C:\ ??

? ? ? ? ? ? 2. 崩潰問題搜索 “CRASH”? ? ?

? ? ? ? ? ? ?3、異常問題搜索 “Exception”(如果出現(xiàn)空指針, NullPointerException,需格外重視,肯定有bug)。

? ? ? ? ? ? ?

? ? ? ? ? ? ? ?4、內(nèi)存泄露問題搜索"GC"(需進(jìn)一步分析)

? ? ? ? ? ? ? ? ? ? ? 1、當(dāng)手機提示Out of Memory(內(nèi)存不足)時基本確定有內(nèi)存泄露的問題。

? ? ? ? ? ? ? ? ? ? ? 2、當(dāng)查看logcat時有GC字段,可能有內(nèi)存泄露問題。

? ? ? ? ? ? ? ??與GC相關(guān)的字段有如下四個:

? ? ? ? ? ? ? ??GC_FOR_ALLOC 在分配內(nèi)存時內(nèi)存不夠引發(fā)

? ? ? ? ? ? ? ? GC_EXPLICIT 表明GC被顯式請求觸發(fā)的,如System.gc調(diào)用

? ? ? ? ? ? ? ? GC_CONCURRENT, 表明GC在內(nèi)存使用率達(dá)到一定的警戒值時,自動觸發(fā)

? ? ? ? ? ? ? ? GC_BEFORE_OOM, 表明在虛擬機拋出內(nèi)存不夠異常OOM之前,執(zhí)行最后一次回收內(nèi)存垃圾

?當(dāng)出現(xiàn)內(nèi)存泄露問題時可以加上--hprof參數(shù)再執(zhí)行一次monkey測試,便可獲得對應(yīng)的profiling報告。

如果指定了這個選項,monkey會在發(fā)送時間的前后生成app內(nèi)存快照文件,一般會在手機設(shè)備的/data/misc目錄下生成hprof的文件?!?data/misc ?需要root權(quán)限,可以在手機上安裝個RE查看或通過手機助手查看

? ? ? ? ? ? ? ??

BUG實例1:

BUG實例2:

?

?

adb指令:

關(guān)閉adb服務(wù) ?adb kill-server

開啟adb服務(wù) ?adb start-server

上傳文件:
adb push <本地文件><遠(yuǎn)程路徑> 例:adb push d:\3.txt storage/sdcard

下載文件:
adb pull <遠(yuǎn)程路徑><本地路徑> 例:adb pull storage/sdcard/3.txt d:\

輸出調(diào)試的信息:adb bugreport

?

android list targets ?#顯示系統(tǒng)中全部android平臺

adb install -r 應(yīng)用程序.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āng)前日志輸出到d盤的sss.log中

?

打印日志保存下來

adb logcat | find "com.koubeigongzuo.ck" >C:/logg.txt

實時監(jiān)控對應(yīng)app日志

adb logcat | find "com.koubeigongzuo.ck"

實時監(jiān)控對應(yīng)app報錯日志

adb logcat *:E | find "com.koubeigongzuo.ck"

顯示所有優(yōu)先級大于等于錯誤(Error)的日志

adb logcat *:E

顯示所有優(yōu)先級大于等于嚴(yán)重錯誤的日志

adb logcat *:F

查看安卓版本號

adb shell pm dump com.koubeigongzuo.ck | findstr "versionName

apk的應(yīng)用信息、版本信息

adb shell dumpsys package com.koubeigongzuo.ck

獲取應(yīng)用執(zhí)行時的內(nèi)存等相關(guān)信息

adb shell dumpsys meminfo com.koubeigongzuo.ck

點擊

adb shell input tap 250 250

滑動

adb shell input swipe 250 250 300 300

總結(jié)

以上是生活随笔為你收集整理的Monkey随机性能压测初探(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。