隨機自動化測試monkey的使用


Monkey簡介

Monkey概念:
Monkey是Android中的一個命令行工具,可以運行在模擬器里或實際設備中。它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。Monkey測試是一種為了測試軟件的穩定性、健壯性的快速有效的方法。
該工具用於進行壓力測試。然后開發人員結合monkey 打印的日志和系統打印的日志,分析測試中的問題

Monkey 測試的特點:
Monkey 測試,所有的事件都是隨機產生的,不帶任何人的主觀性。
1、測試的對象僅為應用程序包,有一定的局限性。
2、Monky測試使用的事件數據流是隨機的,不能進行自定義。
3、可對MonkeyTest的對象,事件數量,類型,頻率等進行設置

Monkey存放路徑:
Monkey程序是Android系統自帶的,由Java語言寫成,在Android文件系統中的存放路徑是:
/system/framework/monkey.jar。

Monkey大致操作流程:
通過名為“monkey”的Shell腳本去啟動Monkey.jar程序(shell腳本在Android文件系統中 的存放路徑是:/system/bin/monkey),在你指定的APP應用上模擬用戶點擊,滑動,輸入等操作以極快的速度來對設備程序進行壓力測試,檢測程序是否會發生異常,然后通過日志進行排錯。

Monkey測試目的:
測試app 是否會是否會Crash(崩潰)

Monkey操作命令格式:
adb shell monkey {+命令參數}

Monkey 測試基本操作介紹

Monkey命令參數:

  1. 參數: -p
    參數-p用於約束限制,用此參數指定一個或多個包(Package,即App)。指定包之后,Monkey將只允許系統啟動指定的APP。如果不指定包,Monkey將允許系統啟動設備中的所有APP。
  • 指定一個包: adb shell monkey -p com.htc.Weather 100
    說明:com.htc.Weather為包名,100是事件計數(即讓Monkey程序模擬100次隨機用戶事件)。
  • 指定多個包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p
    com.htc.photo.widgets 100
  • 不指定包:adb shell monkey 100
    說明:Monkey隨機啟動APP並發送100個隨機事件。
  1. 參數: -v
    用於指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別,分別對應的參數如下表所示:
    日志級別 Level 0
    示例 adb shell monkey -p com.htc.Weather –v 100
    說明 缺省值,僅提供啟動提示、測試完成和最終結果等少量信息

日志級別 Level 1
示例 adb shell monkey -p com.htc.Weather –v -v 100
說明 提供較為詳細的日志,包括每個發送到Activity的事件信息

日志級別 Level 2
示例 adb shell monkey -p com.htc.Weather –v -v –v 100
說明 最詳細的日志,包括了測試中選中/未選中的Activity信息

3)參數: --throttle <毫秒>
用於指定用戶操作(即事件)間的時延,單位是毫秒;
示例:adb shell monkey -p com.htc.Weather --throttle 3000 100

4)參數: -s
用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。

示例:
Monkey測試1:adb shell monkey -p com.htc.Weather –s 10 100
Monkey 測試2:adb shell monkey -p com.htc.Weather –s 10 100
兩次測試的效果是相同的,因為模擬的用戶操作序列(每次操作按照一定的先后順序所組成的一系列操作,即一個序列)是一樣的。操作序列雖 然是隨機生成的,但是只要我們指定了相同的Seed值,就可以保證兩次測試產生的隨機操作序列是完全相同的,所以這個操作序列偽隨機的。

  1. 參數: --ignore-crashes
    用於指定當應用程序崩潰時(Force & Close錯誤),Monkey是否停止運行。如果使用
    此參數,即使應用程序崩潰,Monkey依然會發送事件,直到事件計數完成。
    示例:adb shell monkey -p com.htc.Weather --ignore-crashes 1000
    測試過程中即使Weather程序崩潰,Monkey依然會繼續發送事件直到事件數目達到1000為止;

  2. 參數: --ignore-timeouts
    用於指定當應用程序發生ANR(Application No Responding)錯誤時,Monkey是否停止運行。如果使用此參數,即使應用程序發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成。

  3. 參數: --ignore-security-exceptions
    用於指定當應用程序發生許可錯誤時(如證書許可,網絡許可等),Monkey是否停止運行。如果使用此參數,即使應用程序發生許可錯誤,Monkey依然會發送事件,直到事件計數完成。

  4. --pct-事件類別
    11個事件百分比控制(有的是9種事件,沒有--pct-pinchzoom,--pct-rotation事件)由安卓SDK決定

