mokey測試相關(guān)知識

一、什么是Monkey

顧名思義,Monkey就是猴子, Monkey測試,就像一只猴子, 在電腦面前,亂敲鍵盤在測試。 猴子什么都不懂, 只知道亂敲。

通過Monkey程序模擬用戶觸摸屏幕、滑動Trackball、 按鍵等操作來對設(shè)備上的程序進行壓力測試,檢測程序多久的時間會發(fā)生異常。
Monkey測試是一種為了測試軟件的穩(wěn)定性、健壯性的快速有效的方法。

二、Monkey用來做什么

Monkey 主要用于Android客戶端 壓力測試的一個小工具,主要目的就是為了測試app 是否會Crash.

三、Monkey程序介紹

(1) Monkey程序由Android系統(tǒng)自帶,使用Java語言寫成,在Android文件系統(tǒng)中的存放路徑是: /system/framework/monkey.jar;
(2) Monkey.jar程序是由一個名為“monkey”的Shell腳本來啟動執(zhí)行,shell腳本在Android文件系統(tǒng)中 的存放路徑是:/system/bin/monkey;
(3)Monkey 命令啟動方式:
a)可以通過PC機CMD窗口中執(zhí)行: adb shell monkey {+命令參數(shù)}來進行Monkey測試

b)在PC上adb shell 進入Android系統(tǒng),通過執(zhí)行 monkey {+命令參數(shù)} 來進行Monkey 測試

c ) 在Android機或者模擬器上直接執(zhí)行monkey 命令,可以在Android機上安裝Android終端模擬器

四、Monkey的啟動與停止

monkey的啟動很簡單,可以通過兩種方式來啟動monkey命令:1.PC端啟動:

adb shell monkey -p packagename -vvv 1000 

2.shell環(huán)境中啟動:

adb shell
monkey -p packagename -vvv 1000

那么這兩種不同的啟動方式有啥區(qū)別呢?
他們不同就在于在PC端啟動的monkey運行的log日志可以保存在pc端,shell環(huán)境中啟動的monkey,日志就只能保存在手機中,譬如:
adb shell monkey -p packagename -vvv 1000 >D:\log.txt此時monkey的運行日志保存在了D盤下的log.txt文件中

五、Monkey中止方法

Monkey一旦運行起來,就無法停止,直到事件完成或者異常終止執(zhí)行,自己在剛接出的時候,如果中途想停止就是扣電池或者重啟手機(這個相當麻煩),后來發(fā)現(xiàn)monkey啟動后混啟動一個“com.android.commands.monkey”為包名的進程,發(fā)現(xiàn)它之后就可以優(yōu)雅的關(guān)閉monkey了,我們可以殺掉monkey進程來關(guān)機monkey。
1.通過 adb shell ps | grep monkey 獲取monkey的PID
2.使用adb shell kill pid 來停止monkey服務(wù)

六、Monkey的架構(gòu)

Monkey 運行在設(shè)備或模擬器上面,可以脫離PC運行(普遍做法是將monkey作為一個像待測應(yīng)用發(fā)送 隨機按鍵消息的測試工具。驗證待測應(yīng)用在這些隨機性的輸入面前是否會閃退或者崩潰)

七、Monkey 參數(shù)大全

壓力測試指令:monkey -p 包名 [參數(shù)] -v (-v -v) 執(zhí)行次數(shù) >導出log文件。參數(shù)名比例相加是100。
adb shell monkey -p com.activitage --pct-touch 80 --pct-motion 15 --pct-nav 5 -s 900 –ignore-crashes –ignore-timeouts --throttle 800 -v 10000


八、獲取包名的方法:

adb shell
pm list packages

其他方法:
1)手機中安裝APK包名查看器
2)源碼下的AndroidManifest.xml文件查看
3)aapt命令查看

九、Monkey 命令、基本參數(shù)介紹

-p <允許的包名列表>
用此參數(shù)指定一個或多個包。指定包之后,monkey將只允許系統(tǒng)啟動指定的app。如果不指定

包,monkey將允許系統(tǒng)啟動設(shè)備中的所有app。

指定一個包:adb shell monkey -p com.shjt.map 100

指定多個包:adb shell monkey -p fishjoy.control.menu –p com.shjt.map 100

-v
用于指定反饋信息級別(信息級別就是日志的詳細程度),總共分3個級別,分別對應(yīng)的參數(shù)如下表所示:

Level 0 :adb shell monkey -p com.shjt.map -v 100 // 缺省值,僅提供啟動提示、測試完成和最終結(jié)果等少量信息

Level 1 :adb shell monkey -p com.shjt.map -v -v 100 // 提供較為詳細的日志,包括每個發(fā)送到Activity的事件信息

Level 2 :adb shell monkey -p com.shjt.map -v -v -v 100 // 最詳細的日志,包括了測試中選中/未選中的Activity信息

-s(隨機數(shù)種子)
用于指定偽隨機數(shù)生成器的seed值,如果seed相同,則兩次Monkey測試所產(chǎn)生的事件序列也相同的。示例:

monkey測試1:adb shell monkey -p com.shjt.map –s 10 100

monkey測試2:adb shell monkey -p com.shjt.map –s 10 100

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

示例:adb shell monkey -p com.shjt.map --throttle 3000 100

monkey配置命令例子:

adb shell monkey -p com.activitage  --pct-touch 80 --pct-motion 15 --pct-nav 5 -s 900 –ignore-crashes –ignore-timeouts --throttle 800 -v 10000

