monkey測試

1,Monkey Test簡介

什麼是monkey test? 
如其名,像猴子一樣,雖然不懂什麼,但是可以亂點一通。 
是的,他的一大特色就是可以亂點一通!!!!!!! 
就在規定的次數範圍內做任何隨機的操作,隨機操作包括點擊、滑動、Application切換、橫豎屏、應用關閉等等,用戶能做的操作統統可以模擬;!! 
所以簡單說就是 “壓力測試”

官方介紹文檔地址,點這裏

那要準備點什麼嗎?

Monkey的tools是一個命令行工具,當連接Android設備時,只要在命令行裏輸入相應命令就能運行tools; 
像下面這樣:

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">adb <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">shell</span> monkey -v <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

Monkey test跑出來crash的bug等級永遠爲1,版本release前,Monkey跑出的結果中crash要爲0。

業內標準:final release前,Monkey跑完的總次數應爲25W次,其結果裏不允許有nullPointException出現.

2,Monkey test的使用流程

你可以直接在Android Studio的底部的Terminal裏面輸入指令的。 
如果現在手機連接着的話。 
如果顯示沒有ADB這個命令,那麼你就配置下環境,在path裏面加多 ; 你的SDK路徑/platform-tools 
因爲adb.exe就在這個文件夾裏面

這裏寫圖片描述

3,簡單的Monkey腳本示例

這裏寫圖片描述

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">adb <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">shell</span> monkey -v <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">10</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

其中10代表運行腳本的操作次數爲10次,若seed不指定值默認爲0;

後面兩行爲intent的描述,運行了Android基本的LAUNCHER主進程,LAUNCHER主進程之後運行了MONKEY進程;

Event percentages,因爲命令中只加了一個限制條件,次數爲10,當其餘參數沒有添加時,就如上圖百分比出現;

//Money finished 完成。

4,Monkey test實例1

這裏寫圖片描述

第一個-s emulator-5554 設備的序列號; 
-p com.lovebizhi.wallpaper-1 要測試對象的package name(adb shell data/data), 若測試多個對象,則應爲-p package_name1 -p package_name2; 
–pct-xxx 用來設定每個事件在測試中的百分比,百分比總和不能超過100%; 
–pct-touch 調整觸摸事件的百分比 
–pct-motion 調整動作事件的百分比 
–pct-trackball 調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨着點擊) 
–pct-nav 調整“基本”導航事件的百分比(導航事件由來自方向輸入設備的up/down/left/right組成) 
–pct-majormav 調整“主要”導航事件的百分比(這些導航事件通常引發圖形界面中的動作) 
第二個-s 同樣的seed值(seed值由自己定義,相當於一個文件的文件名,monkey的操作順序 
相當於文件)有同樣的隨機序列,復現問題時,需要monkey用同樣的操作步驟重新跑一遍, 
可以在日誌的第一行看到seed值;

–throttle 設定事件發生的間隔,不設置時,在android系統極限內操作,若手機性能較低,容易出現系統無響應,最佳的時間間隔在300或者500,單位是毫秒;

-v 指定Log的詳細程度,共有三個級別: 
-v 日誌級別爲level 0 
-v -v 日誌級別爲level 1 
-v -v -v 日誌級別爲level 2 日誌的詳細程度越來越詳細

Monkey tools在Android內只能針對Activity做測試,不能對service做測試。

tips:

     adb devices 可以獲取設備id

     adb shell data/data獲取應用包的名稱

Monkey test中只能指定activity屬性的應用包進行測試,當出現指定的應用程序不是activity的時候,monkey會出現以下log,並終止運行: 
這裏寫圖片描述

5,Monkey test實例2

想要跑完腳本後再去總結過程中出現的crash或者系統無響應, 
需要指定參數--ignore-crashes --ignore-timeouts, 
若不指定,遇到問題就會停止運行,效率會降低。

當且僅當設備有滾輪時需要設定–pct-trackball,如果沒有滾輪需設置爲0。

monkey可以不指定-p後的應用,若爲了有針對的跑需要指定。

6,檢查結果

這裏寫圖片描述

查找關鍵字crash

//sending event 表示目前已經執行的測試次數

查看有效crash,注意crash:後的進程(pid),及其後的package name是被測對象;Java.lang.NullPointerException下會給出錯誤在開發工程中的第幾行。

tips:

指定要保存log的路徑(> d:\test.txt)可以進入D盤下的test.txt進行crash關鍵字的篩選 

注意事項:

在進行monkey的測試時,最好不進行adb的操作; 
跑monkey時需要記錄3個log: 
monkey的log(重新指向到某個txt中), 
dump system的log(查看系統佔有), 
android本身的log logcat。

後記

你可能覺得這種亂點亂好的測試不好,希望可以控制下點那裏,輸入什麼等等,那就有了下面這個 
MonkeyRunner,也是Android SDK提供的測試工具。

嚴格意義上來說MonkeyRunner其實是一個Api工具包,比Monkey強大,可以編寫測試腳本來自定義數據、事件。

缺點是腳本用Python來寫,對測試人員來說要求較高,有比較大的學習成本。

或者你也可以用Robotium來生自動生成操作 
這個就是記錄你所有的操作的一個記錄軟件!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章