APP壓力測試Monkey工具--新手入門


Monkey壓力測試工具簡介

一.Monkey測試簡介

Monkey測試是Android平台自動化測試的一種手段,通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、按鍵等操作來對設備上的程序進行壓力測試,檢測程序多久的時間會發生異常。

二.環境搭建

1.安裝JDK,先下載JDK解壓、安裝;(jdk和jre安裝在同一個文件下)安裝完成后在JAVA文件夾下產生兩個文件夾,如圖:

2.JAVA環境變量的搭建:

我的電腦→右鍵屬性→→環境變量點擊新建

在系統變量里需找Path,點擊編輯--添加%JAVA_HOME%\bin;后點擊確定

添加完成后,按win+r鍵打開運行,輸入cmd

在cmd輸入java –version或者javac

如果出現了JAVA的版本信息,說明環境變量設置成功

3.Android SDK工具安裝,選擇適合自己電腦系統的安裝。

  • sdk(64位操作系統):
  • sdk(32位操作系統):

安裝路徑可改(選擇空間大的盤,之后下載的安卓工具會比較大:幾十個G),安裝之后如下圖:

安裝完之后,先設置Android的環境變量,與JAVA一樣

先新建ANDROID_HOME環境變量

在Path編輯加入%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;

檢驗配置是否成功,在cmd中,輸入:adb,出現下圖表示成功

三.Monkey測試命令[注意:保證手機內存充足,否則無法測試]

輸入adb空格shell:

出現error:device not found,說明安卓設備沒有被找到,此時可以使用手機連接電腦,手機的USB模式必須打開,電腦上必須安裝有手機的驅動,連上設備之后,我們在輸入adb shell命令

輸入執行操作的命令:pm list packages獲取到手機里所有的安裝包名;

pm list packages -3  可以直接查到手機里面第三方軟件的包名;

上圖命令執行完后,此時我們可以執行monkey命令:

monkey -p com.example.ting_app –v 1000   (包名為例)

此命令意思為執行1000次隨機用戶模擬操作,com.example.ting_app為安裝包的名字,

注意:輸出日志在PC端時,需要退出shell; windows返回上層命令為:exit  ; 例如:adb shell monkey -p com.example.fx_app -s 88 --throttle 100 -v -v 15000 > C:\Monkey_log1.txt

也可以設置不依賴USB打印log

在執行monkey測試的時候,如果將monkey測試的日志存放在手機的sdcard或者其他目錄下,在monkey測試命令的最后加上一個&符號,則可以再不連接USB的情況下繼續執行monkey。如:monkey –p com.android.mms –s 100 --throttle 1000 –v –v –v 15000 > /mnt/sdcard/monkey_test.txt&

四.命令參數解析

* 參數-p用於約束限制,用此參數指定一個或多個包(Package,即App)。指定

包之后,Monkey將只允許系統啟動指定的APP。如果不指定包,Monkey將允許系統啟動設備中的所有APP。

* 指定一個包: adb shell monkey -p com.ting.Weather 100

說明:com.htc.Weather為包名,100是事件計數(即讓Monkey程序模擬100次隨機用戶事件)。

* 指定多個包:adb shell monkey -p com.ting.Weather –p com.ting.pdfreader  -p com.ting.photo.widgets 100

* 不指定包:adb shell monkey 100

說明:Monkey隨機啟動APP並發送100個隨機事件。

* 要查看設備中所有的包,在CMD窗口中執行以下命令:

 >adb shell

  #cddata/data

  #ls或

>adb shell

#pm list packages

* --throttle <milliseconds> 在事件之間插入固定延遲。通過這個選項可以減緩Monkey 的執行速度。如果不指定該選項,Monkey將不會被延遲,事件將盡可能快地被產成。命令中的380就是延遲時間,單位為毫秒。

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

* -s <seed>  偽隨機數生成器的 seed 值。如果用相同的seed 值再次運行Monkey ,它將生成相同的事件序列。命令中的300000 代表monkey event 執行的次數,3500表示Seed值(影響隨機事件的發生順序)

* C:\monkey_log.txt 指將Monkey 的log存在PC端的C盤根目錄下。

* 關於Monkey的其它命令,可以通過adb shell monkey來查看:

