Monkey 入門指南

Monkey 入門指南

  • 一、monkey環境搭建
  • 1.1下載adb工具

操作步驟:

第一步:進入鏈接https://www.androiddevtools.cn/#下載下圖中的包

第二步:解壓壓縮包

1.2配置環境變量

操作步驟:

第一步:右擊我的電腦,查看屬性,然後在彈出的界面點擊“高級系統設置”

第二步:點擊“環境變量”

 

第三步:找到path,點擊編輯按鈕

第四步:點擊新建,添加platform-tools的路徑到環境變量,如下圖所示

第五步:點擊確定按鈕並退出

 

1.3環境驗證

1.3.1adb環境驗證

操作步驟:

第一步:打開cmd,輸入adb

 

第二步:輸入adb monkey

 

1.3.2連接真機

使用前提:

1 手機是可以正常使用的

2 使用的數據線必須是可以傳輸數據的(比如:購買充電寶所贈送的數據線只可以充電,不支持數據傳輸)

 

操作步驟:
第一步:usb剛連手機時會有彈窗“是否允許訪問手機數據”,點擊允許,打開通知導航欄,會顯示“使用usb傳輸文件”,如果不是,則手動選擇;

 

                               

第二步:打開開發者選項中的允許usb調試,安卓各機型開啓開發者選項的方式不同,可根據自己的機型百度。

第三步:在cmd中輸入adb devices,如果顯示出設備名稱,則連接真機成功;

  1.3.3連接模擬器

 

下載地址:https://www.yeshen.com/pg/yeshen

 

安裝完之後的使用步驟如下:

第一步:打開夜神多開器

第二步:點擊“添加模擬器”,設置不同的安卓系統版本

第三步:啓動模擬器

第四步:在cmd下使用adb devices 驗證模擬器是否可用

  • 二、monkey的簡單介紹及使用

2.1 什麼是monkey

Monkey是Android中的一個命令行工具,通過Monkey程序模擬用戶觸摸屏幕、滑動、按鍵等操作來對應用程序進行壓力測試,檢測程序多久的時間會發生異常。

2.2 monkey測試的三個特點

Monkey測試,所有的事件都是隨機產生的,不帶任何人的主觀性。monkey測試有以下三個特點:

第一、測試的對象僅爲應用程序包,有一定的侷限性。

第二、Monky測試使用的事件數據流是隨機的,不能進行自定義。

第三、可對MonkeyTest的對象,事件數量,類型,頻率等進行設置。

 

2.3 monkey的運行

用法:adb shell monkey -p package.name -v times

分析:

 -p表示對象包

 –v 表示日誌級別

package.name 表示apk的包名

times 表示運行次數

實例:

運行方法一:在cmd下直接運行monkey命令:

adb shell monkey -p com.youdao.calculator -v 10

 

運行方法二:

adb shell

monkey -p com.youdao.calculator -v 10

 

備註:使用exit可以退出adb shell

 

備註:使用時推薦把monkey日誌保存下來,日誌保存參考4.1

2.4 如何找apk包名

2.4.1 使用aapt

aapt是sdk自帶的一個工具,在sdk\builds-tools\目錄下,本例子以xsteach.apk包爲例子。

操作步驟:

第一步:在sdk\builds-tools\目錄下進入cmd窗口

第二步:在cmd下運行aapt dump badging D:\apktools\xsteach.apk

第三步:找到apk的包名:com.xsteach.appedu

2.4.2 使用apktools

Apktools下載地址:

鏈接:https://pan.baidu.com/s/1bxEpXLicpw3MKFhPqJX_gw

提取碼:76cv

下載完直接使用,操作步驟如下:
步驟一:在apktools目錄下打開cmd

步驟二:在cmd下運行aapt dump badging xsteach.apk

步驟三:找到apk的包名:com.xsteach.appedu

  • 三、monkey的常用參數

我們可以使用adb shell monkey -help  查看monkey有哪些命令參數,如果下圖所示:

3.1 參數: -p

用於約束限制,用此參數指定一個或多個包(Package,即App)。指定包之後,monkey將只允許系統啓動指定的APP,如果不指定包,將允許系統啓動設備中的所有APP.

