開發(fā) Android 應(yīng)用,除了寫單元測試,還可以用自帶的 Monkey 工具進行 UI 自動化測試和腳本測試,本文介紹 UI 自動化測試,而Espresso測試待下一篇介紹。
Monkey 工具可以發(fā)送指定數(shù)量的隨機事件,幫我們測試應(yīng)用是否會出現(xiàn) crash 或 ANR 等 bug,也方便這類 bug 的復(fù)現(xiàn)。
一、連接測試設(shè)備
點擊 Terminal 窗口,輸入 adb devices
,可查看當前連接的設(shè)備
若只有一個設(shè)備,那再輸入 adb shell
就能進入該設(shè)備進行 monkey 測試。
當有多個設(shè)備的時候,可以關(guān)閉其他設(shè)備,或者直接指定設(shè)備,如下方是指定了名為 emulator-5554 的設(shè)備
adb -s emulator-5554 shell
PS:如果實際上當前只有一個設(shè)備,但查到有多個offline的狀態(tài),這時也是無法monkey測試的,可以選擇重啟電腦,或者輸入以下命令解決,殺掉 adb ,然后重連設(shè)備
adb kill-server
二、Monkey工具簡單使用
同樣在 Terminal
中操作,可以先輸入 adb shell
進入設(shè)備再輸入 monkey 命令進行測試,也可以每次都輸入adb shell monkey 命令進行測試。
如以下兩種寫法效果是一樣的,不過如果先輸入 adb shell
就會進入到設(shè)備的控制臺,以后都不用再輸 adb shell
了, 而退出設(shè)備控制臺的命令是 exit
以下開始簡單的 monkey 測試##
最簡單的命令
adb shell monkey 1000
發(fā)送1000個隨機事件,執(zhí)行后就能看到設(shè)備自動操作起來了,這有可能打開設(shè)備任意應(yīng)用來操作,包括一些點擊,滑動,各種按鍵事件,總之跟人手動操作是一樣的,只不過操作事件是隨機的。
一般情況下,我們測試的是指定應(yīng)用,所以需要知道應(yīng)用的包名
adb shell ls data/data
查看設(shè)備安裝了哪些應(yīng)用,將顯示應(yīng)用的包名
用命令測試一下 calender,順便在控制臺顯示操作軌跡,用 -v
adb shell monkey -p com.android.calendar -v 1000
同時測試兩個包,并且用 --throttle 100 指定命令執(zhí)行間隔為 100 ms
adb shell monkey -p com.android.calendar -p com.android.calculator2 --throttle 100 -v 1000
增加一個 -s 數(shù)字 記錄一個操作軌跡的唯一值,理論上用同一個值的話會執(zhí)行相同的操作軌跡,可以用來復(fù)現(xiàn) crash 等問題,當然發(fā)生 crash 時控制臺也會出現(xiàn)一個 seed值,用這個去執(zhí)行也能復(fù)現(xiàn)問題了
adb shell monkey -p com.android.calculator2 -s 100 -v 1000
crash 事件復(fù)現(xiàn),比如下圖中最后的 seed 0 , 0就是發(fā)生奔潰的 seed 值,我們在 -s 后面的值改為 0 就能復(fù)現(xiàn) crash 了
adb shell monkey -p com.android.calculator2 -s 0 -v 1000
添加一個 --pct-touch 100
參數(shù),設(shè)置為100%執(zhí)行應(yīng)用內(nèi)點擊事件,而不會出現(xiàn)滑動狀態(tài)欄啊截屏啊按home鍵等事件
adb shell monkey -p com.android.calculator2 --pct-touch 100 -v 100
設(shè)置50%點擊事件和20%系統(tǒng)按鍵事件,其余30%為其他事件,并且設(shè)置無視 crash 和 ANR 操作超時 ,發(fā)生時測試將繼續(xù)執(zhí)行
adb shell monkey --pct-touch 50 --pct-syskeys 20 --ignore-crashes --ignore-timeouts -v 1000
在測試運行時,想要終止測試,按以下步驟
1、輸入 adb shell 進入測試設(shè)備
2、輸入 ps|grep monkey 獲取monkey的進程id
3、輸入 kill process_id 來終結(jié) monkey 進程,如下圖第一個就是
三、Monkey 命令小結(jié)
monkey
查看所有 monkey 命令
monkey 1000
直接發(fā)1000個隨機事件
monkey -v 1000
增加Terminal對操作軌跡的顯示
monkey --throttle 1000
指定事件之間間隔,當前設(shè)置為1000ms
monkey -p com.android.calculator2
指定要運行的包名
monkey -s 10
指定一個隨機事件序列的id,下次再用同樣的id去執(zhí)行,可以復(fù)現(xiàn)問題
monkey --pct-touch 100
設(shè)置100%執(zhí)行點擊事件,不執(zhí)行上下滑,旋轉(zhuǎn)等其他操作
monkey --ignore-crashes
忽略異常,繼續(xù)跑
monkey --ignore-timeouts
忽略超時,繼續(xù)跑
四、常用 adb 命令
進入設(shè)備: adb shell
進入指定設(shè)備: adb -s 設(shè)備名 shell
安裝軟件: adb shell install apk名字
殺掉: adb adb kill-server
啟動: adb adb start-server
終止 Terminal 執(zhí)行:Ctrl+C
清空 Terminal 歷史:cls
從 adb 命令窗口退回 CMD: exit
附上官方的 monkey 測試介紹網(wǎng)頁
https://developer.android.google.cn/studio/test/monkey.html
至此Monkey的基本使用介紹完畢,但只能進行一些隨機事件操作,如果我們想測試 APP 某些指定的操作的話(比如注冊登錄),就要自己寫測試腳本了
下一篇將介紹 Espresso 腳本來寫指定測試操作步驟
請尊重他人勞動,轉(zhuǎn)載注明出處,謝謝