monkey的基本使用

一、Monkey基礎知識

1、Monkey是什麼

Monkey是一款通過命令行對APP進行自動化測試的小工具,可以運行在模擬器裏或真機上。它向系統發送僞隨機的用戶事件流,對應用程序進行壓力測試,主要目的是爲了測試app是否會crash。

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

 

2、Monkey的介紹

  • Monkey程序由Android系統自帶,使用Java語言寫成,在Android文件系統中的存放路徑是:/system/framework/monkey.jar
  • Monkey.jar程序是由一個名爲“monkey”的Shell腳本來啓動執行,shell腳本在Android文件系統中的存放路徑是:/system/bin/monkey


3、Monkey架構

 

 

二、Monkey運行相關

1、運行Monkey步驟

分三步:

第一步:搭建環境:主要是安裝和搭建java和sdk環境。

第二步:準備好要測試的apk。

第三步:連接上Android測試設備,可以是模擬器,也可以是手機。(注意:monkey命令運行前手機先解鎖,win8 以上要用管理員身份打開cmd)

2、Monkey 命令啓動方式 

 a. 可以通過PC機CMD窗口中執行: adb shell monkey {+命令參數}來進行Monkey測試

b. 在PC上adb shell 進入Android系統,通過執行monkey {+命令參數} 來進行Monkey 測試

c. 在Android機或者模擬器上直接執行monkey 命令,可以在手機設備上安裝一個模擬器手機執行monkey+參數(手機模擬器可以通過百度搜索或360手機助手搜android terminal,安裝即可,可以在模擬器的命令行中輸入mokey +參數

3、Monkey停止的條件

Monkey Test執行過程中在下列三種情況下會自動停止:

1、如果限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止。

2、如果應用程序崩潰或接收到任何失控異常,Monkey將停止並報錯。

3、如果應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會停止並報錯。

通過多次並且不同設定下的Monkey測試纔算它是一個穩定性足夠的程序。

三、Monkey命令相關

1、Monkey的測試參數

 

 

  • -v     命令行的每一個-v將增加反饋信息的級別。
  • -v:Level 0(缺省值)除 啓動提示、測試完成和最終結果之外,提供較少信息。
  • -v -v :Level 1提供較爲詳細的測試信息,如逐個發送到Activity的 事件。
  • -v -v -v :Level 2提供更加詳細的設置信息,如測試中被選中的或未被選中的Activity。
  • adb shell monkey -p com.tencent.mobileqq -v -v -v 100

  • -s (隨機數種子) 
    用於指定僞隨機數生成器的 seed 值 , 如果 seed 相同 , 則兩次 Monkey 測試所產生的事件序列也相同的 ,爲了恢復上一次的操作。 示例: 
    monkey測試1 : adb shell monkey -p fishjoy.control.menu –s 10 100 
    monkey測試2 : adb shell monkey -p fishjoy.control.menu –s 10 100
  • –throttle <毫秒> 
    用於指定用戶操作(即事件)間的時延 ,單位是毫秒,如果指定這個參數,monkey 會儘可能快的生成和發送消息 
    示例: adb shell monkey -p fishjoy.control.menu –throttle 3000 100

  • -p <允許的包名列表> 
    用此參數指定一個或多個包。指定包之後,monkey將只允許系統啓動指定的app 。多個包,加多個-p參數。 
    指定一個包: adb shell monkey -p com.tpnet.hlquery 100 
    指定多個包: adb shell monkey -p com.tpnet.hlquery –p com.htc.pdfreader 100

  • 1

 

 

2、Monkey命令行操作步驟:

命令1:adb devices   查看連接到本地計算機上的Android設備列表

命令2:adb install xx.apk   把指定的安裝包apk文件安裝到測試設備中

如果是將apk安裝到手機中,手機需要開啓開發者選項-usb安裝,否則安裝不成功;

命令3:adb shell   進入shell界面,在此界面中可以查看到設備中的安裝包,也可以執行shell命令

應用程序的安裝包名在 /data/data下,命令如下:

退出shell,命令如下:

命令4:adb shell monkey Count   給指定的設備發送壓力測試,其中Count爲要測試的次數

執行此命令的效果就相當於有個手指在設備上亂點Count次。

以上爲簡單操作,接下來就可以按照monkey命令實例等來進行更高級的操作了

 

3、一些Monkey命令:

1)adb uninstall apk包名  卸載apk

 

