- Monkey是Android SDK提供的一個命令行工具,可以簡單方便的發(fā)送偽隨機(jī)的用戶事件流,對Android APP做壓力(穩(wěn)定性)測試。主要是為了測試app是否存在exception,error,crash,nar等情況。目前在某些Android應(yīng)用平臺,新版app發(fā)布時,平臺會執(zhí)行monkey,如果有crash等相關(guān)問題,會被打回。
安裝sdk后,可在命令行通過 adb shell monkey 查看可用命令
2.monkey常用參數(shù)說明:
<colgroup><col><col></colgroup>
| 基本參數(shù) | 說明 |
| -p <allowed-package-name> | 指定一個或多個包 |
| -s <seed> | 指定一個隨機(jī)數(shù)生成器的seed值 |
| --throttle <milliseconds> | 指定事件之間的固定延遲(ms) |
| -v | 指定反饋信息級別(信息級別就是日志的詳細(xì)程度) |
| -c <main-category> | 指定一個或多個類別名 |
| -f <scriptfile> | 運行指定的monkey腳本 |
<colgroup><col><col></colgroup>
| 事件參數(shù) | 說明 |
| --pct-touch <percent> | 指定觸摸事件百分比 |
| --pct-motion <percent> | 指定動作事件百分比 |
| --pct-trackball <percent> | 指定軌跡事件百分比 |
| --pct-syskeys <percent> | 指定系統(tǒng)按鍵事件百分比 |
| --pct-nav <percent> | 指定基本導(dǎo)航事件百分比 |
| --pct-majornav <percent> | 指定主要導(dǎo)航事件百分比 |
| --pct-appswitch <percent> | 指定應(yīng)用啟動事件百分比 |
| --pct-flip <percent> | 指定flip(彈)事件的百分比 |
| --pct-anyevent <percent> | 指定其他類型事件百分比 |
| --pct-pinchzoom <percent> | 指定縮放(捏)事件百分比 |
| --pct-permission <percent> | 指定 |
<colgroup><col><col></colgroup>
| 調(diào)試參數(shù) | 說明 |
| --ignore-crashes | 忽略因崩潰或異常引起的停止運行 |
| --ignore-timeouts | 忽略應(yīng)用發(fā)生超時錯誤(ANR) |
| --ignore-security-exceptions | 忽略應(yīng)用發(fā)生任何權(quán)限錯誤 |
| --monitor-native-crashes | 監(jiān)視并報告monkey運行時native code的崩潰事件 |
| --ignore-native-crashes | 忽略因native code的崩潰事件 |
| --kill-process-after-error | 在應(yīng)用出錯后通知系統(tǒng)殺死發(fā)生錯誤的進(jìn)程 |
| --hprof | 在事件序列前后立即生成profilfing report |
| --dbg-no-events | 監(jiān)視應(yīng)用程序所調(diào)用的包之間的轉(zhuǎn)換 |
| --wait-dbg | 暫停執(zhí)行中的monkey,直到有調(diào)試器與它連接 |
3.使用真機(jī)環(huán)境針對皮皮Android客戶端進(jìn)行monkey測試
A.開啟手機(jī)調(diào)試模式,通過USB連接電腦,查看是否連接成,可以使用adb devices命令
B.關(guān)閉手機(jī)下拉通知欄,鎖定手機(jī)界面(視機(jī)型而定,操作方式不一樣),避免測試工程中切出app,影響測試結(jié)果。
C.執(zhí)行monkey測試,使用腳本命名如下,參數(shù)請參照上面參數(shù)說明理解。
adb shell monkey -p com.chudiangameplay.android -s 10086 --pct-touch 70 --pct-motion 30 --ignore-crashes --ignore-timeouts --monitor-native-crashes --throttle 200 -v -v -v 50000 >D:\monkeylog\20200525.log
4.日志分析
日志分析可手動在日志中搜索crashes 、crashes 、error等內(nèi)容,查看對應(yīng)區(qū)域日志。
日志量較大,可使用如下提供的bat腳本,分析對應(yīng)日志文件。
@ECHO OFF
ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
ECHO.:: 分析Monkey日志 ::
ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
REM 方法一:手動設(shè)置Monkey日志路徑
SET monkeyLogFile=D:\monkeylog\20200525.log
REM 方法二:直接將Monkey日志拖到此bat文件上
IF NOT "%1"=="" SET monkeyLogFile=%1
ECHO.[ INFO ] Monkey日志: %monkeyLogFile%
ECHO.[ INFO ] 開始分析
SET blnException=0
ECHO.
ECHO.
::ANR日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO (
SET strANR=%%a
)
::崩潰日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO (
SET strCRASH=%%a
)
::異常日志
FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO (
SET strException=%%a
)
::正常
FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO (
SET strFinished=%%a
)
IF NOT "%strANR%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: ANR
ECHO.[ INFO ] ------------------------------------
ECHO. "%strANR%"
SET /a blnException+=1
ECHO.
)
IF NOT "%strCRASH%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: CRASH
ECHO.[ INFO ] ------------------------------------
ECHO. "%strCRASH%"
SET /a blnException+=1
ECHO.
)
IF NOT "%strException%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: 異常
ECHO.[ INFO ] ------------------------------------
ECHO. "%strException%"
SET /a blnException+=1
)
IF NOT "%strFinished%" == "" (
ECHO.[ INFO ] 分析Monkey日志存在: 執(zhí)行成功標(biāo)記
ECHO.[ INFO ] ------------------------------------
ECHO. "%strFinished%"
ECHO.
) ELSE (
IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志結(jié)果: Monkey執(zhí)行異常中斷,請重新執(zhí)行Monkey腳本!
ECHO.
)
REM 如果blnException不為0,說明存在異常,改變字體為淡紫色
IF %blnException% NEQ 0 (
Color 0D
ECHO.[ INFO ] 分析Monkey日志結(jié)果:存在異常日志,請手工再仔細(xì)檢查!
ECHO.
) ELSE (
ECHO.[ INFO ] 分析Monkey日志結(jié)果:正常
ECHO.
)
ECHO.
ECHO.[ EXIT ] 按任意鍵關(guān)閉窗口...
PAUSE>nul