【寫在前面】在進行app測試中瞭解到monkey測試,故在網上學習了一些資料,但本身在實踐中仍有一些疑惑和問題出現。在此記錄下本身的實際操做,後續仍然會不斷調整,以期完善。
monkey:是Android中的一命令行工具,對app的穩定性和健壯性進行測試。
特色:一、測試對象爲程序包,有必定侷限性;二、僞隨機事件,不能自定義;三、可設置事件數量、類型、頻率。
適用狀況:ANR和CRASH異常狀況;低機率很難復現的異常。html
http://www.oracle.com/technet...
成功後打開終端,輸入‘javac -version’,若彈出版本信息則說明安裝成功。java
此環境自帶SDK,方便下一步配置adb。
下載Android Studio的參考資料戳這裏
若是以上過程當中Android SDK的下載時間過長,想手動配置,相關參考資料戳這裏android
總之,咱們須要獲得Android SDK的環境及其路徑。shell
在Android Studio中查看SDK路徑的方法見下圖:bash
終端中輸入‘adb’,會出現提示-bash: abd: command not found,故咱們此時須要添加adb命令到環境變量中:
(1)終端中輸入‘touch .bash_profile’建立文件;
(2)輸入‘open -e .bash_profile’打開文件;
(3)在文件中設置:網絡
ANDROID_HOME=/Users/xxx/Library/Android/sdk
(即以前獲得的SDK路徑)
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
以後直接關閉文本窗口(會自動保存);
(4)輸入‘source .bash_profile’更新文件;
(5)再次輸入‘adb’,出現adb命令參數解釋,代表配置成功。oracle
若使用真機,用USB將手機和Mac鏈接,在手機端進行操做:
(1)選擇USB鏈接方式爲設備文件管理;
(2)設置->開啓開發者選項->勾選‘USB調試’(真機和模擬器上皆需進行)。app
在終端中輸入’adb devices‘,此時已鏈接設備列表下應存在設備序列號;我使用的網易木木的模擬器,可看到工具
⚠️注意,若首次操做成功,但以後存在檢測不到鏈接設備的狀況,可能須要重啓服務,具體操做是:
a、在終端下,輸入‘cd Users/xxx/Library/Android/sdk/platform-tools’來到adb所在目錄下;
b、再依次輸入‘adb kill-server‘和’adb start-server’來重啓服務;
c、以後再輸入‘adb devices’,通常即可檢測到鏈接設備。學習
⚠️另外,部分真機可能存在檢測不到的狀況,可進行建立、修改adb_usb.ini文件,操做以下:
a、在終端中輸入‘system_profiler SPUSBDataType’,找到手機的Vendor ID並記錄;
b、在終端中輸入‘vi ~/.android/adb_usb.ini’,建立並打開文本,按‘I’鍵可對文本進行編輯,向文本中添加記錄的Vendor ID(若添加多個,需確保每一個id佔一行且文本中無空行),完成後按‘esc’鍵,而後鍵入‘:wq!’,便可保存並退出文本。完成此步後將發現路徑/Users/xxx/.android下存在adb_usb.ini文件;
c、將手機拔掉從新接入Mac,重複4.(1)(2),在終端中輸入‘adb kill-server’,而後輸入‘adb start-server’,再次輸入‘adb devices’查看是否識別到設備。
【附】.android是隱藏目錄,須要開啓隱藏目錄顯示,開啓方式爲:
在終端中輸入‘defaults write com.apple.finder AppleShowAllFiles -bool true’,退出終端;而後單擊窗口左上角的蘋果標誌->強制退出->Finder->從新啓動,選擇‘這臺Mac’,搜索框中輸入user,來到用戶->xxx(當前用戶名)下便可看到隱藏文件們。
完成以上操做後就可進行monkey測試了,每次只能對一臺設備進行測試。
若想對多臺設備同時進行測試,可戳此參見
此外,鏈接一臺設備時,終端輸入‘adb shell’便可進入命令環境;若鏈接了多臺設備,輸入‘adb -s 設備序列號 shell’進入命令環境;‘exit’可退出當前命令環境。
adb shell monkey [-p 包名] [其餘參數] [-v] 測試次數 [> /user/…/result.txt](注:‘> /user/…/result.txt’可將結果打印到文本中)
(1)在Mac上完成環境配置,安裝並啓動模擬器,確保經過‘adb devices’可檢測到emulator;
(2)將待測應用程序的apk文件放到platform-tools文件夾下,在終端中輸入:
'cd /Users/xxx/Library/Android/sdk/platform-tools'來到此路徑下,再輸入‘adb install 應用程序名.apk’,程序將安裝在模擬器上;操做及結果以下:
(3)保持模擬器打開,終端保持platform-tools目錄下,並輸入‘adb logcat>log.txt’,將新建log.txt,終端則在當前屏幕下顯示日誌內容(目前爲空);
(4)點擊模擬器中的待測程序,待其打開後來到終端,按下‘ctrl+c’停止adb logcat命令;
(5)打開log.txt,查找關鍵字‘displayed’,找到到相似‘Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms
‘的結果,其中,com.mm.android.hsy就是包名;
(6)終端輸入‘adb shell’進入命令模式,輸入一個基本命令(啓動指定的應用程序,並向其發送1000個僞隨機事件): monkey -p 包名 -v 1000
,觀察模擬器界面,發現app頁面開始進行測試。若app發生crash,查看終端,可看到相似以下結果:
⚠️可是,工做中爲了保證測試數量的完整進行,咱們通常不會在發生錯誤時馬上退出壓力測試,因此須要利用事件(參數)選項來擴充命令。例如可擴充爲:
monkey -p 包名 -s 1000 --ignore-crashes --ignore-timeouts -vv 2000 > 日誌路徑
此命令翻譯爲天然語言是:monkey做用於此包,產生時間序列的種子序列值定爲1000,運行中忽略程序崩潰、超時,同時監視本地程序崩潰,日誌的詳細信息級別爲二級,產生2000個點擊事件,相關日誌會保存在所寫路徑中,搜索關鍵字‘crash’或‘anr’便可查看發生錯誤的部分(本人未能成功保存日誌,是手動將終端中的日誌內容拷貝到文本中的OTZ)。
monkey -help:可查看參數說明列表。參數選項有:
(1)-p 包名1 -p 包名2 … :指定一或多個待測試的包,若不指定則測試中可打開任意app;
(2)-v:指定打印日誌的詳細程度,有‘-v’,'-v -v','-v -v -v'三個級別;
(3)-s seed值:在測試中,雖然用戶操做序列(每次操做按必定的順序所組成的一系列操做)是隨機生成的,但只要對同一個包指定相同的Seed值,就能使測試事件相同,可用於排錯。因此也說這個操做序列是僞隨機的。若不添加此參數,結果中會自動生成seed值;
(4)–-throttle 毫秒數:指定操做(即事件)間的時延,單位是毫秒;
(5)–-ignore-crashes:使得操做序列能夠所有執行完,而不會在發生崩潰時就終止程序進程;
(6)–ignore-timeouts:使得操做序列能夠所有執行完,而不會在發生ANR(Android Not Responding)時就終止程序進程;
(7)–-ignore-security-exceptions:使得操做序列能夠所有執行完,而不會在發生許可錯誤時(如證書許可,網絡許可等)時就終止程序進程;
(8)–-kill-process-after-error:使得當應用程序發生錯誤時中止運行並保持在當前狀態,即僅是靜止在發生錯誤時的狀態,而不是結束該應用程序的進程;
(9)–-monitor-native-crashes:指定監視並報告應用程序發生崩潰的本地代碼;
(10)–-pct-事件1 事件百分比1 -pct-事件2 事件百分比2 … :用於指定某類事件數目佔總事件數目的百分比;
其中所指定事件參數選項可爲:
-flip(點擊事件)
-touch(觸摸事件是一個down-up事件)
-motion(動做事件由一個down事件、一系列的僞隨機事件和一個up事件組成)
-trackball(軌跡事件,在屏幕上進行隨機拖動)
-nav(基本導航事件,如上下左右鍵)
-majornav(主要導航事件,一般引起圖形界面中的動做)
-syskeys(系統按鍵事件指如系統按鍵Home、Back、Start Call、End Call及volumeControl)
-appswitch(啓動activity事件)
-anyevent(其它類型事件)
注意,各事件類型的百分比總數不能超過100。
通常咱們能夠一次發送5萬次隨機事件的請求,每一個請求之間的間隔爲150毫秒,測試大約會進行40min,完成之後就能夠查看日誌。
日誌中可能的錯誤:
更詳細的日誌內容和分析舉例可參見:連接描述
結束語:本人在實踐中仍有不少困惑未能解決,如沒法經過參數選項來減小系統事件,等。若你們有興趣,能夠深刻探究,或去網絡查閱MonkeyRunner測試的學習資料。 在此要感謝網絡上全部提供資料的大神,也請你們多多指教和分享,謝謝。