1、monkey測試的相關的原理android
monkey測試的原理就是利用socket通信的方式來模擬用戶的按鍵輸入,觸摸屏輸入,手勢輸入等,看設備多長時間會出異常。當Monkey程序在模擬器或設備運行的時候,若是用戶出發了好比點擊,觸摸,手勢或一些系統級別的事件的時候,它就會產生隨機脈衝,因此能夠用Monkey用隨機重複的方法去負荷測試你開發的軟件。shell
2、環境搭建app
monkey測試環境搭建:運行前安裝adb(MONKEY測試使用的是ADB命令,所以只須要配置ADB環境便可。)socket
1.pc端下載adb命令包,解壓後放到C盤目錄下(也就是jdk,sdk,下載地址:http://pan.baidu.com/s/1pJ6Yqs7,jdk安裝,sdk解壓便可,並配置環境變量,path加上platform-tools和tools的目錄路徑)測試
2.手機經過usb鏈接電腦,自動安裝usb驅動,鏈接成功命令行
3.驗證adb命令可否運行3d
pc端進入cmd命令行---進入C:\tmg目錄下--運行adb shell,出現$符號證實adb命令運行成功,進入shell模式日誌
3、手機設置orm
手機屏幕超時設置爲從不關閉,防止手機進入鎖屏狀態。xml
以htc手機爲例:進入設置-顯示--屏幕待機--設置爲從不關閉。
4、運行monkey
運行方式有三種:
a、pc機上 adb shell monkey +參數
b、 pc機輸入adb shell進入到手機的安卓設備後再monkey+參數
c、手機設備上安裝一個模擬器手機執行monkey+參數(手機模擬器能夠經過百度搜索或360手機助手搜android terminal,安裝便可,能夠在模擬器的命令行中輸入mokey +參數)
下面是第一種方法:
1.查看包名:查看電腦中某一位置的apk文件的包名:PC打開CMD-進入TMG目錄-運行設備--查看包名aapt dump badging *.apk(apk文件的路徑,能夠直接拖拽)。
或者直接查看手機中存在的apk包,進入adb shell 命令後---手機的data/data文件夾--ls查看全部包名 找到要測apk的包名
2.運行monkey,對此包進行300次無規律點擊。
或者運行monkey,對此包進行300次無規律點擊後將日誌導出到電腦的某一位置
adb shell -p 包名 -v 點擊數 >電腦某一位置
三、測試中止後,查看導出的monkey日誌,發現問題。
在log的最開始都會顯示Monkey執行的seed值、執行次數和測試的包名。
首先咱們須要查看Monkey測試中是否出現了ANR或者異常,無響應問題(ANR問題):在日誌中搜索「ANR 」(此處有空格), 崩潰問題:在日誌中搜索「Exception」,快速定位到關鍵事件信息 。而後查看Monkey裏面出錯前的一些事件動做,並手動執行該動做,找出重現步驟,給開發。
5、monkey命令詳解
monkey -p com.tencent.mtaexample -s 23 --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
1. -p後面接着的對應的包名,若是是整機測試,就不須要 -ppackage_name
2. -s後面是對應的種子數,好像就是操做步驟,根據她們測試的經驗,通常種子數在23,同步她們測試的結果,通常種子的個數固定爲23,和她們選擇的操做步驟就是同步的。
3. --ignore-crashes --ignore-timeouts 這裏是在monkey測試的過程當中遇到carash或者timeout的狀況時忽略掉,通常不設置時,出現carash或者timeout時,Monkey測試會終止。這裏是防止Monkey測試終止。
4. -v 指的是Monkey測試時打印log級別。
5. 100000 這裏是指點擊的次數,根據她們測試的經驗,對於單個應用程序這個次數設置在100000次就能夠了;若是是整機,通常設置在500000次。
/data/local/tmp/log.txt測試的log記錄在手機上/data/local/tmp/ 下面的log.txt裏面,這個名字能夠本身寫。
6. 2>&1 固定的寫法,這個也很重要,表明的意思是中間忽略的東東的日誌一併輸入到指定的文件中。
7. 最後單獨的一個"&" 是一旦Monkey測試開始了,以後能夠拔掉數據線,不會影響Monkey測試。
8. 測試全部模塊 monkey -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
6、monkey經常使用參數詳解
-v 日誌詳細程度
Level 0 : adb shell monkey -p fishjoy.control.menu -v 100 最簡單(默認),除了啓動、測試完成和最終結果外只提供較少的信息。
Level 1 : adb shell monkey -p fishjoy.control.menu -v -v 100 提供了較爲詳細的測試信息,如逐個發送到Activity的事件信息
Level 2 : adb shell monkey -p fishjoy.control.menu -v -v -v 100 提供了更多的設置信息,如測試中選中或未選中的Activity信息
比較經常使用的是-v -v -v,通常會保存到指定文件中供開發人員查找bug緣由時使用
-s(隨機數種子)
指定僞隨機數生成器的seed值,若是seed相同,則兩次Monkey測試所產生的事件序列也相同的。
示例: monkey測試1:adb shell monkey -p fishjoy .control.menu –s 10 100
monkey測試2:adb shell monkey -p fishjoy .control.menu –s 10 100
--throttle <毫秒>
指定用戶操做(即事件)間的時延,單位是毫秒;若是不指定這個參數,monkey會盡量快的生成和發送消息。
示例:adb shell monkey -p fishjoy.control.menu --throttle 3000 100
-p <容許的包名列表>
用此參數指定一個或多個包。指定包以後,monkey將只容許系統啓動指定的app。若是不指定包,monkey將容許系統啓動設備中的全部app。
做用:一般,當程序發生許可錯誤(例如啓動一些須要許可的Activity)致使的異常時,Monkey將中止運行。設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
做用:一般,應用程序發生任何超時錯誤(如「Application Not responding」對話框)Monkey將中止運行,設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
做用:一般,應用發生崩潰或異常時Monkey會中止運行。若是設置此項,Monkey將繼續發送事件給系統,直到事件計數完成。
--pct-touch <percent>
做用:調整觸摸事件的百分比.(觸摸事件是指在屏幕中的一個down-up事件,即在屏幕某處按下並擡起的操做)好比一個應用80%的操做都是觸摸,那就能夠將此參數的百分
比設置成相應較高的百分比。如觸摸返回、觸摸簽到等
--pct-motion<percent>
調整motion事件百分比。(motion事件是由屏幕上某處一個down事件、一系列僞隨機的移動事件和一個up事件組成)也就是直線滑動事件如從左到有滑動解鎖
--pct-trackball <percent>
做用:調整滾動球事件百分比。(滾動球事件由一個或多個隨機的移動事件組成,有時會伴隨着點擊事件)如不規則滑動解鎖
--pct-nav<percent> 導航,如今手機基本沒有導航了
---pct-syskeys<percent> 按鍵消息比例,主頁、後退、音量增減
--pct-anyevent 其餘不經常使用的按鍵比例的設置,不經常使用
--hprof monkey測試完成後生成內存快照,data/misc路徑下生成,不經常使用,比較佔空間
--ignore-security-exceptions 忽略權限問題的
--kill-process-after-error 當錯誤發生時殺進程
--monitor-native-crashes 監視崩潰時的本地代碼
7、殺monkey進程
若是想中斷運行中的monkey CTRL+C
adb shell ps | grep monkey 返回進程號
adb shell kill [剛纔查到的進程號]
app包名查看:
a.手機安裝包名查看器'
b.aapt命令 aapt dump badging *.apk
c、源碼下的AndroidManifest.xml文件查看
d.adb logcat抓取當前Android機運行的app的包名( I/ActivityManager(數字): Displayed 包名/類
名: +ms )
命令行輸入 adb logcat >e:\bag.txt
手機操控app,ctrl+c中止
去e:\bag.txt這個文件下搜索關鍵字如Displayed ,通常都能找到