Monkey框架(測試方法篇) - monkey測試實例

1、常規的穩定性測試          

測試背景:
這是一個海外的合做項目,被測程序是Android應用(App)。測試但願經過Monkey來模擬用戶長時間的隨機操做,檢查被測應用是否會出現異常(應用崩潰或者無響應)。
測試腳本:
adb shell monkey -p com.xxx.xxx --pct-touch 40 --pct-motion 25 --pct-appswitch
10 --pct-rotation 5 -s 12358 --throttle 400 --ignore-crashes --ignore-timeouts
-v 500000
顯而易見,這個Monkey測試的命令相比上一節提到的要複雜得多,主要是對一些操做事件作了限制,從而減小了Monkey僞隨機化的無效操做。這體如今如下幾個方面。

1)使用-p參數來制定測試應用的包名(Package)

由於被測程序是一個特定的Android應用程序,須要指定被測程序的包名。指定包名後,Monkey會根據包名找到對應的應用,並啓動其main activity,而後執行Monkey測試。
技巧
查找應用包名的方法有不少,這裏簡單列舉幾個經常使用方法:
(1)經過pm命令查看。
在命令行窗口輸入:
>adb shell
>pm list package
此時將列出手機上全部的應用包名,在列表中找到要測試的應用包名便可。
(2)經過查看APK源碼下的AndroidManifest.xml文件。
(3)經過aapt命令查看。
(4)經過adb logcat抓取當前Android機運行的App的包名。

2)使用--pct-xxx參數限制Monkey執行的事件類型和佔比

前面已經說了,這個測試的目的是但願模擬用戶操做,所以須要讓Monkey執行的事件儘量地接近用戶的常規操做,這樣才能夠最大限度地發現用戶使用過程當中可能出現的問題。所以須要對Monkey執行的事件百分比作一些調整。
觸摸事件和手勢事件是用戶最多見的操做,因此經過--pct-touch和--pct-motion將這兩個事件的佔比調整到40%與25%;目標應用包含了多個Activity,爲了能覆蓋大部分的Activity,因此經過--pct-appswitch將Activity切換的事件佔比調整到10%;被測應用以前在測試中出現過很多橫豎屏之間切換的問題,這個場景也必須關注,所以經過--pct-rotation把橫豎屏切換事件調整到10%。

3)使用-s參數來指定命令執行的seed值

Monkey會根據seed值來生成對應事件流,同一個seed生成的事件流是徹底相同的。這裏指定了seed值,是爲了測試發現問題時,便於進行問題復現。

4)使用--throttle參數來控制Monkey每一個操做之間的時間間隔

指定操做之間的時間間隔,一方面是但願能更接近用戶的操做場景,正經常使用戶操做都會有必定的時間間隔;另外一方面也是不但願由於過於頻繁的操做而致使系統崩潰,尤爲是在比較低端的手機上執行測試時。所以經過--throttle設置Monkey每一個操做固定延遲0.4秒。

5)使用--ignore-crash和--ignore-timeouts參數使Monkey遇到意外時能繼續執行

在執行Monkey測試時,會由於應用的崩潰或沒有響應而意外終止,因此須要在命令中增長限制參數--ignore-crash和--ignore-timeouts,讓Monkey在遇到崩潰或沒有響應的時候,能在日誌中記錄相關信息,並繼續執行後續的測試。

6)使用-v指定log的詳細級別

Monkey的日誌輸出有3個級別:默認的是level 0, -v -v日誌級別爲level 1, -v -v日誌級別爲level 2。日誌的級別越高,其詳細程度也越高。爲了方便問題的定位,將日誌級別設置爲level2。
在常規的穩定性測試中,雖然能夠自定義各類事件的操做佔比,但畢竟是隨機事件流。在實際測試過程當中,不免會遇到Monkey點了咱們不但願它點擊的地方,好比誤點了工具欄致使網絡斷開的狀況等。當測試過程當中Wi-Fi斷開時,是否有可能自動重連呢?這在後面會講到

2、自定義腳本的穩定性測試                          

常規Monkey測試執行的是隨機的事件流,但若是隻是想讓Monkey測試某個特定場景(執行固定的事件流)呢?這時候就須要用到自定義腳本了,Monkey支持執行用戶自定義腳本的測試,用戶只須要按照Monkey腳本的規範編寫好腳本,存放到手機上,啓動Monkey經過-f scriptfile參數調用腳本便可。
Monkey自定義腳本的編寫模板如代碼清單4-1所示。
代碼清單4-1 Monkey自定義腳本的編寫模板
#頭文件,控制Monkey發送消息的參數,固定寫便可
#腳本類型,通常不用更改
type=raw events
#腳本執行次數,可是因爲Monkey命令自己能夠指定執行次數,因此這裏的設置是不生效的
count=10
#命令執行速率,速率也能夠經過Monkey命令設置,這裏的設置是不生效的
speed=1.0
#如下爲Monkey命令
start data>>
LaunchActivity(pkg_name, cl_name)
DispatchPress(KEYCODE_HOME)
 
