adb與monkey命令的聯合使用

在移動自動化測試中,通常是需要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 導致後續指令不會執行。

adb與monkey命令的聯合使用

示例:

adb shell monkey -p com.huomaotv.mobile --ignore-crashes --ignore-timeouts --monitornative-crashes -v 100000

指定時間類型百分比參數

monkey 隨機發送的命令中包含各種隨機事件,各種類型的事件按照某種比例產生。如果想要指定某種類型的事件 更多一些,可以指定該事件的百分比。 比如當前測試的應用中主要支持的操作就是 觸摸和滑動 等常規操作,那麼就可以提高這兩種類型的隨機事件的比 例。

adb與monkey命令的聯合使用

示例:

# 單個參數設置百分比
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% 
  1. # 單個參數設置百分比
  2. adb shell monkey -p com.huomaotv.mobile –pct-appswitch 20 10000
  3. # 多個參數設置百分比
  4. adb shell monkey -p com.huomaotv.mobile –pct-appswitch 20 –pct-rotation 20 –pcttouch 30 –pct-motion 20 10000
  5. 注意: 參數後面緊接百分比 ,百分比的總量不能大於 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 呢? 最直觀簡單的方式就是通過搜索以下關鍵字:

  • 1. 程序無響應的情況:搜索關鍵字「ANR in」
  • 2. 崩潰的情況1:搜索關鍵字「CRASH」
  • 3. 崩潰的情況2:搜索關鍵字「Exception」
  • 4. 記憶體溢出的情況:搜索關鍵字「OOM」
  • 5. 測試成功的情況:搜索關鍵字「Monkey finished」
  • 6. 如果出現空指針 NullPointerException ,就一定是 bug

結語

需要adb命令和monkey命令大全的可以私聊我,也歡迎大家進群一起交流自動化測試遇到的問題或經驗,群內各階段的測試大神都有哦

來源:kknewsadb與monkey命令的聯合使用