前言
在移動自動化測驗中,通常是需要adb命令和monkey命令的聯合使用來進行測驗,adb命令何其多,monkey命令也不少,組合起來讓人頭疼,本文講列出一些常用的命令,幫助大家更好地進行移動自動化測驗
Monkey 簡介
Monkey 在英文里的含義是“猴子”,在測驗行業對應有一個術語叫“猴子測驗”,那么什么是“猴子測驗”
- Android自帶命令列工具,運行在模擬器或實際設備中
- 向被測應用發送偽隨機事件流(如按鍵、觸屏、手勢等)
- 通過 monkey用隨機重復的方式來對應用程式進行一些穩定性、健壯性方面的測驗
Monkey 原理
- 利用 socket 通訊(Android 客戶端和服務器以 TCP/UDP 方式)
- 使用的事件流資料流是隨機的,不能自定義 monkey
- 是用 Java 語言寫成,名為 Monkey.jar
- 通過名為 monkey 的 shell 腳本啟動執行,shell腳本的存放路徑為:/system/bin/monkey
Monkey 命令
adb shell monkey [+ 命令引數] [指令數]
最簡單的示例:
adb shell monkey 100 # 發送 100 個隨機指令
上面的 monkey 命令發送了 100 個隨機指令,因為并沒有指定具體的應用包名,會在整個系統內隨機執行,
注意: 指令數,也就是發送的亂數的數值一定要放在所有引數的最后,
Monkey 引數
- -p 用于約束限制,用此引數指定一個或多個包,指定包后,所有的隨機指令都會針對該應用進行操作,(如何查找包名,請查看文章最后
示例:
adb shell monkey -p com.huomaotv.mobile 100
# 對“火貓 TV”發送 100 個隨機指令
接下來的 100 條指令都會在 火貓TV 應用內進行,不過注意,100 條指令會在極快的時間完成,
- -v 用于指定反饋資訊級別(資訊級別就是日志的詳細程度),總共分 3 個級別,以 -v 引數在命令中的個數 決定級別, -v 引數個數越多日志就越詳細,
Level 1: 預設值,僅提供啟動提示、測驗完成、最終結果及 Crash 日志等少量資訊
adb shell monkey -p com.huomaotv.mobile -v 100
Level 2: 提供較為詳細的日志,包括每個發送到 Activity 的事件資訊
adb shell monkey -p com.huomaotv.mobile -v -v 100
Level 3:最詳細的日志,包括了測驗中選中/未選中的Activity資訊
adb shell monkey -p com.huomaotv.mobile -v -v -v 100
- –throttle 每個事件結束后的間隔時間,用于降低系統壓力,如果不指定,系統會盡快的發送事件序列
adb shell monkey -p com.huomaotv.mobile --throttle 300 100
# 每個指令間延時 300 毫秒
- -s 指定測驗的種子值(編號),如果兩次的種子值相同,則兩次測驗的隨機指令完全相同,主要用于回歸和 重現出現的 Bug, 這里稍微難以理解一點, 每次 monkey 命令的指令都是完全隨機的,導致如果測驗程序中 發現問題,就無法復現,這也就導致開發修復問題之后,我們也無法確定之前的問題是否被修復, 為了保證 能重現問題,在運行 monkey 指令的時候加一個 種子值,只要后續的指令帶上該種子值,那么兩次運行的隨 機命令完全一致,
adb shell monkey -p com.huomaotv.mobile -s 5555 -v 100
可以修改命令其他引數,保留 -s 5555 可以看到隨機指令都一樣,如果修改了數量,應該是百分比和前面的指令 是一致的,比如把數量從 100 改為 200,前面的百分比和前面的隨機指令是一致的
除錯引數
以下命令主要用于控制在 monkey 命令執行程序中的一些除錯選項, 其中 --ignore-crashes 和 --ignoretimeouts 在長時間運行(比如下班后運行幾個小時),可以保證在運行程序中遇到崩潰等問題的時候,依然能執 行剩余的指令,避免剛開始執行就遇到 Crash 和 ANR 導致后續指令不會執行,
| 引數 | 說明 | 備注 |
|---|---|---|
| –ignorecrashes | 用于指定當應用程式崩潰時,Monkey是否停止運行,如果使用此引數,即使應用程式 崩潰,Monkey依然會發送事件,直到事件計數完成, | 長 時 間 運 行 必 備 |
| –ignoretimeouts | 用于指定當應用程式發生ANR(Application No Responding)錯誤時,Monkey是否 停止運行,如果使用此引數,即使應用程式發生ANR錯誤,Monkey依然會發送事件, 直到事件計數完成, | 長 時 間 運 行 必 備 |
| –ignoresecurityexceptions | 用于指定當應用程式發生許可錯誤時(如證書許可,網路許可等),Monkey是否停止 運行,如果使用此引數,即使應用程式發生許可錯誤,Monkey依然會發送事件,直到 事件計數完成 | |
| –killprocessafter-erro | 用于指定當應用程式發生錯誤時,是否停止其運行,如果指定此引數,當應用程式發 生錯誤時,應用程式停止運行并保持在當前狀態(注意:應用程式僅是靜止在發生錯 誤時的狀態,系統并不會結束該應用程式的行程), | |
| –monitornativecrashes | 用于指定是否監視并報告應用程式發生崩潰的本地代碼, | |
| -wait-dbg | 停止執行中的Monkey,直到有除錯器和它相連接, | |
| -dbg-noevents | 設定此選項,Monkey將執行初始啟動,進入到一個測驗Activity,然后不會再進一步 生成事件,為了得到最佳結果,把它與-v、一個或幾個包約束、以及一個保持Monkey 運行30秒或更長時間的非零值聯合起來,從而提供一個環境,可以監視應用程式所調 用的包之間的轉換 |
示例:
adb shell monkey -p com.huomaotv.mobile --ignore-crashes --ignore-timeouts --monitornative-crashes -v 100000
指定時間型別百分比引數
monkey 隨機發送的命令中包含各種隨機事件,各種型別的事件按照某種比例產生,如果想要指定某種型別的事件更多一些,可以指定該事件的百分比,
比如當前測驗的應用中主要支持的操作就是觸摸和滑動等常規操作,那么就可以提高這兩種型別的隨機事件的比例,
| 事件類別 | 調整事件說明 |
|---|---|
| –pct-touch | 調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在螢屏上的某單一位置) |
| –pctmotion | 調整滑動事件的百分比(動作事件由螢屏上某處的一個down事件、一系列的偽隨機事件和一 個up事件組成) |
| –pctpinchzoom | 調整縮放事件的百分比(縮放事件即智能機上的放大縮小手勢) |
| –pcttrackball | 調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊) |
| –pctrotation | 調整橫豎屏切換事件的比例 |
| –pct-nav | 調整“基本”導航事件的百分比(導航事件由來自方向輸入設備up/down/left/right組成) |
| –pctmajornav | 調整“主要”導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:回退按鍵、菜 單按鍵) |
| –pct-?ip | 調整鍵盤事件的百分比(鍵盤事件如點擊輸入框、鍵盤彈起、點擊輸入框以外區域、鍵盤收 回等) |
| –pctsyskeys | 調整“系統”按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵) |
| –pctappswitch | 調整啟動Activity的百分比,在隨機間隔里,Monkey將執行一個startActivity()呼叫,作為最 大程度覆寫包中全部Activity的一種方法 |
| –pctanyevent | 調整其它型別事件的百分比,它包羅了所有其它型別的事件,如:按鍵、其它不常用的設備 按鈕、等等 |
示例:
# 單個引數設定百分比
adb shell monkey -p com.huomaotv.mobile --pct-appswitch 20 10000
# 多個引數設定百分比
adb shell monkey -p com.huomaotv.mobile --pct-appswitch 20 --pct-rotation 20 --pcttouch 30 --pct-motion 20 10000
注意: 引數后面緊接百分比 ,百分比的總量不能大于 100%
日志分析
在命令的最后,加上 > 重定向到本地檔案, d:/monkey.log 放在 d 盤的根目錄
示例:
adb shell monkey -p com.huomaotv.mobile --pct-appswitch 20 --pct-rotation 20 --pcttouch 30 --pct-motion 20 --ignore-crashes --ignore-timeouts --monitor-native-crashes 10000 > d:/monkey.log
那么對于 monkey 跑完之后,我們要如何去確認有沒有出現 bug 呢? 最直觀簡單的方式就是通過搜索以下關鍵字:
- 程式無回應的情況:搜索關鍵字“ANR in”
- 崩潰的情況1:搜索關鍵字“CRASH”
- 崩潰的情況2:搜索關鍵字“Exception”
- 記憶體溢位的情況:搜索關鍵字“OOM”
- 測驗成功的情況:搜索關鍵字“Monkey finished”
- 如果出現空指標 NullPointerException ,就一定是 bug
結語
需要更多資料歡迎關注聯系我,也歡迎大家進群一起交流自動化測驗遇到的問題或經驗,點擊并輸入暗號:CSDN
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/123072.html
標籤:其他
上一篇:關于metabase的啟動問題
下一篇:CSS first-child