monkey腳本常見API
 
技巧
Monkey腳本只能經過座標的方式來定位點擊和移動事件的屏幕位置,這裏就須要提早獲取座標信息。獲取座標信息的方法不少,最簡單的方法就是打開手機中的開發人員選項,打開「顯示指針位置」。隨後,在屏幕上的每次操做,在導航欄上都會顯示座標信息
 
下面來看一個簡單的例子:
這裏要測試的是應用寶App,測試的操做是打開應用寶,點擊輸入框,輸入「yyb」,點擊搜索。搜索完成後,點擊返回鍵返回應用寶首頁。
首先,將在本地編寫須要的測試腳本命名爲monkey.script(文件格式無要求),腳本內容如代碼清單4-2所示。
代碼清單4-2 Monkey自定義腳本實現進入應用寶進行搜索
 
#啓動測試
type = user
count = 49
speed = 1.0
start data >>
#啓動應用寶
LaunchActivity(com.tencent.android.qqdownloader, com.tencent.assistant.activity.
SplashActivity)
UserWait(2000)
#點擊搜索框
Tap(463,150,1000)
UserWait(2000)
#輸入字母「yyb」
DispatchString(yyb)
UserWait(2000)
#點擊搜索
Tap(960,150,1000)
UserWait(2000)
#點擊返回鍵返回首頁
DispatchPress(KEYCODE_BACK)
其次,將文件push到手機或模擬器的sdcard中:
>adb push monkey.script /sdcard/
最後,執行腳本:
>adb shell monkey -f /sdcard/monkey.script -v 1
 
若是須要重複執行某個腳本,只要在monkey啓動命令中修改執行次數便可。例如
>adb shell monkey -f /sdcard/monkey.script -v 10
 

3、結合輔助命令,獲取更多信息                        

常規測試只要記錄下Monkey日誌,再分析Monkey日誌檢查是否有異常便可。可是,不少時候,測試除了想知道執行過程是否有異常,還須要能獲取執行過程當中的一些詳細信息或性能數據,好比想知道Monkey執行過程當中是否存在內存泄漏,須要獲取內存信息。這時候就須要藉助一些輔助的命令來獲取更多信息了。下面列舉了幾種Monkey測試中經常使用的輔助命令,使用方法也很是簡單,只要在執行Monkey的同時,另起一個CMD命令行窗口輸入對應命令執行便可。
❑ 獲取logcat日誌信息:
adb shell logcat -v time>log.txt
❑ 獲取內存信息:
adb shell dumpsys meminfo <進程名>
❑ 獲取CPU消耗信息:
adb shell top -n 1 |find「進程名」
❑ 獲取電量信息:
adb shell dumpsys battery
❑ 獲取GPU信息:
GPU信息命令:adb shell dumpsys gfxinfo <進程名>
❑ 獲取流量信息:
adb shell cat/proc/uid_stat/<被測應用的uid>/tcp_rcv
技巧
如何獲取被測應用的UID
步驟1:查看被測應用的進程ID(PID)
adb shell ps | grep <被測應用包名>
步驟2:查看被測應用的用戶ID(UID)
adb shell cat /proc/$pid/status

4、Monkey測試策略制定思路             

前面介紹了幾種常見的Monkey測試方法,但在實際項目中,選擇哪一種Monkey測試策略,則須要根據實際項目的狀況來作判斷。主要是看測試目的及被測應用自身的特色。假如咱們想測試瀏覽器的雙指縮放功能是否有異常,那就須要選擇--pct-pinchzoom參數,調大雙指縮放事件的佔比進行Monkey測試;假如咱們想驗證ROM的橫豎屏切換功能是否正常,那就須要選擇--pct-rotation參數,調大橫豎屏切換事件的佔比進行Monkey測試;假如咱們想驗證重複某種特定操做時,應用是否會存在異常,那能夠選擇-f參數,自定義Monkey腳本進行驗證;假如咱們想驗證長時間操做時應用是否會存在內存泄漏,那就須要結合-hprof參數和dumpsys meminfo <進程名>進行Monkey測試。
總之,Monkey測試策略是須要依據測試目的和被測程序的特色來制定的。
相關文章
相關標籤/搜索