* 指定一個包: adb shell monkey -p com.android.calendar 10

* 指定多個包:adb shell monkey -p com.android.calendar –p com.baidu.browser.apps -p com.tencent.wstt.gt 100

* 不指定包:adb shell monkey 100

3.2 參數:   -v

用於指定反饋信息級別(信息級別就是日誌的詳細程度),總共分3個級別,分別對應的參數如下表所示:

日誌級別 Level0

示例 adb shell monkey -p com.android.calendar –v 10

說明缺省值,僅提供啓動提示、測試完成和最終結果等少量信息

日誌級別 Level 1

示例 adb shell monkey -p com.android.calendar –v -v 10

說明提供較爲詳細的日誌,包括每個發送到Activity的事件信息

日誌級別 Level 2

示例 adb shell monkey -p com.android.calendar –v -v –v 10

說明最詳細的日誌,包括了測試中選中/未選中的Activity信息

3.3 參數: -s

用於指定僞隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。

Monkey 測試1:adb shell monkey -p com.android.calendar -s 10  100

Monkey 測試2:adb shell monkey -p com.android.calendar –s 10 100

兩次測試的效果是相同的,因爲模擬的用戶操作序列(每次操作按照一定的先後順序所組成的一系列操作,即一個序列)是一樣的。

3.4 延時參數: --throttle<毫秒>

用於指定用戶操作(即事件)間的時延,單位是毫秒;

adb shell monkey -p com.android.calendar --throttle 2000 10

 備註:每隔2s執行一個隨機流時間,方便定位分析可能是在哪個屏幕出現crash

3.5 事件參數: --pct-{+事件類別}{+事件類別百分比}

11種事件:觸摸事件、手勢事件、二指縮放事件、軌跡事件、屏幕旋轉事件、基本導航事件、主要導航事件、系統按鍵事件、啓動Activity事件、鍵盤事件、其他類型事件。

用於指定每種類別事件的數目百分比(在Monkey事件序列中,該類事件數目佔總事件數目的百分比)
示例:

3.5.1 觸摸事件

--pct-touch{+百分比}
調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置)

adb shell monkey -p com.android.calenda --pct-touch 10 100

3.5.2 手勢事件

--pct-motion {+百分比}
調整手勢事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的僞隨件機事和一個up事件組成)

adb shell monkey -p com.youdao.calculator --pct-motion 20 10

3.5.3 二指縮放事件

--pct-pinchzoom {+百分比}
調整二指縮放事件的百分比(二指縮放事件即智能機上的放大縮小手勢操作)

adb shell monkey -p com.youdao.calculator --pct-pinchzoom 30 10

3.5.4 軌跡事件

--pct-trackball {+百分比}
調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊)

adb shell monkey -p com.youdao.calculator --pct-trackball 30 10

3.5.5屏幕旋轉事件

--pct-rotation {+百分比}
調整屏幕旋轉事件的百分比(橫屏和豎屏)

adb shell monkey -p com.youdao.calculator --pct-rotation 40 10

3.5.6 “基本”導航事件

--pct-nav {+百分比}
調整“基本”導航事件的百分比(導航事件由來自方向輸入設備的up/down/left/right組成)

adb shell monkey -p com.youdao.calculator --pct-nav 40 10

3.5.7“主要”導航事件

--pct-majornav {+百分比}
調整“主要”導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵)

adb shell monkey -p com.youdao.calculator --pct-majornav 50 10

3.5.8 “系統”按鍵事件

--pct-syskeys {+百分比}
調整“系統”按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵)

adb shell monkey -p com.youdao.calculator --pct-syskeys 50 10

3.5.9 啓動Activity的百分比

--pct-appswitch {+百分比}
調整啓動Activity的百分比(在隨機間隔裏,Monkey通過調用startActivity方法最大限度地開啓該package下的全部Activity的一種方法)

adb shell monkey -p com.youdao.calculator --pct-appswitch 50 10

3.5.10 鍵盤事件

--pct-flip {+百分比}
調整鍵盤事件的百分比(鍵盤事件如點擊輸入框、鍵盤彈起、點擊輸入框以外區域、鍵盤收回等)

