Monkey框架(测试方法篇) - monkey测试实例
生活随笔
收集整理的這篇文章主要介紹了
Monkey框架(测试方法篇) - monkey测试实例
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、常規(guī)的穩(wěn)定性測試? ? ? ? ??
測試背景: 這是一個海外的合作項目,被測程序是Android應用(App)。測試希望通過Monkey來模擬用戶長時間的隨機操作,檢查被測應用是否會出現(xiàn)異常(應用崩潰或者無響應)。 測試腳本: 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測試的命令相比上一節(jié)提到的要復雜得多,主要是對一些操作事件做了限制,從而減少了Monkey偽隨機化的無效操作。這體現(xiàn)在以下幾個方面。1)使用-p參數(shù)來制定測試應用的包名(Package)
因為被測程序是一個特定的Android應用程序,需要指定被測程序的包名。指定包名后,Monkey會根據(jù)包名找到對應的應用,并啟動其main activity,然后執(zhí)行Monkey測試。 技巧 查找應用包名的方法有很多,這里簡單列舉幾個常用方法: (1)通過pm命令查看。 在命令行窗口輸入: >adb shell >pm list package 此時將列出手機上所有的應用包名,在列表中找到要測試的應用包名即可。 (2)通過查看APK源碼下的AndroidManifest.xml文件。 (3)通過aapt命令查看。 (4)通過adb logcat抓取當前Android機運行的App的包名。2)使用--pct-xxx參數(shù)限制Monkey執(zhí)行的事件類型和占比
前面已經說了,這個測試的目的是希望模擬用戶操作,因此需要讓Monkey執(zhí)行的事件盡可能地接近用戶的常規(guī)操作,這樣才可以最大限度地發(fā)現(xiàn)用戶使用過程中可能出現(xiàn)的問題。因此需要對Monkey執(zhí)行的事件百分比做一些調整。 觸摸事件和手勢事件是用戶最常見的操作,所以通過--pct-touch和--pct-motion將這兩個事件的占比調整到40%與25%;目標應用包含了多個Activity,為了能覆蓋大部分的Activity,所以通過--pct-appswitch將Activity切換的事件占比調整到10%;被測應用之前在測試中出現(xiàn)過不少橫豎屏之間切換的問題,這個場景也必須關注,因此通過--pct-rotation把橫豎屏切換事件調整到10%。3)使用-s參數(shù)來指定命令執(zhí)行的seed值
Monkey會根據(jù)seed值來生成對應事件流,同一個seed生成的事件流是完全相同的。這里指定了seed值,是為了測試發(fā)現(xiàn)問題時,便于進行問題復現(xiàn)。4)使用--throttle參數(shù)來控制Monkey每個操作之間的時間間隔
指定操作之間的時間間隔,一方面是希望能更接近用戶的操作場景,正常用戶操作都會有一定的時間間隔;另一方面也是不希望因為過于頻繁的操作而導致系統(tǒng)崩潰,尤其是在比較低端的手機上執(zhí)行測試時。因此通過--throttle設置Monkey每個操作固定延遲0.4秒。5)使用--ignore-crash和--ignore-timeouts參數(shù)使Monkey遇到意外時能繼續(xù)執(zhí)行
在執(zhí)行Monkey測試時,會因為應用的崩潰或沒有響應而意外終止,所以需要在命令中增加限制參數(shù)--ignore-crash和--ignore-timeouts,讓Monkey在遇到崩潰或沒有響應的時候,能在日志中記錄相關信息,并繼續(xù)執(zhí)行后續(xù)的測試。6)使用-v指定log的詳細級別
Monkey的日志輸出有3個級別:默認的是level 0, -v -v日志級別為level 1, -v -v日志級別為level 2。日志的級別越高,其詳細程度也越高。為了方便問題的定位,將日志級別設置為level2。 在常規(guī)的穩(wěn)定性測試中,雖然可以自定義各種事件的操作占比,但畢竟是隨機事件流。在實際測試過程中,難免會遇到Monkey點了我們不希望它點擊的地方,比如誤點了工具欄導致網絡斷開的情況等。當測試過程中Wi-Fi斷開時,是否有可能自動重連呢?這在后面會講到二、自定義腳本的穩(wěn)定性測試? ? ? ? ? ? ? ? ? ? ? ? ??
常規(guī)Monkey測試執(zhí)行的是隨機的事件流,但如果只是想讓Monkey測試某個特定場景(執(zhí)行固定的事件流)呢?這時候就需要用到自定義腳本了,Monkey支持執(zhí)行用戶自定義腳本的測試,用戶只需要按照Monkey腳本的規(guī)范編寫好腳本,存放到手機上,啟動Monkey通過-f scriptfile參數(shù)調用腳本即可。 Monkey自定義腳本的編寫模板如代碼清單4-1所示。 代碼清單4-1 Monkey自定義腳本的編寫模板 #頭文件,控制Monkey發(fā)送消息的參數(shù),固定寫即可 #腳本類型,一般不用更改 type=raw events #腳本執(zhí)行次數(shù),但是由于Monkey命令本身可以指定執(zhí)行次數(shù),所以這里的設置是不生效的 count=10 #命令執(zhí)行速率,速率也可以通過Monkey命令設置,這里的設置是不生效的 speed=1.0 #以下為Monkey命令 start data>> LaunchActivity(pkg_name, cl_name) DispatchPress(KEYCODE_HOME) … monkey腳本常見API 技巧 Monkey腳本只能通過坐標的方式來定位點擊和移動事件的屏幕位置,這里就需要提前獲取坐標信息。獲取坐標信息的方法很多,最簡單的方法就是打開手機中的開發(fā)人員選項,打開“顯示指針位置”。隨后,在屏幕上的每次操作,在導航欄上都會顯示坐標信息 下面來看一個簡單的例子: 這里要測試的是應用寶App,測試的操作是打開應用寶,點擊輸入框,輸入“yyb”,點擊搜索。搜索完成后,點擊返回鍵返回應用寶首頁。 首先,將在本地編寫需要的測試腳本命名為monkey.script(文件格式無要求),腳本內容如代碼清單4-2所示。 代碼清單4-2 Monkey自定義腳本實現(xiàn)進入應用寶進行搜索 #啟動測試 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/ 最后,執(zhí)行腳本: >adb shell monkey -f /sdcard/monkey.script -v 1 如果需要重復執(zhí)行某個腳本,只要在monkey啟動命令中修改執(zhí)行次數(shù)即可。例如 >adb shell monkey -f /sdcard/monkey.script -v 10三、結合輔助命令,獲取更多信息? ? ? ? ? ? ? ? ? ? ? ??
常規(guī)測試只要記錄下Monkey日志,再分析Monkey日志檢查是否有異常即可。但是,很多時候,測試除了想知道執(zhí)行過程是否有異常,還需要能獲取執(zhí)行過程中的一些詳細信息或性能數(shù)據(jù),比如想知道Monkey執(zhí)行過程中是否存在內存泄漏,需要獲取內存信息。這時候就需要借助一些輔助的命令來獲取更多信息了。下面列舉了幾種Monkey測試中常用的輔助命令,使用方法也非常簡單,只要在執(zhí)行Monkey的同時,另起一個CMD命令行窗口輸入對應命令執(zhí)行即可。 ? 獲取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測試策略,則需要根據(jù)實際項目的情況來做判斷。主要是看測試目的及被測應用自身的特點。假如我們想測試瀏覽器的雙指縮放功能是否有異常,那就需要選擇--pct-pinchzoom參數(shù),調大雙指縮放事件的占比進行Monkey測試;假如我們想驗證ROM的橫豎屏切換功能是否正常,那就需要選擇--pct-rotation參數(shù),調大橫豎屏切換事件的占比進行Monkey測試;假如我們想驗證重復某種特定操作時,應用是否會存在異常,那可以選擇-f參數(shù),自定義Monkey腳本進行驗證;假如我們想驗證長時間操作時應用是否會存在內存泄漏,那就需要結合-hprof參數(shù)和dumpsys meminfo <進程名>進行Monkey測試。 總之,Monkey測試策略是需要依據(jù)測試目的和被測程序的特點來制定的。轉載于:https://www.cnblogs.com/Chilam007/p/10941064.html
總結
以上是生活随笔為你收集整理的Monkey框架(测试方法篇) - monkey测试实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 服务器硬件知识补充
- 下一篇: 学计算机的ctrl,学会这些电脑快捷键,