【UI自动化测试】Mac下进行Monkey测试
一、對monkey壓力測試的簡介
monkey:是Android中的一命令行工具,對app的穩(wěn)定性和健壯性進行測試。
特點:1、測試對象為程序包,有一定局限性;2、偽隨機事件,不能自定義;3、可設(shè)置事件數(shù)量、類型、頻率。
適用情況:ANR和CRASH異常情況;低概率很難復(fù)現(xiàn)的異常。
二、環(huán)境搭建與配置
1、下載安裝JDK(Mac OS X):
http://www.oracle.com/technet...
成功后打開終端,輸入‘javac -version’,若彈出版本信息則說明安裝成功。
2、下載Android開發(fā)環(huán)境——Android Studio:
此環(huán)境自帶SDK,方便下一步配置adb。
下載Android Studio的參考資料戳這里
如果以上過程中Android SDK的下載時間過長,想手動配置,相關(guān)參考資料戳這里
總之,我們需要得到Android SDK的環(huán)境及其路徑。
在Android Studio中查看SDK路徑的方法見下圖:
3、配置adb環(huán)境
終端中輸入‘a(chǎn)db’,會出現(xiàn)提示-bash: abd: command not found,故我們此時需要添加adb命令到環(huán)境變量中:
(1)終端中輸入‘touch .bash_profile’創(chuàng)建文件;
(2)輸入‘open -e .bash_profile’打開文件;
(3)在文件中設(shè)置:
(即之前得到的SDK路徑)
export PATH=$PATH:$ANDROID_HOME/tools
export PATH=$PATH:$ANDROID_HOME/platform-tools
之后直接關(guān)閉文本窗口(會自動保存);
(4)輸入‘source .bash_profile’更新文件;
(5)再次輸入‘a(chǎn)db’,出現(xiàn)adb命令參數(shù)解釋,表明配置成功。
4、允許USB調(diào)試
若使用真機,用USB將手機和Mac連接,在手機端進行操作:
(1)選擇USB連接方式為設(shè)備文件管理;
(2)設(shè)置->開啟開發(fā)者選項->勾選‘USB調(diào)試’(真機和模擬器上皆需進行)。
5、檢測連接設(shè)備
在終端中輸入’adb devices‘,此時已連接設(shè)備列表下應(yīng)存在設(shè)備序列號;我使用的網(wǎng)易木木的模擬器,可看到
??注意,若首次操作成功,但之后存在檢測不到連接設(shè)備的情況,可能需要重啟服務(wù),具體操作是:
a、在終端下,輸入‘cd Users/xxx/Library/Android/sdk/platform-tools’來到adb所在目錄下;
b、再依次輸入‘a(chǎn)db kill-server‘和’adb start-server’來重啟服務(wù);
c、之后再輸入‘a(chǎn)db devices’,一般便可檢測到連接設(shè)備。
??另外,部分真機可能存在檢測不到的情況,可進行創(chuàng)建、修改adb_usb.ini文件,操作如下:
a、在終端中輸入‘system_profiler SPUSBDataType’,找到手機的Vendor ID并記錄;
b、在終端中輸入‘vi ~/.android/adb_usb.ini’,創(chuàng)建并打開文本,按‘I’鍵可對文本進行編輯,向文本中添加記錄的Vendor ID(若添加多個,需確保每個id占一行且文本中無空行),完成后按‘esc’鍵,然后鍵入‘:wq!’,即可保存并退出文本。完成此步后將發(fā)現(xiàn)路徑/Users/xxx/.android下存在adb_usb.ini文件;
c、將手機拔掉重新接入Mac,重復(fù)4.(1)(2),在終端中輸入‘a(chǎn)db kill-server’,然后輸入‘a(chǎn)db start-server’,再次輸入‘a(chǎn)db devices’查看是否識別到設(shè)備。
【附】.android是隱藏目錄,需要開啟隱藏目錄顯示,開啟方式為:
在終端中輸入‘defaults write com.apple.finder AppleShowAllFiles -bool true’,退出終端;然后單擊窗口左上角的蘋果標志->強制退出->Finder->重新啟動,選擇‘這臺Mac’,搜索框中輸入user,來到用戶->xxx(當前用戶名)下即可看到隱藏文件們。
完成以上操作后就可進行monkey測試了,每次只能對一臺設(shè)備進行測試。
若想對多臺設(shè)備同時進行測試,可戳此參見
此外,連接一臺設(shè)備時,終端輸入‘a(chǎn)db shell’即可進入命令環(huán)境;若連接了多臺設(shè)備,輸入‘a(chǎn)db -s 設(shè)備序列號 shell’進入命令環(huán)境;‘exit’可退出當前命令環(huán)境。
三、進行測試
1、基本語句:
adb shell monkey [-p 包名] [其他參數(shù)] [-v] 測試次數(shù) [> /user/…/result.txt](注:‘> /user/…/result.txt’可將結(jié)果打印到文本中)
2、在mumu模擬器下的簡單實例:
(1)在Mac上完成環(huán)境配置,安裝并啟動模擬器,確保通過‘a(chǎn)db devices’可檢測到emulator;
(2)將待測應(yīng)用程序的apk文件放到platform-tools文件夾下,在終端中輸入:
'cd /Users/xxx/Library/Android/sdk/platform-tools'來到此路徑下,再輸入‘a(chǎn)db install 應(yīng)用程序名.apk’,程序?qū)惭b在模擬器上;操作及結(jié)果如下:
(3)保持模擬器打開,終端保持platform-tools目錄下,并輸入‘a(chǎn)db logcat>log.txt’,將新建log.txt,終端則在當前屏幕下顯示日志內(nèi)容(目前為空);
(4)點擊模擬器中的待測程序,待其打開后來到終端,按下‘ctrl+c’中止adb logcat命令;
(5)打開log.txt,查找關(guān)鍵字‘displayed’,找到到類似‘Displayed com.mm.android.hsy/.ui.LoginActivity: +3s859ms‘的結(jié)果,其中,com.mm.android.hsy就是包名;
(6)終端輸入‘a(chǎn)db shell’進入命令模式,輸入一個基本命令(啟動指定的應(yīng)用程序,并向其發(fā)送1000個偽隨機事件): monkey -p 包名 -v 1000,觀察模擬器界面,發(fā)現(xiàn)app頁面開始進行測試。若app發(fā)生crash,查看終端,可看到類似如下結(jié)果:
??但是,工作中為了保證測試數(shù)量的完整進行,我們一般不會在發(fā)生錯誤時立刻退出壓力測試,所以需要利用事件(參數(shù))選項來擴充命令。例如可擴充為:
monkey -p 包名 -s 1000 --ignore-crashes --ignore-timeouts -vv 2000 > 日志路徑此命令翻譯為自然語言是:monkey作用于此包,產(chǎn)生時間序列的種子序列值定為1000,運行中忽略程序崩潰、超時,同時監(jiān)視本地程序崩潰,日志的詳細信息級別為二級,產(chǎn)生2000個點擊事件,相關(guān)日志會保存在所寫路徑中,搜索關(guān)鍵字‘crash’或‘a(chǎn)nr’即可查看發(fā)生錯誤的部分(本人未能成功保存日志,是手動將終端中的日志內(nèi)容拷貝到文本中的OTZ)。
3、命令參數(shù)簡介:(進入‘a(chǎn)db shell’命令模式)
monkey -help:可查看參數(shù)說明列表。參數(shù)選項有:
(1)-p 包名1 -p 包名2 … :指定一或多個待測試的包,若不指定則測試中可打開任意app;
(2)-v:指定打印日志的詳細程度,有‘-v’,'-v -v','-v -v -v'三個級別;
(3)-s seed值:在測試中,雖然用戶操作序列(每次操作按一定的順序所組成的一系列操作)是隨機生成的,但只要對同一個包指定相同的Seed值,就能使測試事件相同,可用于排錯。所以也說這個操作序列是偽隨機的。若不添加此參數(shù),結(jié)果中會自動生成seed值;
(4)–-throttle 毫秒數(shù):指定操作(即事件)間的時延,單位是毫秒;
(5)–-ignore-crashes:使得操作序列可以全部執(zhí)行完,而不會在發(fā)生崩潰時就終止程序進程;
(6)–ignore-timeouts:使得操作序列可以全部執(zhí)行完,而不會在發(fā)生ANR(Android Not Responding)時就終止程序進程;
(7)–-ignore-security-exceptions:使得操作序列可以全部執(zhí)行完,而不會在發(fā)生許可錯誤時(如證書許可,網(wǎng)絡(luò)許可等)時就終止程序進程;
(8)–-kill-process-after-error:使得當應(yīng)用程序發(fā)生錯誤時停止運行并保持在當前狀態(tài),即僅是靜止在發(fā)生錯誤時的狀態(tài),而不是結(jié)束該應(yīng)用程序的進程;
(9)–-monitor-native-crashes:指定監(jiān)視并報告應(yīng)用程序發(fā)生崩潰的本地代碼;
(10)–-pct-事件1 事件百分比1 -pct-事件2 事件百分比2 … :用于指定某類事件數(shù)目占總事件數(shù)目的百分比;
其中所指定事件參數(shù)選項可為:
-flip(點擊事件)
-touch(觸摸事件是一個down-up事件)
-motion(動作事件由一個down事件、一系列的偽隨機事件和一個up事件組成)
-trackball(軌跡事件,在屏幕上進行隨機拖動)
-nav(基本導航事件,如上下左右鍵)
-majornav(主要導航事件,通常引發(fā)圖形界面中的動作)
-syskeys(系統(tǒng)按鍵事件指如系統(tǒng)按鍵Home、Back、Start Call、End Call及volumeControl)
-appswitch(啟動activity事件)
-anyevent(其它類型事件)
注意,各事件類型的百分比總數(shù)不能超過100。
四、日志分析
一般我們可以一次發(fā)送5萬次隨機事件的請求,每個請求之間的間隔為150毫秒,測試大約會進行40min,完成以后就可以查看日志。
日志中可能的錯誤:
更詳細的日志內(nèi)容和分析舉例可參見:鏈接描述
結(jié)束語:本人在實踐中仍有很多困惑未能解決,如無法通過參數(shù)選項來減少系統(tǒng)事件,等。若大家有興趣,可以深入探究,或去網(wǎng)絡(luò)查閱MonkeyRunner測試的學習資料。在此要感謝網(wǎng)絡(luò)上所有提供資料的大神,也請大家多多指教和分享,謝謝。 超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術(shù)人生
總結(jié)
以上是生活随笔為你收集整理的【UI自动化测试】Mac下进行Monkey测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WRC 2017最值得关注的专题论坛之一
- 下一篇: 洗礼灵魂,修炼python(54)--爬