adb shell monkey -p com.youdao.calculator --pct-flip 50 10

3.5.11 其他類型事件

--pct-anyevent {+百分比}
調整其他類型事件的百分比(包羅了所有其他類型的時間,如按鍵、其他不常用的設備按鈕等)

adb shell monkey -p com.youdao.calculator --pct-anyevent 50 10

3.6 調試類參數:

通過調試類命令,可以對Monkey進行一些簡單的調試,可以快速定位Monkey執行過程中的一些問題。如果用戶想監控應用程序所調用的包之間的轉換,則可以用 –dbg-no-events參數;如果用戶想監控內存泄露,可以用—hprof參數。

3.6.1 –dbg-no-events

設置此選項,Monkey將執行初始啓動,進入一個測試Activity,不會再進一步生成事件。爲了得到最佳結果,把它與-v、一個或幾個包約束,以及一個保持Monkey運行30秒或更長事件的非零值聯合起來,從而提供一個可以監視應用程序所調用的包之間的轉換的環境

 

3.6.2 –hprof

將在事件執行之前和執行之後生成內存快照文件存放在手機的data/misc目錄。通過對比執行前後的內存快照文件,可以協助定位內存泄露問題。由於內存快照文件比較大,所有要小心使用。

3.6.3 參數: --ignore-crashes

用於指定當應用程序崩潰時(Force& Close錯誤),Monkey是否停止運行。如果使用此參數,即使應用程序崩潰,Monkey依然會發送事件,直到事件計數完成。

adb shell monkey -p com.youdao.calculatorr --ignore-crashes 10

測試過程中即使程序崩潰,Monkey依然會繼續發送事件直到事件數目達到10爲止

adb shell monkey -p com.youdao.calculator 10

測試過程中,如果app程序崩潰,Monkey將會停止運行

3.6.4 參數: --ignore-timeouts

用於指定當應用程序發生超時錯誤,如ANR(Application No Responding)錯誤時,Monkey是否停止運行。如果使用此參數,即使應用程序發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成。

adb shell monkey -p com.youdao.calculator --ignore-timeouts 10

 

3.6.5 參數: --ignore-security-exceptions

用於指定當應用程序發生許可錯誤時(如證書許可,網絡許可等),Monkey是否停止運行。如果使用此參數,即使應用程序發生許可錯誤,Monkey依然會發送事件,直到事件計數完成。

adb shell monkey -p com.youdao.calculator --ignore-security-exceptions 10

3.6.6 參數: --kill-process-after-error

用於指定當應用程序發生錯誤時,是否停止其運行。

當Monkey由於一個錯誤而停止時,出錯的app將繼續處於運行狀態。

如果指定此參數,Monkey將會通知系統停止發生錯誤的進程。

(注意:應用程序僅是靜止在發生錯誤時的狀態,系統並不會結束該應用程序的進程)。

adb shell monkey -p com.youdao.calculator --kill-process-after-error 10

3.6.7 參數: --monitor-native-crashes

用於指定是否監視並報告應用程序發生崩潰的本地代碼。

adb shell monkey -p com.youdao.calculator --monitor-native-crashes 10

3.6.8  --wait-dbg

停止執行中的Monkey,直到有調試器和它相連接

3.7 官方隱藏類參數

3.7.1 –pkg-blacklist-file<黑名單文件>

限制Monkey不測試於指定黑名單文檔中記錄的包。

若沒有指定這個參數,Monkey將執行系統內所有的包。

3.7.2 –pkg-whitelist-file<白名單文件>

限制Monkey只測試於指定白名單文檔中記錄的包。

若沒有指定這個參數,Monkey將執行系統內所有的包。

3.7.3 –f

指定Monkey執行用戶自定義的腳本文件

  • 四、Monkey日誌分析

4.1 保存日誌到指定目錄

4.1.1 保存到PC中

adb shell monkey -p com.youdao.calculator -v 100 >>d:\monkeylog.txt

 

-p :對象包

包名:com.youdao.calculator

-v :日誌級別

運行次數:1000

4.1.2 保存到手機中

第一步:在cmd下使用adb shell

