標籤:服務 nav row pointer 驗證 需要 rowspan 事件流 並且
Android自動化的測試之Monkey工具
APP測試工作中經常會聽到領導說,APP壓力測試做了嗎?剛入行時,不知道什麼是 APP壓力測試,找了半天沒找到自己想要的。過了幾年,回頭想這個問題,發現牽扯了很多地方。下面我根據自己的理解說以下兩點:
- APP運行穩定性
- 伺服器高壓情況下APP運行穩定性
APP運行穩定性
舉個例子,我們開啟APP,隨便點兩下,APP就停止運行,那麼能說這個APP穩定嗎?當然實際情況下,不會點兩下就奔潰的。既然點兩下不會奔潰,那麼我點1萬次,或者10萬次呢?這個就不好做保證。當然我們既然提出這個需求,那麼我們肯定
不會傻傻的用手去一次一次點擊 APP。不用手有什麼 好的辦法呢?monkey是不錯的選擇!
伺服器高壓情況下APP運行穩定性
伺服器高壓這是前提條件。我們已經知道伺服器是高壓,那麼用戶端發送請求時,介面或者資料是否會出現錯亂等情況?甚至是奔潰~當然今天我們講的是monkey,所以這裡不再多談。
Monkey工具概述
Monkey是一個命令列工具,可以在任何模擬器執行個體或裝置上運行。它將偽隨機的使用者事件流發送到系統中,作為您正在開發的應用程式軟體的壓力測試。
Monkey包含許多選項,但它們分為四個主要類別:
- 基本配置選項,例如設定要嘗試的事件數目。
- 操作約束,例如將測試限制為單個包。
- 事件類型和頻率。
- 調試選項。
當Monkey運行時,它會建置事件並將它們發送到系統。它還可以監視 被測系統,並尋找三種特殊情況:
- 如果您已將Monkey限制為在一個或多個特定包中運行,則會監視嘗試導航到任何其他包並阻止它們。
- 如果您的應用程式崩潰或收到任何類型的未處理異常,Monkey將停止並報告錯誤。
- 如果您的應用程式產生一個沒有響應錯誤的應用程式,Monkey將停止並報告錯誤。
個人理解:monkey當然是猴子啦。我們上面提過一個需求,就是我想驗證我點1萬次或者10萬次APP時,APP是否會出現運行異常。當然這1萬次或者10萬次是隨機點擊的。想象這樣一個情境,把一個鍵盤放猴子面前,猴子是不是會亂敲鍵盤?所以我們把隨機執行系統上的任何任務叫做monkey測試。不過我這裡想了一下,把猴子變成其它動物不也是這樣嗎?難不成換成別的動物還能打出詩句不成~~哈哈,開玩笑了。我想應該是結合了猴子喜好亂動,但是二哈也喜歡啊。。。不糾結了。
monkey參數大全
類別 |
選項 |
描述 |
一般 |
--help |
列印一個簡單的使用指南。 |
-v |
命令列上的每個-v都會增加詳細資訊層級。層級0(預設值)提供的資訊除啟動通知,測試完成和最終結果外幾乎沒有。層級1提供有關測試回合的更多詳細資料,例如發送到您的活動的單個事件。層級2提供更詳細的設定資訊,例如選擇或未選擇用於測試的活動。 |
活動 |
-s <seed> |
偽隨機數發生器的種子值。如果您使用相同的種子值重新運行Monkey,它將產生相同的事件序列。 |
--throttle <milliseconds> |
在事件之間插入固定的延遲。您可以使用此選項來減慢Monkey的速度。如果未指定,則沒有延遲,並且事件儘可能快地產生。 |
--pct-touch <percent> |
調整觸摸事件的百分比。(觸摸事件是螢幕上單個位置的下行事件。) |
--pct-motion <percent> |
調整運動事件的百分比。(運動事件包括螢幕上某處的向下事件,一系列偽隨機運動和一個向上事件。) |
--pct-trackball <percent> |
調整軌跡球事件的百分比。(軌跡球事件由一個或多個隨機動作組成,有時隨後單擊。) |
--pct-nav <percent> |
調整“基本”導航事件的百分比。(導航事件由上/下/左/右組成,作為來自方向輸入裝置的輸入。) |
--pct-majornav <percent> |
調整“主要”導航事件的百分比。(這些導航事件通常會導致UI中的操作,例如5向鍵盤中的中心按鈕,後退鍵或菜單鍵。) |
--pct-syskeys <percent> |
調整“系統”鍵事件的百分比。(這些是通常保留供系統使用的密鑰,例如Home,Back,Start Call,End Call或Volume控制項。) |
--pct-appswitch <percent> |
調整活動啟動的百分比。在隨機的時間間隔內,Monkey將發出一個startActivity()調用,作為最大化包中所有活動的覆蓋範圍的方法。 |
--pct-anyevent <percent> |
調整其他類型事件的百分比。這是所有其他類型事件的全部功能,例如按鍵,裝置上其他較少使用的按鈕等等。 |
約束 |
-p <allowed-package-name> |
如果以這種方式指定一個或多個包,Monkey將只允許系統訪問這些包中的活動。如果您的應用程式需要訪問其他包中的活動(例如,選擇連絡人),您還需要指定這些包。如果您沒有指定任何包,Monkey將允許系統在所有包中啟動活動。要指定多個包,請多次使用-p選項 - 每個包一個-p選項。 |
-c <main-category> |
如果以這種方式指定一個或多個類別,則Monkey將僅允許系統訪問使用指定類別之一列出的活動。如果您未指定任何類別,Monkey將選擇使用Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY類別列出的活動。要指定多個類別,請多次使用-c選項 - 每個類別一個-c選項。 |
調試 |
--dbg-no-events |
指定後,Monkey將執行初始啟動到測試活動,但不會產生任何其他事件。為了獲得最佳效果,請結合-v,一個或多個程式包約束以及非零限制以使Monkey運行30秒或更長時間。這提供了一個環境,您可以在其中監視應用程式調用的包轉換。 |
--hprof |
如果設定,此選項將在Monkey事件序列之前和之後立即產生分析報告。這將在data / misc中產生大(~5Mb)檔案,因此請小心使用。有關追蹤檔案的更多資訊,請參見 Traceview。 |
--ignore-crashes |
通常,當應用程式崩潰或遇到任何類型的未處理異常時,Monkey將停止。如果指定此選項,Monkey將繼續向系統發送事件,直到計數完成。 |
--ignore-timeouts |
通常,當應用程式遇到任何類型的逾時錯誤(例如“應用程式無響應”對話方塊)時,Monkey將停止。如果指定此選項,Monkey將繼續向系統發送事件,直到計數完成。 |
--ignore-security-exceptions |
通常,當應用程式遇到任何類型的許可權錯誤時,Monkey將停止,例如,如果它嘗試啟動需要某些許可權的活動。如果指定此選項,Monkey將繼續向系統發送事件,直到計數完成。 |
--kill-process-after-error |
通常,當Monkey因錯誤而停止時,失敗的應用程式將保持運行狀態。設定此選項後,它將通知系統停止發生錯誤的進程。注意,在正常(成功)完成的情況下,啟動的進程不會停止,並且裝置在最終事件之後只是處於最後狀態。 |
--monitor-native-crashes |
觀看和報告Android系統機器碼中發生的崩潰。如果設定了--kill-process-after-error,系統將停止。 |
--wait-dbg |
阻止Monkey執行,直到調試器串連到它。 |
查看APP包名
使用包名查看器APP,連結:https://pan.baidu.com/s/1hx5JKlUiMWuTRz9AJ9xFpA 密碼:d0gq
monkey常用命令介紹
-p
用此參數指定一個或多個包。指定包之後,monkey將只允許系統啟動指定的app。如果不指定包, monkey將允許系統啟動裝置中的所有app(包括系統自身功能,如:電話、簡訊等也就是說everything都將可能被啟動)。
指定一個包:
adb shell monkey -p xxx.xxx.xxx 100 //xxx.xxx.xxx為包名,100為次數
指定多個包:
adb shell monkey -p xxx.xxx.xxx –p xxx.xxx.xxx 10 //xxx.xxx.xxx為包名,10為次數
-v
用於反饋記錄層級,也就是詳細程度,總共分3個層級,分別對應的參數如下 表所示:
adb shell monkey -p xxx.xxx.xxx -v 10 // 預設值,僅提供啟動提示、測試完成和最終結果等少量資訊
adb shell monkey -p xxx.xxx.xxx -v -v 10 // 提供較為詳細的日誌,包括每個發送到Activity的事件資訊
adb shell monkey -p xxx.xxx.xxx -v -v -v 10 // 最詳細的日誌,包括了測試中選中/未選中的Activity資訊
-s(隨機數種子)
用於指定偽隨機數產生器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。 樣本:指定seed值為1,運行次數為10
monkey測試1:adb shell monkey -p xxx.xxx.xxx –s 1 10 //指定seed值為1,運行次數為10 monkey測試2:adb shell monkey -p xxx.xxx.xxx –s 1 10 //指定seed值為1,運行次數為10
--throttle
每個事件結束後的間隔時間——降低系統的壓力(如不指定,系統會儘快的發送事件序列)。如:--throttle 100
adb shell monkey -p xxx.xxx.xxx --throttle 100 100 // 指定間隔時間為100ms,運行次數為100
--pct-touch <percent>
指定觸摸事件的百分比
adb shell monkey -p xxx.xxx.xxx --pct-touch 5 100 // 指定觸摸事件為5%,運行次數為100
--pct-motion <percent> (滑動事件)
adb shell monkey -p xxx.xxx.xxx --pct-motion 5 100 // 指定滑動事件為5%,運行次數為100
--pct-trackball <percent> (軌跡球事件)
adb shell monkey -p xxx.xxx.xxx --pct-trackball 5 100 // 指定軌跡球為5%,運行次數為100
--pct-nav<percent> (基本導航事件 up/down/left/right)
adb shell monkey -p xxx.xxx.xxx --pct-nav 5 100 // 指定基本導航事件為5%,運行次數為100
--pct-majornav<percent> (主要導航事件 back key 、 menu key)
adb shell monkey -p xxx.xxx.xxx --pct-majornav 5 100 // 指定主要導航事件為5%,運行次數為100
--pct-syskeys<percent> (系統按鍵事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
adb shell monkey -p xxx.xxx.xxx --pct-syskeys 5 100 // 指定系統按鍵事件為5%,運行次數為100
--ignore-crashes(忽略崩潰)
adb shell monkey -p xxx.xxx.xxx --ignore-crashes 100 // 忽略奔潰,運行次數為100
--ignore-timeouts(忽略逾時)
adb shell monkey -p xxx.xxx.xxx --ignore-timeouts 100 // 忽略逾時,運行次數為100
執行個體
1、事件、間隔時間、調試、輸出日誌整合
adb shell monkey -p xxx.xxx.xxx -s 1 --pct-touch 5 --throttle 100 --ignore-crashes --ignore-timeouts -v -v 10000 > D:\monkey_log.txt
// 指定包、設定seed值為1,觸摸事件5%,每個事件間隔時間100ms 忽略奔潰 忽略逾時 記錄層級為2級 10000次事件,儲存日誌到d盤monkey_log.txt
2、停止monkey運行
adb shell
ps | grep monkey
kill 5540
monkey日誌分析
日誌分析呢,我們主要看異常。常見的異常為ANR Exception
1. 程式無響應的問題: 在日誌中搜尋 “ANR”
2. 崩潰問題:在日誌中搜尋 “Exception” (如果出現null 指標, NullPointerException)
如所示:
monkey優缺點
優點肯定是簡單好用啦~缺點嗎,硬說的話我覺得有一個,比如我想單獨點擊APP某個頁面的某個地區,比如我只想點擊登入按鈕,那麼就不好做了,不過好像是可以寫指令碼解決的。之前研究過,給忘掉了。後面再用的話再進行補充。
2、Android自動化的測試之Monkey工具