Android monkey使用詳解

monkey 測試 讀書筆記

1. monkey 的基本使用

  1. monkey文檔官方網(wǎng)址:https://developer.android.com/studio/test/monkey.html

  2. 使用 monkey 有兩種方式:

    • 第一種方式:shell 端啟動

      1. 進(jìn)入 adb shell

      2. 運(yùn)行 "/system/bin" 路徑下的 monkey腳本

        $ adb shell
        # cd /system/bin
        # monkey
        
    • 第二種方式:直接 pc 啟動

      直接通過以下的命令運(yùn)行:

      $ adb shell /system/bin/monkey
      
    • 這兩種方式的區(qū)別: 通過 PC 端啟動,monkey 運(yùn)行日志可以保存到 PC 上;通過 Shell 端啟動,monkey 運(yùn)行日志可以保存到手機(jī)里。

  3. 加上選項[options] 的命令如下:

    $ adb shell monkey [options] <event-count>
    

2. monkey 的命令及其使用

monkeyoption 操作都是根據(jù)具體的需求設(shè)定的,主要分為五類,分別為: 常規(guī)類、事件類、約束類、調(diào)試類和官方隱藏類參數(shù)。

2.1 monkey 的常規(guī)類命令

monkey常規(guī)類命令.PNG
monkey常規(guī)類命令.PNG
  1. -h: 顯示 monkey 參數(shù)幫助信息 usage
  2. -v: 打印出日志信息,每個 -v 將增加反饋信息的級別。命令格式為:
    $ adb shell monkey -v <event-count>
    

-v 越多日志信息月詳細(xì),不過目前最多支持 3 個 -v,即:
* 0級: 除啟動提示、測試完成和最終結(jié)果外提供較少信息
* 1級: 提供較詳細(xì)測試信息,如逐個發(fā)送 Activity 的事件
* 2級: 提供更詳細(xì)安裝信息,如測試中被選中或為被選中的 Activity

2.2 monkey 的事件類命令

monkey事件類命令.PNG
monkey事件類命令.PNG
  1. -f: 后接測試腳本名,表示要使用 monkey 運(yùn)行指定的 monkey 腳本,命令示例:

    $ adb shell monkey -f <scriptfile>  <event-count>
    $ abd shell monkey -f /mnt/sdcard/test 10
    
  2. -s: 后接隨機(jī)數(shù)生成器的 seed 值。如果使用相同的seed 值再次運(yùn)行 monkey,將生成相同的事件序列,也就是說重復(fù)執(zhí)行剛才的隨機(jī)操作。

    命令格式為:

    $ adb shell monkey -s <seed> <event-count>
    
  3. --throttle: 后接時間,單位為 ms(<milliseconds>),表示事件之間的固定延遲(即執(zhí)行每一個指令間隔的時間),如果不接該選項,monkey 將不會延遲。

    命令格式:

    $ adb shell monkey --throttle <milliseconds>
    
  4. --ptc-touch: 后接觸摸事件百分比,

    命令格式:

    $ adb shell monkey --ptc-touch <percent>
    
  5. --ptc-motion: 后接動作事件百分比。動作事件不單單指手勢操作,它泛指從某一個位置按下(即Down事件)后經(jīng)過一系列偽隨機(jī)事件后彈起(即Up事件)。

  6. --ptc-trackball: 后接軌跡球事件百分比。軌跡球事件包括一系列的隨機(jī)移動,以及偶爾跟隨在移動后面的點擊事件。

  7. --ptc-nav: 后接基本導(dǎo)航事件百分比。 基本導(dǎo)航事件主要指來自方向輸入設(shè)備的上、下、左、右事件。

  8. --ptc-majornav: 后接主要導(dǎo)航事件百分比。主要導(dǎo)航事件通常指引發(fā)圖形界面的一些動作,如 5-way 鍵盤中間按鍵、返回按鍵、菜單按鍵等。

  9. --ptc-syskeys: 后接系統(tǒng)按鍵事件百分比。系統(tǒng)按鍵事件通常指僅供系統(tǒng)使用的保留按鍵,比如 home鍵,back鍵,撥號鍵等。

  10. --ptc-appswitch: 后接應(yīng)用啟動事件百分比。醫(yī)用啟動事件俗稱 打開應(yīng)用,通過調(diào)用startActivity() 方法最大限度地開啟該 package 下的所有應(yīng)用。

  11. --ptc-anyevent: 后接其他類型事件百分比。除了上述提到的事件外全部都屬于其他事件。

2.3 monkey 的約束類命令

monkey約束類命令.PNG
monkey約束類命令.PNG
  1. -p: 后接一個或多個包名(<allowed-package-name>),如果應(yīng)用需要訪問其他包里面的 Activity,那相關(guān)的包也需要在此同時指定。如果不指定任何包,monkey將允許系統(tǒng)啟動全部包里的 Activity。 每一個 -p 對應(yīng)一個包,指定多個包時每個包名前都需要加上 -p,如:
    $ adb shell monkey -p <allowed-package-name> <event-count>
       
    $ adb shell monkey -p com.csmijo.test 1000
    
  2. -c: 后接一個或多個類別名(即 <main-category> 參數(shù)),monkey 將只允許系統(tǒng)啟動這些類別中某個類別列出的 Activity。如果不指定任何類別,monkey 將選擇Intent.CATEGORY_LAUNCHIntent.CATEGORY_monkey里的 Activity。

2.4 monkey 調(diào)試類命令

