2、Android自動化的測試之Monkey工具

來源:互聯網
上載者:User

標籤:服務   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工具

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.