Monkey測試結果分析
一. 初步分析方法:
Monkey測試出現錯誤后,一般的差錯步驟為以下幾步:
1、 找到是monkey里面的哪個地方出錯
2、 查看Monkey里面出錯前的一些事件動作,並手動執行該動作
3、 若以上步驟還不能找出,可以使用之前執行的monkey命令再執行一遍,注意seed值要一樣
一般的測試結果分析:
1、 ANR問題:在日志中搜索“ANR”
2、 崩潰問題:在日志中搜索“crash”

3、其他問題:在日志中搜索“Exception”
4、詳細分析monkey日志:
將執行Monkey生成的log,從手機中導出並打開查看該log;在log的最開始都會顯示Monkey執行的seed值、執行次數和測試的包名。

首先我們需要查看Monkey測試中是否出現了ANR或者異常,具體方法如上述。
然后我們要分析log中的具體信息,方法如下:
查看log中第一個Switch,主要是查看Monkey執行的是那一個Activity,譬如下面的log中,執行的是com.tencent.smtt.SplashActivity,在下一個swtich之間的,如果出現了崩潰或其他異常,可以在該Activity中查找問題的所在。
:Switch:#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;component=com.tencent.smtt/.SplashActivity;end
  // Allowing start of Intent {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER]cmp=com.tencent.smtt/.SplashActivity } in package com.tencent.smtt
在下面的log中,Sending Pointer ACTION_DOWN和Sending Pointer ACTION_UP代表當前執行了一個單擊的操作;
Sleeping for 500 milliseconds這句log是執行Monkey測試時,throttle設定的間隔時間,每出現一次,就代表一個事件。
SendKey(ACTION_DOWN) //KEYCODE_DPAD_DOWN 代表當前執行了一個點擊下導航鍵的操作;
Sending Pointer ACTION_MOVE 代表當前執行了一個滑動界面的操作。
:Sending Pointer ACTION_DOWN x=47.0 y=438.0
:Sending Pointer ACTION_UP x=47.0 y=438.0
Sleeping for 500 milliseconds
:SendKey (ACTION_DOWN): 20 //KEYCODE_DPAD_DOWN:SendKey (ACTION_UP): 20 //KEYCODE_DPAD_DOWN
Sleeping for 500 milliseconds
:Sending Pointer ACTION_MOVE x=-2.0 y=3.0
:Sending Pointer ACTION_MOVE x=4.0 y=-3.0
:Sending Pointer ACTION_MOVE x=-5.0 y=-3.0
:Sending Pointer ACTION_MOVE x=3.0 y=4.0
:Sending Pointer ACTION_MOVE x=-4.0 y=1.0
:Sending Pointer ACTION_MOVE x=-1.0 y=-1.0
:Sending Pointer ACTION_MOVE x=-2.0 y=-4.0
如果Monkey測試順利執行完成,在log的最后,會打印出當前執行事件的次數和所花費的時間;// Monkey finished代表執行完成。Monkey執行中斷,在log的最后也能查看到當前已執行的次數。Monkey執行完成的log具體如下:
Events injected: 6000
:Dropped: keys=0 pointers=9 trackballs=0 flips=0
## Network stats: elapsed time=808384ms (0ms mobile, 808384ms wifi, 0msnot connected)
// Monkey finished

補充:monkey的高級參數:(最好加上,因為不加的遇到崩潰問題monkey會停止運行)

--ignore-crashes    忽略崩潰和異常

--ignore-timeouts  忽略超時

--ignore-security-exception     忽略程序發生的許可錯誤

--monitor-native-crashes      監視崩潰時的本地代碼

例如:

adb shell monkey -p com.example.ting_app --throttle 1000 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -s 1000  -v -v -v 180000 1 > C:\Monkey_log1.txt  

注意事項:

1、手機屏幕設置一直亮着,不可關閉,防止手機進入鎖屏狀態

2、盡量不插卡

3、保證手機USB可以傳輸數據,而不是只充電狀態

4、開發修復完問題后,需要重新回歸測試,驗證是否修改OK,此時,需要使用上一次跑的monkey測試中的seed值做回歸測試。

 

 


免責聲明!

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



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