2)app包名查看

a.手機安裝包名查看器'

b.aapt命令  aapt dump badging *.apk

c、源碼下的AndroidManifest.xml文件查看

d.adb logcat抓取當前Android機運行的app的包名(  I/ActivityManager(數字): Displayed 包名/類名: +ms )

命令行輸入 adb logcat >e:\bag.txt;手機操控app,ctrl+c停止;去e:\bag.txt這個文件下搜索關鍵字如Displayed ,一般都能找到

 

3)殺monkey進程

如果想中斷運行中的monkey CTRL+C

adb shell ps | grep monkey  返回進程號

adb shell kill [剛纔查到的進程號]

 

4、Monkey命令實例

實例1:adb shell monkey -p com.rexen.zxapplication -s 23  --throttle 2000 --ignore-crashes --ignore-timeouts -v -v -v 100>D:\android-sdk\log\log.txt 2>&1 &

        1.   -p後面接着的對應的包名,如果是整機測試,就不需要 -ppackage_name

        2.   -s後面是對應的種子數,好像就是操作步驟,根據她們測試的經驗,一般種子數在23,同步她們測試的結果,一般種子的個數固定爲23,和她們選擇的操作步驟就是同步的。

        3.   --ignore-crashes --ignore-timeouts 這裏是在monkey測試的過程中遇到carash或者timeout的情況時忽略掉,一般不設置時,出現carash或者timeout時,Monkey測試會終止。這裏是防止Monkey測試終止。

        4.   -v 指的是Monkey測試時打印log級別。

        5.   100000 這裏是指點擊的次數,根據她們測試的經驗,對於單個應用程序這個次數設置在100000次就可以了;如果是整機,一般設置在500000次。

/data/local/tmp/log.txt測試的log記錄在手機上/data/local/tmp/ 下面的log.txt裏面,這個名字可以自己寫。

        6.   2>&1 固定的寫法,這個也很重要,代表的意思是中間忽略的東東的日誌一併輸入到指定的文件中。

        7.   最後單獨的一個"&" 是一旦Monkey測試開始了,之後可以拔掉數據線,不會影響Monkey測試。

        8.   測試所有模塊  monkey  -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &

 

實例2:adb shell monkey -p com.tpnet.hlquery --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

測試com.tpnet.hlquery這個app,間隔100毫秒,50%的觸摸事件,50% 的滑動事件,三個-v輸出詳細的日誌,執行1000個事件,日誌輸出到c:\monkeytest.txt

 

四、Monkey日誌分析

在log的最開始都會顯示Monkey執行的seed值、執行次數和測試的包名。如果Monkey測試順利執行完成, 在log的最後, 會打印出當前執行事件的次數和所花費的時間;

// Monkey finished 代表執行完成。Monkey 執行中斷, 在log最後也能看到當前執行次數。

1、分析步驟:

1、ANR問題:在日誌中搜索“ANR ”(此處有空格)

2、崩潰問題:在日誌中搜索“Exception”,快速定位到關鍵事件信息 。

3、查看Monkey中出錯前的一些事件動作,並手動執行該動作,找出重現步驟,給開發。

注意:使用monkey命令重現問題時,seed值要一摸一樣。

tip:

1、雖然Monkey測試有部分缺陷,但我們無法準確地得知重現步驟;如果出現空指針, NullPointerException肯定是有bug(用戶使用時問題必現, 何時出現只是時間問題)。

2、理論上來說,  Monkey所有的Crash 都需要在發佈前修復掉;

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