第二步:monkey -p com.youdao.calculator -v 1000 > /mnt/sdcard/monkeylog.txt

-p :對象包

包名:com.youdao.calculator

-v :日誌級別

運行次數:1000

 

4.1.3 標準流和錯誤流分開保存

第一步:在cmd下使用adb shell

第二步:monkey -p com.youdao.calculator -v 1000 > /mnt/sdcard/monkeylog.txt > /sdcard/error.txt

-p :對象包

包名:com.youdao.calculator

-v :日誌級別

運行次數:1000

4.2 monkey日誌內容分析

4.2.1測試命令信息

 

#測試的命令信息

Events injected: 100

 

## Network stats: elapsed time=1186ms (0ms mobile, 0ms wifi, 1186ms not connected)

#隨機種子值,執行事件數量

:Monkey: seed=1568209983751 count=100

#運行的應用

:AllowPackage: com.youdao.calculator

#Category包含LAUNCHER和MONKEY

: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: 25.0%

 

//   6: 15.0%

 

//   7: 2.0%

 

//   8: 2.0%

 

//   9: 1.0%

 

//   10: 13.0%

 

 

4.2.2 僞隨機流事件信息

#啓動app事件

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.youdao.calculator/.activities.MainActivity;end

 

    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.youdao.calculator/.activities.MainActivity } in package com.youdao.calculator

 

#具體執行的動作、以及座標位置

:Sending Touch (ACTION_DOWN): 0:(655.0,235.0)

 

:Sending Touch (ACTION_UP): 0:(623.27386,154.98427)

 

:Sending Trackball (ACTION_MOVE): 0:(-5.0,4.0)

 

:Sending Touch (ACTION_DOWN): 0:(240.0,402.0)

 

:Sending Touch (ACTION_UP): 0:(219.07697,402.69543)

 

4.2.3 異常信息

 

4.2.4 如何判斷是否成功運行

4.2.4.1 判斷成功

//執行的事件數量

Events injected: 100000

//旋轉的角度爲0

:Sending rotation degree=0, persist=false

//丟失的事件數量

:Dropped: keys=0 pointers=160 trackballs=0 flips=0 rotations=0

//網絡狀態(移動網0ms,wifi網絡0ms,未連接359261ms)

## Network stats: elapsed time=359261ms (0ms mobile, 0ms wifi, 359261ms not connected)

// Monkey finished

 

4.2.4.2 判斷失敗

//顯示Monkey執行失敗

** Monkey aborted due to error.

//執行的事件數量

Events injected: 190

//丟失的事件數量

:Dropped: keys=0 pointers=11 trackballs=0 flips=0

//網絡狀態

## Network stats: elapsed time=27954ms (27954ms mobile, 0ms wifi, 0ms not connected)

//提示在執行到第190個事件時出現崩潰,用的種子隨機數是0

** System appears to have crashed at event 190 of 200 using seed 0

 

如果在執行monkey的過程中,出現Crash or ANR,error.txt中會顯示錯誤日誌。

五、如何重現異常

5.1 分析

排查步驟:

第一步:通過monkey找到是app的哪個模塊出錯(推薦使用延時參數throttle,這樣可以肉眼看到在哪個界面出現crash)

第二步:查看Monkey裏面出錯前的一些事件動作,並手動執行該動作

第三步:若以上步驟還不能找出,可以使用之前執行的monkey命令再執行一遍,注意seed值要一樣,方便重現

 

一般的測試結果分析:

1、ANR問題:在日誌中搜索“ANR”

2、崩潰問題:在日誌中搜索“Exception”  Force Close

5.2 安卓常見的crash場景

Crash關鍵字

Crash原因

java.lang.NullPointerException

空指針異常

java.lang.ArrayIndexOutofBoundsException

數組溢出

java.lang.ClassNotFoundException

類不存在

java.lang.ArithmeticException

數學運算異常

java.lang.IllegalArgumentException

方法參數異常

java.io.FileNotFoundException

文件未找到

java.lang.NumberFormatException

數值轉化異常

java.lang.StackOverflowError

堆棧異常錯誤

java.lang.OutOfMemoryError

內存溢出錯誤

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章