--pct-touch {+百分比} 0:
觸摸,觸摸事件泛指發生在某一位置的一個down-up事件,點擊
--pct-motion {+百分比}1:
動作,動作事件泛指從某一位置接下(即down事件)后經過一系列偽隨機事件后彈出
(即up事件)
--pct-pinchzoom {+百分比}2:
二指縮放,智能機上的放大縮小手勢操作事件
--pct-trackball {+百分比}3:
軌跡,軌跡事件包括一系列的隨機移動,以及偶爾跟隨在移動后面的點擊事件
--pct-rotation {+百分比}4:
屏幕旋轉,橫屏豎屏事件
--pct-nav {+百分比}5:
基本導航,基本導航事件主要來自方向輸入設備的上、下、左、右事件
--pct-majornav {+百分比}6:
主要導航,主要導航事件通常指引發圖形界面的一些動作,如鍵盤中間按鍵、返回按鍵、菜單按鍵等
--pct-syskeys {+百分比}7:
系統按鍵,系統按鍵事件通常指僅供系統使用的保留按鍵,如HOME鍵、BACK鍵、撥號鍵、掛斷鍵、音量鍵等
--pct-appswitch {+百分比}8:
應用啟動,應用啟動事件(activity launches)即打開應用,通過調用startActivity()方法
最大限度地開啟該package下的所有應用
--pct-flip {+百分比}9:
翻轉,鍵盤輕彈百分比,如點擊輸入框,鍵盤彈起,點擊輸入框以外區域,鍵盤收回
--pct-anyevent {+百分比}10:
其他類型,其他類型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

Monkey命令實戰:

adb shell monkey -p com.htc.Weather -s 3 --throttle 1000 --pct-anyevent 50 --pct-syskeys 50 --ignore-crashes --ignore-timeouts --ignore-security-exceptions 1000
備注:--pct指定的事件加起來不能超過100%

Monkey測試中,終止運行的方式:
方式一:

  1. 新打開一個dos命令窗口
  2. 執行: adb shell
  3. 執行ps | grep monkey
  4. 返回來的第一個數字,即是monkey的進程號然后kill pid 進程號
    方式二:
    重啟手機。

Monkey測試日志分析

用Monkey做測試,為了方便分析問題,需要把monkey運行過程中產生的日志結果進行分析,查找bug。

結果保存在電腦上:
adb shell monkey -p 包名 -v 1000 > 路徑/monkey.txt

結果保存在手機上:
前提條件:手機要root或把結果文件放在有權限存取的路徑
1、運行adb shell
2、monkey -p 包名 -v 1000 1>手機路徑/info.txt 2>手機路徑/error.txt

備注:
1、結果中可以通過 |logcat -v time 添加時間。如下:
monkey -p 包名 -v 1000 |logcat -v time 1>手機路徑/info.txt 2>手機路徑/error.txt
2、如手機提示read-only file system
mount當前掛載情況
mount -o remount -o rw /system重新掛載需要修改權限的目錄

如果測試monkey碰到crash或者anr(程序強制性退出或不響應)現象時,在抓取log的同時需要提供traces.txt,步驟如下:

  1. 測試版本需要具備root權限
  2. 進入data/anr目錄下面
  3. 將traces.txt文件拷貝到TF卡中,然后拷貝出來發給軟件分析即可
  4. adb pull /data/anr/traces.txt c:\ 復制文件到電腦

備注:
1、 保留在手機中的測試日志(info.txt、error.txt)也可以通過上述第4步驟保存到電腦
2、adb shell cat /data/anr/traces.txt> d:\traces.txt 復制文件到電腦

在日志中進行快速分析:
1、程序無響應的問題:
在日志中搜索 “ANR”
2、崩潰問題:
在日志中搜索 “Exception”

備注:
monkey執行時未加--ignore-crashes --ignore-timeouts參數,就先瀏覽日志中
Events injected(注入事件): 值,查看當前已執行的次數,就知道有無bug。

找出問題后的操作步驟:
(1) 找到是monkey里面的哪個地方出錯
(2) 查看Monkey里面出錯前的一些事件動作,並手動執行該動作
(3) 若以上步驟還不能找出,可以使用之前執行的monkey命令再執行一遍,注意seed值要一樣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM