Monkey測試系列:1. Monkey入門

什麼是Monkey測試

顧名思義,Monkey就是猴子,Monkey測試,就像一隻猴子,在電腦面前,亂敲鍵盤在測試。猴子什麼都不懂,只知道亂敲,通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、 按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。

  1. Monkey程序由Android系統自帶,使用Java語言寫成,在Android文件系統中的存放路徑是:/system/framework/monkey.jar;
  2. Monkey.jar程序是由一個名爲“monkey”的Shell腳本來啓動執行,shell腳本在Android文件系統中 的存放路徑是:/system/bin/monkey;
  3. Monkey 命令啓動方式:
    a)可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試
    b)在PC上adb shell 進入Android系統,通過執行 monkey {+命令參數} 來進行Monkey 測試



Monkey測試有什麼作用

壓力測試



Monkey測試常用命令

使用命令行 adb shell monkey 就可以查看monkey的所有可用命令了

先來一個簡單的命令:

# 以後打monkey命令之前,都默認先打了adb shell命令
adb shell

# 對手機點擊1000次,不限制應用
monkey 1000



限制應用:-p

# 限制在 設置 這個應用裏面做monkey測試
monkey -p com.android.settings 1000



設置點擊事件的間隔爲50ms

monkey -p com.android.settings --throttle 50 1000



設置測試過程中輸出log的位置

#輸出到手機上
adb shell
monkey -p com.android.settings 2>/sdcard/error.txt 1>/sdcard/info.txt 1000

#輸出到電腦上,手機必須要用usb線連接着電腦
adb shell monkey  -p com.android.settings 2>/Users/guangmomo/Desktop/Test/error.txt 1>/Users/guangmomo/Desktop/info.txt 1000

注意到:當先啓動adb shell命令的時候,log會輸出到手機上;否則是輸出到電腦上




停止Monkey

adb shell

#查看monkey的進程id
ps | grep monkey

#根據pidnum來殺死進程
kill pidnum




程序在測試過程中發生異常時,你不希望終止測試可以選用以下參數

#忽略崩潰
--ignore-crashes

#忽略ANR
--ignore-timeouts

#忽略證書或認證異常
--ignore-security-exceptions

#忽略本地代碼發生的崩潰
--ignore-native-crashes





使用-v指定log的詳細級別

monkey -v 1000

可以看到輸出的日誌如下:

Monkey的日誌輸出有3個級別:默認的-v是level 0,-v-v日誌級別爲level 1,-v-v-v日誌級別爲level 2。日誌的級別越高,其詳細程度也越高。爲了方便問題的定位,將日誌級別設置爲level2。





使用--throttle參數來控制Monkey每個操作之間的時間間隔

#每個操作之間間隔50ms
monkey --throttle 50 1000




Monkey可以隨機注入11種事件,Monkey通過這11大事件來模擬用戶的常規操作

這裏寫圖片描述

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

我們還可以控制事件注入的比例

#將系統事件的比例提升到10%
monkey -p com.android.settings --throttle 50 --pct-syskeys 10 1000




使用-s參數來指定命令執行的seed值
Monkey會根據seed值來生成對應事件流,同一個seed生成的事件流是完全相同的。這裏指定了seed值,是爲了測試發現問題時,便於進行問題復現。




Monkey測試策略

  1. 使用 --throttle 來控制事件間隔
    指定操作之間的時間間隔,一方面是希望能更接近用戶的操作場景,正常用戶操作都會有一定的時間間隔;另一方面也是不希望因爲過於頻繁的操作而導致系統崩潰,尤其是在比較低端的手機上執行測試時。因此通過–throttle設置Monkey每個操作固定延遲0.4秒。

  2. 使用 --ignore-crashes --ignore-timeouts
    在執行Monkey測試時,會因爲應用的崩潰或沒有響應而意外終止,所以需要在命令中增加限制參數–ignore-crash和–ignore-timeouts,讓Monkey在遇到崩潰或沒有響應的時候,能在日誌中記錄相關信息,並繼續執行後續的測試。

  3. 修改注入事件的比例
    比如增加–pct-syskeys的比例,這樣就可以增加觸發返回鍵的比例,避免monkey測試長時間停留在一個界面,增加monkey覆蓋的界面範圍。

  4. 指定要啓動的Activity
    如果沒有指定的activity,那麼就會啓動含有 Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 的activity。可以使用 -c 來指定啓動一個Activity,該activity必須至少包含一個指定的category,才能被啓動,否則啓動不了。

前面介紹了幾種常見的Monkey測試方法,但在實際項目中,選擇哪種Monkey測試策略,則需要根據實際項目的情況來做判斷。主要是看測試目的及被測應用自身的特點。假如我們想測試瀏覽器的雙指縮放功能是否有異常,那就需要選擇–pct-pinchzoom參數,調大雙指縮放事件的佔比進行Monkey測試;假如我們想驗證ROM的橫豎屏切換功能是否正常,那就需要選擇–pct-rotation參數,調大橫豎屏切換事件的佔比進行Monkey測試;假如我們想驗證重複某種特定操作時,應用是否會存在異常,那可以選擇-f參數,自定義Monkey腳本進行驗證;假如我們想驗證長時間操作時應用是否會存在內存泄漏,那就需要結合-hprof參數和dumpsys meminfo<進程名>進行Monkey測試。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章