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


一、常規的穩定性測試          

測試背景:
這是一個海外的合作項目,被測程序是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斷開時,是否有可能自動重連呢?這在后面會講到

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

常規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
 

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

常規測試只要記錄下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

四、Monkey測試策略制定思路             

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM