首頁技術(shù)文章正文

monkey壓力測試原理和使用教程

更新時(shí)間:2020-07-29 來源:黑馬程序員 瀏覽量:

一、Monkey壓力測試的原理

1. adb shell monkey的運(yùn)行機(jī)制

實(shí)際上是執(zhí)行手機(jī)中/system/bin/monkey這個(gè)腳本;

2. Monkey事件注入機(jī)制Monkey注入系統(tǒng)事件是通過 framework 層的 hidenApi (如:activemanager,inputmanager,windowmanager) 獲取系統(tǒng)服務(wù)。

Monkey中有11種事件,這些事件在MonkeyEventSource中對事件之間的比例進(jìn)行設(shè)置。

Monkey事件根據(jù)類型比例生成事件隊(duì)列,循環(huán)查找事件。

a.觸摸事件(inputmanager):包括屏幕以及物理鍵的觸摸,滑動(dòng),點(diǎn)擊事件

b.Activity事件(activemanager):是指我們調(diào)用Android系統(tǒng)組件的事件。

c.Window事件(windowmanager):是指操作Window的事件,例如轉(zhuǎn)屏

3.Monkey核心類

a. Monkey.java, 程序的入口,根據(jù)參數(shù)選擇合適的MonkeyEventSource,并適時(shí)觸發(fā)MonkeyEvent;

b. MonkeyEventSource.java,MonkeyEvent的工廠,是一個(gè)接口;

c. MonkeyEvent.java,各種事件的具體實(shí)現(xiàn)。

二、查找手機(jī)上的安裝包包名

1.adb shell pm list package 查看手機(jī)上所有的安裝包

2.adb shell pm list package -3 查看第三方安裝包

壓力測試1

3.adb shell pm list packages -s 查看系統(tǒng)的包

4.adb shell pm list packages -e “要搜索的內(nèi)容” 查看啟動(dòng)包中搜索的包

monkey壓力測試2

5.adb shell dumpsys window | findstr mCurrentFocus 后面的是當(dāng)前啟動(dòng)的acivity):獲取當(dāng)前打開的APP包名(前面的為包名,斜杠

monkey壓力測試3


三、Monkey 命令

基本參數(shù)的介紹注意:所有的參數(shù)都需要放在monkey和設(shè)置的次數(shù)之間,參數(shù)的順序可以調(diào)整;若帶了-p ,-p必須放在monkey之后,參數(shù)必須在-p和count之間:

adb shell monkey -p 包名 --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v –s 1540475754297 100

1.-p ,此命令用于指定包,若不指定則在整個(gè)系統(tǒng)中執(zhí)行

a.指定一個(gè)包執(zhí)行10次:adb shell monkey -p包名 10,如下出現(xiàn)事件執(zhí)行次數(shù)和所耗時(shí)間,則算是執(zhí)行成功;

monkey壓力測試4

b.指定多個(gè)包執(zhí)行10次:adb shell monkey -p 包名–p包名10,

monkey壓力測試5

2.-v ,用于反饋日志的詳細(xì)程度級別

Level 0:adb shell monkey -p 包名 -v 10// 默認(rèn)級別,僅提供啟動(dòng)、測試完成和最終結(jié)果等少量信息

Level 1:adb shell monkey -p包名 -v-v 10// 提供較為詳細(xì)的日志,包括每個(gè)發(fā)送到Activity的事件信息

Level 2:adb shell monkey -p包名 -v-v-v 10 // 提供最詳細(xì)的日志,包括了測試中選中/未選中的Activity信息

3.-s ,用于指定偽隨機(jī)數(shù)生成器的seed值

命令:adb shell monkey -p 包名 –s seed值 執(zhí)行次數(shù)

如果seed值相同,則兩次Monkey測試所產(chǎn)生的事件序列也相同的,示例:

測試1:adb shell monkey -pcom.kugou.android –s 1540475754297 100

測試2:adb shell monkey -pcom.kugou.android –s 1540475754297 100

4.--throttle ,用于指定用戶事件的操作間隔時(shí)延,單位是毫秒如果不指定這個(gè)參數(shù),monkey會盡可能快的生成和發(fā)送消息

命令:adb shell monkey -p包名 --throttle 3000 100

5.--ignore-timeouts ,忽略超時(shí)錯(cuò)誤

6.--ignore-crashes ,忽略crash

7.--ignore-security-exceptions 忽略許可錯(cuò)誤

8.--monitor-native-crashes,用于指定是否監(jiān)視并報(bào)告應(yīng)用程序發(fā)生崩潰的本地代碼

9.--pct-touch ,觸摸事件

命令:adb shell monkey -p 包名 -v -v -v --pct-touch 100 20 //執(zhí)行20次100%都為觸摸事件這里觸摸事件為100%,則沒有其他事件

monkey壓力測試6

10.指定日志存放目錄:

a、存放在電腦上(如下指定為D目錄下命名為AAlog.txt,為了方便查找,然后就去電腦上該目錄下查找,當(dāng)設(shè)置路徑后,日志將不會在命令行窗口上顯示出來)

adb shell monkey -p 包名 -v -v -v 200>D:AAlog.txt

b、存放在手機(jī)上(可以斷開電腦)

monkey壓力測試7

1、進(jìn)入Android系統(tǒng)adb shell

2、執(zhí)行Monkey命令monkey -p com.kugou.android --pct-touch 25 -v -v 200 1>/mnt/sdcard/monkey.txt 2>/mnt/sdcard/error.txt &

0 :標(biāo)準(zhǔn)輸入1 :標(biāo)準(zhǔn)輸出2 :標(biāo)準(zhǔn)錯(cuò)誤輸出&:后臺運(yùn)行>: 重定向,會覆蓋原來文件里的內(nèi)容>>: 重定向,追加到原來文件末尾


四、日志分析

1、查找出差步驟:

a、找到monkey里哪個(gè)地方出錯(cuò)

查看Monkey執(zhí)行的是哪一個(gè)Activity,在switch后面找,兩個(gè)swtich之間如果出現(xiàn)了崩潰或其他異常,可以在該Activity中查找問題的所在。

monkey壓力測試8

b、查看Monkey里面出錯(cuò)前的一些事件動(dòng)作,手動(dòng)執(zhí)行該動(dòng)作Sleeping for XX milliseconds這是執(zhí)行Monkey測試時(shí),throttle設(shè)定的間隔時(shí)間,每出現(xiàn)一次,就代表一個(gè)事件,Sending XX 就是代表一個(gè)操作,如下圖的兩個(gè)操作 應(yīng)該就是一個(gè)點(diǎn)擊事件

monkey壓力測試9

c、若以上步驟還不能找出,則可以使用之前一樣的seek再執(zhí)行monkey命令一遍,便于復(fù)現(xiàn)

2、測試結(jié)果分析:

a、程序無響應(yīng),ANR問題:在日志中搜索“ANR”

b、崩潰問題:在日志中搜索“CRASH”

c、其他問題:在日志中搜索”Exception”



猜你喜歡:

軟件測試工程師培訓(xùn)課程

adb如何無線連接手機(jī)?

fiddler手機(jī)抓包圖文教程 

手機(jī)內(nèi)存測試要關(guān)注什么?會有哪些異常?

分享到:
在線咨詢 我要報(bào)名
和我們在線交談!