1.-p:指定被測應(yīng)用的包名,指定被測應(yīng)用的包名后,monkey運行并啟動該應(yīng)用的main Activity。
2.--pct-touch:指定monkey生成觸摸事件的百分比
3.--pct-motion:設(shè)置monkey生成用戶手勢放的百分比對于常見的大多數(shù)應(yīng)用來說,這兩種操作事件是最常見的,所以我們一般會將它們的比率設(shè)置相對高一點
4.-s:指定monkey的隨機種子數(shù),monkey相同的隨機種子生成的事件是相同的,這樣可以幫助我們發(fā)現(xiàn)和定位問題
5:一般情況下monkey在運行發(fā)生奔潰或者應(yīng)用無響應(yīng)(ARN)的時候會終止運行,我們?yōu)榱四軌蜃宮onkey在奔潰和ARN的時候繼續(xù)運行,
指定–ignore-crashes和–ignore-timeouts參數(shù),monkey可以繼續(xù)運行
6.--throttle:指定monkey每個動作的時間間隔,這里的時間單位是毫秒,這個時間500左右7.-v:使用它來控制monkey log的級別

十、Monkey日志分析

1.測試正常結(jié)束(pass)判斷

// Monkey finished

2.測試非正常結(jié)束(fail)判斷
1)monkey測試中出現(xiàn)停止運行(crash)現(xiàn)象
在monkeylog的最后邊會有CRASH的關(guān)鍵字或者在我們的adblog中搜索fatal的關(guān)鍵字:

// CRASH: com.android.browser (pid 8766)
System appears to have crashed at event 74031of 1000000 using seed 100

(2)monkey測試中出現(xiàn)無響應(yīng)(anr)現(xiàn)象

下邊是以前測試phone出現(xiàn)的anr現(xiàn)象,monkey log如下:

在monkeylog的最后邊會有NOT RESPONDING的關(guān)鍵字:

:Sending Touch (ACTION_DOWN): 0:(25.0,153.0)
// NOT RESPONDING: com.android.phone (pid 751)

3)monkey測試中uncaught exception 停止。

11-01 08:53:27.113: ERROR/AndroidRuntime(1973):Uncaught handler: thread main exiting due to uncaught exception

4)monkey異常停止,但在monkey log中沒有有用log
對于這一類問題,我們首先要排查,手機的adb是否能連接上,是不是有人為的影響,手機是否處于開機狀態(tài),是否因為之前電量不足,而測試比較耗電的模塊導致了手機低電量關(guān)機等。

【異常情況】

Monkey 測試出現(xiàn)錯誤后,一般的分析步驟

看Monkey的日志 (注意第一個swith以及異常信息等)

  1. 程序無響應(yīng)的問題: 在日志中搜索 “ANR”
  2. 崩潰問題:在日志中搜索 “Exception” (如果出現(xiàn)空指針 NullPointerException)肯定是有bug

Monkey 執(zhí)行中斷,在log最后也能看到當前執(zhí)行次數(shù)
雖然Monkey測試有部分缺陷,我們無法準確地得知重現(xiàn)步驟, Monkey測試所出現(xiàn)的NullPointException, 都是可以在用戶使用時出現(xiàn)的, 何時出現(xiàn)只是時間問題

理論上來說, Monkey所有的Crash 都需要在發(fā)布前修復(fù)掉。

【拓展】

  • monkey白名單和黑明單的使用

monkey還有對隱藏的命令,在之前的命令分類中我們見過。
–pck-blacklist-file<黑名單文件>,
–pck-whitelist-file<白名單文件>,
黑名單和白名單在同一時間內(nèi)只能使用一個,不能同時使用,來看看怎么使用這兩個命令:
第一步建立黑白名單文件,黑白名單文件為文本格式,里面存儲的是要列入黑白名單的包名,用回車換行區(qū)分,一行一個包名,比如創(chuàng)建黑名單black.txt:

image

第二步將剛建好的文件push到手機上,如:

adb push d:\black.txt /data/local/tmp

執(zhí)行monkey命令,比如下面的語句:

adb shell monkey --pkg-blacklist-file /data/local/tmp/black.txt --throttle 500  -v v v 10000

此時monkey運行的時候不去測試黑名單中的包了,

轉(zhuǎn)載鏈接
參考鏈接
一個很好的總結(jié)鏈接

【ANR結(jié)果分析鏈接】
https://testerhome.com/topics/12231
https://blog.csdn.net/qq_15158911/article/details/53444821

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,351評論 25 708
  • Lillian_荔黎安閱讀 289評論 0 0
  • 暗夜虎嘯 拒絕星光環(huán)繞 一如正午驕傲 三尺垂涎嗷嗷 五指俗世撓 七尺堂前折腰 黃發(fā)嘶嚎 不悲晴空寥寥 馬蹄躁 塵埃...
    馮翩閱讀 438評論 0 1
  • 俗語說一花一物,一世界。 一個住院大門,阻斷了與虛幻世界的聯(lián)系,卻又給我開啟了一個新的世界。 在這里,家人總是對患...
    尚澤_b4fe閱讀 470評論 0 0
  • 常有人形容某人聲音“有磁性”大部分正常人、正常場合說話,不會給人磁性之感。 磁性是什么?磁性是一種方向。 就像是一...
    伊織隨意寫閱讀 231評論 0 0

友情鏈接更多精彩內(nèi)容