monkey調(diào)試類命令.PNG
monkey調(diào)試類命令.PNG
  1. --dbg-no-events: 在設(shè)置此選項后,monkey 將進(jìn)入初始啟動,進(jìn)入到某個測試 Activity 中不會進(jìn)一步生成事件。命令格式:
    $ adb shell monkey --dbg-no-events <event-count>
    
  2. --hprof: 在設(shè)置此項后,將在monkey事件序列前后立即生成 profiling report該選項將在 data/misc 中生成 5MB 大小的文件,慎用!
  3. --ignore-crashes: 在設(shè)置此項后,當(dāng)應(yīng)用程序崩潰或者發(fā)生失控異常時, monkey 將繼續(xù)運(yùn)行直到計數(shù)完成。如果不設(shè)置此選項,monkey 遇到上述崩潰或者異常將停止運(yùn)行。
  4. --ignore-timeouts: 在設(shè)置此選項后,當(dāng)應(yīng)用程序發(fā)生任何超時錯誤(如ANR)時,monkey 將繼續(xù)運(yùn)行直到計數(shù)結(jié)束。如果不設(shè)置此選項,monkey 遇到此類超時對話框?qū)⑼V惯\(yùn)行。
  5. --ignore-security-exceptions: 在設(shè)置此選項后,當(dāng)應(yīng)用程序發(fā)生任何權(quán)限錯誤(如啟動一個需要某些權(quán)限的 Activity)時,monkey 將繼續(xù)運(yùn)行直到計數(shù)完成。如果不設(shè)置此選項,monkey 遇到此類權(quán)限錯誤將停止運(yùn)行。
  6. --kill-process-after-error: 在設(shè)置此選項后,當(dāng)monkey 因為應(yīng)用程序發(fā)生錯誤停止時,將會通知系統(tǒng)體質(zhì)發(fā)生錯誤的進(jìn)程。如果不設(shè)置此項,在monkey 停止時發(fā)生錯誤的應(yīng)用程序?qū)⒗^續(xù)處于運(yùn)行狀態(tài)。
  7. --monitor-nativie-crashes: 在設(shè)置此選項后,monkey 運(yùn)行時 native code 的崩潰事件將被監(jiān)視被報告。如果不設(shè)置則不會監(jiān)視。
  8. --wait-dbg: 在設(shè)置此選項后,將暫停執(zhí)行中的 monkey,知道有調(diào)試器與它連接。

2.5 官方隱藏類參數(shù)

  1. --pkg-blacklist-file: 限制 monkey 不測試指定黑名單文檔中記錄的包(package)。如果沒有使用這個參數(shù),monkey 會測試系統(tǒng)內(nèi)所有的的包。如果使用了這個參數(shù),可通過在黑名單文檔中記錄所有不需要測試的包名稱,來相紙 monkey 的執(zhí)行范圍。 黑名單文檔中每一行只能放一個包名

  2. --pkg-whitelist-file: 限制monkey 只測試指定的白名單文檔中記錄的包。如果沒有使用這個參數(shù),monkey 會測試系統(tǒng)內(nèi)所有的包。如果使用了這個參數(shù),可通過在白名單文檔內(nèi)記錄所有要測試的包,來限制monkey 的執(zhí)行范圍。白名單文檔中每一行只能放一個包名。

    注意:如果要測試的包與其他的包有關(guān)聯(lián),則必須一起指定這些包來執(zhí)行這項參數(shù)。

3. monkey 腳本編寫

3.1 monkey API 詳解

  1. 軌跡球事件

    DispatchTrackball(long downTime, long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)
    

    只需要關(guān)注: action、x、y 即可

    • ACTION_DOWN = 0
    • ACTION_UP = 1
    • ACTION_MULTIPLE = 2
  2. 輸入字符串事件

    DispatchString(String text)
    
  3. 點擊事件

    DispatchPointer(long downTime, long eventTime, int action, float x, float y, float pressure, float size, int metaState, float xPrecision, float yPrecision, int device, int edgeFlags)
    

    只需要關(guān)注: action、x、y 即可

  4. 啟動應(yīng)用

    LaunchActivity(String pkg_name,String cl_name)
    
  5. 等待事件

    UserWait(long sleeptime)
    

    時間的單位為:毫秒(millisecond)

  6. 按下鍵值

    DispatchPress(int keyCode)
    
  7. 長按鍵值

    LongPress(int keyCode)
    
  8. 發(fā)送鍵值

    DispatchKey(long downTime, long eventTime, int action, int code, int repeat, int metaState, int device, int scancode)
    
  9. 開關(guān)軟鍵盤

    DispatchFlip(boolean keyboardOpen)
    

3.2 monkey 腳本編寫

type= raw events
count= 10
speed= 1.0
start data >>
captureDispatchPointer(5109520,5109520,0,230.75429,458.1814,0.20784314,0.06666667,0,0.0,0.0,65539,0)
captureDispatchKey(5113146,5113146,0,20,0,0,0,0)
captureDispatchFlip(true)
...

4. monkey 日志分析

4.1 monkey 日志的保存方法

  1. 保存在 pc 中,命令如下:

    $ adb shell monkey [options] <event-count> > d:\monkeylog.txt
    
  2. 保存在手機(jī)中,命令如下:

    $ adb shell
    # monkey [options] <event-count> /mnt/sdcard/monkeylog.txt
    
  3. 標(biāo)準(zhǔn)流與錯誤流分開保存,命令如下:

    # monkey [options] <event-count> 1>/mnt/sdcard/monkeylog.txt 2>/mnt/sdcard/monkeyErrorlog.txt
    

4.2 monkey 日志內(nèi)容解析

  1. 搜索關(guān)鍵字"ANR" 查找 ANR 相關(guān)信息
  2. 搜索關(guān)鍵字"CRASH" 查找 Crash 相關(guān)信息

[參考文獻(xiàn)]

  • 《深入理解Android自動化測試》
  • 《騰訊Android自動化測試實戰(zhàn)》
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容