monkey的基本語法都是:
adb shell monkey -p 包名 執行的數字
monkey是Android中的一個命令行工具,可以運行在模擬器里或實際設備中,他向系統發送偽隨機的用戶時間流(如:按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。
monkey測試是一種為了測試軟件的穩定性、健壯性的快速有效方法。
首先要測試一款APP,需要先知道APP對應的包名是什么,除了可以向開發人家直接獲取,還可以自己獲取。
在安裝SDK的目錄下面找到build-tools,具體路徑E:\android-sdk-windows\build-tools\28.0.3,在輸入框中輸入cmd進入DOS命令

夜神模擬器:
第一種,獲取自己已經有apk的包名:
aapt dump badging +apk存放路徑
aapt dump badging E:\soft\longteng\appium\apk\touchaction.apk

第二種:查看手機上所有APP的包名
輸入adb shell,進入命令后進入目錄data/data
1)adb shell
2)進入手機的 cd data/data
3) ls (需要root)

查看手機或者第三方應用的包名:
adb shell pm list packages -3

真機:
打開開發者選項(小米手機在MUIU中連續點擊)-之后在手機“設置”-“更多設置”中有一個“開發者選項”打開調試的功能
然后win+r,輸入adb devices
如下情況表示連接成功

獲得包名以后就可以操作了:
查看所有參數:
adb shell monkey


1. -p : 指定包名
1) 指定包名對應進行的點擊數操作
adb shell monkey -p 包名 次數
2)指定多個包
adb shell monkey -p 包名1 -p 包名2 次數
2. -v :打印日志
用於指定反饋信息級別(信息級別就是日志的詳細程度),總共有三個:
1)level0:缺省值,僅提供啟動提示、測試完成和最終結果等少量信息
adb shell monkey -p 包名 -v 500
2) level1:提供較為詳細的日志,包括每個發送到activity的信息
adb shell monkey -p 包名 -v -v 500
3) level2:最詳細的日志,包括測試中選中/未選中的activity信息
adb shell monkey -p 包名 -v -v -v 500
3. -s 隨機數
打印日志的時候包含了seed參數:

這個參數是發送請求的時候自動生成的偽隨機數,用於產生相同序列的執行流,比如有bug了,開發可以去模擬當時一模一樣的場景:v
我們可以自己指定相應的隨機數seed:
adb shell monkey -s 12345 -p com.taobao.taobao -v 500
4. throttle : 毫秒
用於指定用戶操作即事件間的時延,單位是毫秒;如果不指定這個參數,monkey會盡可能快的生成和發送消息300毫秒
指定500次的點擊事件,每次之間間隔300毫秒:
adb shell monkey -p com.taobao.taobao --throttle 300 500
5.點擊次數的設置
500 這里指點擊的次數,根據經驗,單個應用程序設置在100000次就ok;如果是整機,設置在500000次
6、--ignore-crashes
應用發生崩潰或異常時Monkey會停止運行。如果設置此項,Monkey將繼續發送事件給系統,直到事件計數完成
adb shell monkey -s 12345 -p com.taobao.taobao -v --ignore-crashes 500
7、--ignore-timeouts
應用程序發生任何超時錯誤(如“Application Not responding”對話框)Monkey將停止運行,設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
adb shell monkey -s 12345 -p com.taobao.taobao -v --ignore-timeouts 500
8. --ignore-security-exception
當程序發生許可錯誤(例如啟動一些需要許可的Activity)導致的異常時,Monkey將停止運行。設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
adb shell monkey -s 12345 -p com.taobao.taobao -v --ignore-timeouts --ignore-security-exception 500
9.--kill-process-after-error
當Monkey由於一個錯誤而停止時,出錯的應用程序將繼續處於運行狀態。設置此項,將會通知系統停止發生錯誤的進程。注意,正常(成功)的結束,並沒有停止啟動的進程,設備只是在結束事件之后簡單的保持在最后的狀態
10、--monitor-native-crashes
監視並報告Andorid系統中本地代碼的崩潰事件。如果設置--kill-process-after-error,系統將停止運行。
11. --wait-dbg
停止執行中的Monkey,直到有調試器和它相連接。
12. -c <main-category>
如果你指定一個或多個類別,Monkey將只允許系統啟動這些指定類別中列出的Activity。如果你不指定任何類別,Monkey將選擇謝列類 別中列出的Activity,Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_MONKEY。指定多個類別使用多個-c,每個-c指定一個類別。
13. --dbg-no-events
設置此選項,Monkey將執行初始啟動,進入一個測試Activity,並不會在進一步生成事件。為了得到最佳結果,結合參數-v,一個或多個包的約束,以及一個保持Monkey運行30秒或更長時間的非零值,從而提供了一個可以監視應用程序所調用的包之間轉換的環境。
14. --hprof
設置此選項,將在Monkey生成事件序列前后生成profilling報告。在data/misc路徑下生成大文件(~5Mb),所以要小心使用。
monkey事件百分比:event percentages

由上圖可以看出
0:觸摸事件百分比,即參數--pct-touch
1:滑動事件百分比,即參數--pct-motion
2:縮放事件百分比,即參數--pct-pinchzoom
3:軌跡球事件百分比,即參數--pct-trackball
4:屏幕旋轉事件百分比,即參數 --pct-rotation
5:基本導航事件百分比,即參數--pct-nav
6:主要導航事件百分比,即參數--pct-majornav
7:系統事件百分比,即參數--pct-syskeys
8:Activity啟動事件百分比,即參數--pct-appswitch
9:鍵盤翻轉事件百分比,即參數--pct-flip
10:其他事件百分比,即參數--pct-anyevent
例如: 設置觸摸事件需要占百分之60,(例如游戲的APP,觸摸就會顯得比較重要)
0--10這11中事件的總共百分比=100%,不能超過100%.
設置序列號為12345,包名是com.taobao.taobao,打印簡單日志,點擊事件500次,觸摸事件百分比占60%:
adb shell monkey -s 12345 -p com.taobao.taobao -v --pct-touch 60 500
monkey日志的導出:
指定電腦某個位置:
adb shell monkey -p com.taobao.taobao -v 500 > e:\test.txt
log分析:
日志最開始都會顯示Monkey執行的seed值、執行次數、測試的包名
查看日志里是否出現了ANR或者異常
ANR:日志里搜索“ANR ”(此處有空格)
崩潰問題:日志里搜索“Exception”,快速定位到關鍵事件信息,然后查看Monkey里面出錯前的一些時間動作,手動執行該動作,找到重現步驟,給你開發
成功日志和報錯日志:
成功日志會顯示monkey finish ,events injected :100 # 執行完成,點擊事件100次

錯誤的話會有閃退或者卡死,明顯的error字眼:

會有CRASH字眼,后面跟上包名,閃退

ANR異常,無響應的:原因比如代碼設計不合理,網絡搜索事件太長


需要提供給開發的內容:
1) 被測試手機的詳細信息;
2)monkey測試日志: 在cmd中輸入命令后的內容
3)手機運行截圖;
4)monkey運行時手機日志:可以定位到某一位置 adb logcat >d:\test
