Android 自動化測試之 Monkey

weixin_33861800發表於2018-07-17

一、Monkey簡介

1.Monkey介紹

Monkey是一個命令列工具,可以執行在模擬器裡或實際裝置中。它向系統傳送偽隨機的使用者事件流,實現對正在開發的應用程式進行壓力測試。

Monkey測試也有人叫做搞怪測試。就是用一些稀奇古怪的操作方式去測試被測試系統,以測試系統的穩定性。
Monkey測試是Android自動化測試的一種手段,Monkey測試本身非常簡單,就是模擬使用者的按鍵輸入,觸控式螢幕輸入,手勢輸入等,看裝置多長時間會出異常。
當Monkey程式在模擬器或裝置執行的時候,如果使用者觸發了比如點選,觸控,手勢或一些系統級別的事件的時候,它就會產生隨機脈衝,所以可以用Monkey用隨機重複的方法去負荷測試你開發的軟體。
Monkey包括許多選項,它們大致分為四大類:
  • 基本配置 選項,如設定嘗試的事件數量。
  • 執行約束選項,如設定只對單獨的一個包進行測試。
  • 事件型別和頻率。
  • 除錯選項。
在Monkey執行的時候,它生成事件,並把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種情況進行特殊處理:
  • 如果限定了Monkey執行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止。
  • 如果應用程式崩潰或接收到任何失控異常,Monkey將停止並報錯。
  • 如果應用程式產生了應用程式不響應(application not responding)的錯誤,Monkey將會停止並報錯。
按照選定的不同級別的反饋資訊,在Monkey中還可以看到其執行過程報告和生成的事件。
談到Monkey,必須介紹一下ADB:
ADB是Android SDK裡的一個工具,用這個工具可以直接操作管理android模擬器或者真實的Android裝置。它的主要功能有:
  • 執行裝置的shell(命令列)
  • 管理模擬器或裝置的埠對映
  • 計算機和裝置之間上傳/下載檔案
  • 將本地apk軟體安裝至模擬器或android裝置
  • ADB是一個客戶端-伺服器端 程式,其中客戶端是你用來操作的電腦,伺服器端是android裝置。

2.adb 的常用命令:

adb devices 獲取所有連線ADB的模擬器或者真機
adb install c:/xxx.apk 安裝自己的apk到裝置上
adb uninstall apk包名 從裝置上解除安裝apk
adb -s emulator-5556 uninstall apk包名 指定某裝置解除安裝apk
adb start-server 重啟adb
adb kill-server 殺死adb
adb shell pm list packages 獲取所有應用的包名

3.Monkey的常用命令:

adb shell monkey –help (獲取幫助命令)
adb shell monkey 1000 (隨機執行1000個模擬事件)
adb shell monkey -p xxxx 1000 (指定某個應用隨機執行1000個模擬事件,xxx填應用包名)
adb shell monkey (引數) 100 (帶引數執行100個模擬事件)

二、Monkey引數介紹

1.基本引數:

  -v: 日誌詳細程度。
    注意:每一個-v將增加反饋資訊的級別。Level 0(預設值)除啟動提示、測試完成和最終結果之外,提供較少資訊。Level 1提供較為詳細的測試資訊,如逐個傳送到Activity的事件。Level 2提供更加詳細的設定資訊,如測試中被選中的或未被選中的Activity。
  -s:偽隨機數生成器的seed值。
    注意:如果用相同的seed值再次執行Monkey, 兩次monkey測試將生成相同的事件序列。
  --throttle:兩次事件的時間間隔,單位是毫秒
    注意:通過這個選項可以減緩Monkey的執行速度。如果不指定該選項,Monkey將 不會被延遲,事件將盡可能快地被產成。

2.傳送事件的型別

  --pct-touch <percent>: 指定觸控事件百分比,一個點上先後有按下和抬起的操作。
  --pct-motion <percent>: 指定滑動事件百分比,先按下,滑動一段距離,然後抬起。
  --pct-trackball <percent>: 軌跡球事件百分比,一系列的隨機移動和單擊操作。
  --pct-nav <percent>: 基本導航事件百分比(硬體),設定基本的導航事件(上/下/左/右導航鍵)的生成比例。
  --pct-majornav <percent>:主要導航事件百分比,會導致UI產生回饋的事件,如單擊5個方向鍵中的中間按鈕,單擊後退鍵或者選單鍵。
  --pct-syskeys <percent>: 系統按鍵事件百分比(Home、Back、startCall、endCall、volumeControl)。
  --pct-appswitch <percent>: 指定啟動Activity的百分比。在隨機間隔裡,Monkey將執行一個startActivity()呼叫,作為最大程度覆蓋包中全部Activity的一種方法。
  --pct-anyevent <percent>: 指定其他事件百分比,普通的按鍵訊息,裝置上一些不常用的按鈕事件。

3.約束條件

  -p <allowed-package-name>: 如果用此引數指定了一個或幾個包,Monkey將只允許系統啟動這些包裡的Activity。 如果你的應用程式還需要訪問其它包裡的Activity(如選擇取一個聯絡人),那些包也需要在此 同時指定。如果不指定任何包,Monkey將允許系統啟動全部包裡的Activity。
    注意:要指定多個包,需要使用多個-p選項,每個-p選項只能用於一個包。
  -c <main-category>: 如果用此引數指定了一個或幾個類別,Monkey將只允許系統啟動被這些類別中的某個類別列出的Activity。 如果不指定任何類別,Monkey將選 擇下列類別中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。
    注意:要指定多個類別,需要使用多個-c選項,每個-c選項只能用於一個類別。

4.除錯選項

  --dbg-no-events: 指定了此選項,monkey會啟動待測應用,但不傳送任何訊息,建議與-v,-p,-throttle一起使用。
  --hprof: 指定此選項,monkey會在傳送事件前後生成效能報告(即記憶體的快照檔案),一般在裝置的/data/misc目錄下生成一個5M左右的檔案。
  --ignore-crashes: 指定了此選項,待測應用崩潰或發生異常時,繼續傳送系統訊息,直到指定個數的訊息全部傳送完畢,否則停止執行。
  --ignore-timeouts: 指定了此選項,待測應用停止響應(如彈出“應用無響應”對話方塊)時,繼續傳送系統訊息,直到指定個數的訊息全部傳送完畢,否則停止執行。
  --ignore-security-exceptions:指定了此選項,待測應用碰到許可權方面的錯誤時,繼續傳送系統訊息,直到指定個數的訊息全部傳送完畢,否則停止執行。
  --kill-process-after-error: 一般情況下,當monkey因為某個錯誤指定執行時,出問題的應用會留在系統上繼續執行,這個選項通知系統當錯誤發生時殺掉程式。
    注意:當monkey正常執行完畢後,它不會關閉所啟動的應用,裝置依然停留在最後接受到訊息的狀態。
  --monitor-native-crashes: 監視由Android C/C++程式碼部分(cpu計算部分)引起的崩潰,此時如果設定了“--kill-process-after-error”,整個系統會關機。
  --wait-dbg: 停止執行中的Monkey,直到有偵錯程式和它相連線。

三、Monkey測試命令

1.不輸入日誌:

adb shell monkey -v --throttle 300 --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 -p <package-name> 1000

2.輸入日誌:

adb shell monkey -v --throttle 300 --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 -p <package-name> 1000>D:\Android\monkey\log.txt



相關文章