寫完應(yīng)用之后,作完單元測(cè)試和功能測(cè)試,有必要對(duì)應(yīng)用的抗打擊能力做個(gè)測(cè)試,最好的方法是雇個(gè)“猴子”在測(cè)試,猴子可以胡亂瞎按鍵,在這種情況下,你的應(yīng)用是否還能正常工作呢?
Android 測(cè)試包中提供了一個(gè) Monkey 工具,就提供了“猴子”功能,不過(guò)比真”猴子“還要智能一些,你還可以指揮這個(gè)猴子, 比如按鍵的比例,觸發(fā)某個(gè)事件的頻率等等。
一個(gè)簡(jiǎn)單的用法,比如你的應(yīng)用程序的包名為:com.pstreets.navigator
可以使用 adb shell monkey -p com.pstreets.navigator -v 500
使用缺省的配置 向應(yīng)用發(fā)送 500 個(gè)隨機(jī)事件(包括按鍵,touch 事件,系統(tǒng)事件等),該命令會(huì)首先啟動(dòng)對(duì)應(yīng)的 Activity,然后向該應(yīng)用發(fā)送隨機(jī)事件:
http://wiki.jikexueyuan.com/project/android-test-course/images/17.1.jpg" alt="picutre17.1" />
Monkey 工具的詳細(xì)說(shuō)明如下:
它是一個(gè)命令行工具 ,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流,實(shí)現(xiàn)對(duì)正在開發(fā)的應(yīng)用程序進(jìn)行壓力測(cè)試。Monkey 包括許多選項(xiàng),它們大致分為四大類:
在 Monkey 運(yùn)行的時(shí)候,它生成事件,并把它們發(fā)給系統(tǒng)。同時(shí),Monkey 還對(duì)測(cè)試中的系統(tǒng)進(jìn)行監(jiān)測(cè),對(duì)下列三種情況進(jìn)行特殊處理:
按照選定的不同級(jí)別的反饋信息,在 Monkey 中還可以看到其執(zhí)行過(guò)程報(bào)告和生成的事件。
Monkey 基本用法
可以通過(guò)開發(fā)機(jī)器上的命令行或腳本來(lái)啟動(dòng) Monkey。由于 Monkey 運(yùn)行在模擬器/設(shè)備環(huán)境中,所以必須用其環(huán)境中的 shell 來(lái)進(jìn)行啟動(dòng)??梢酝ㄟ^(guò)在每條命令前加上 adb shell 來(lái)達(dá)到目的,也可以進(jìn)入 Shell 后直接輸入 Monkey 命令?;菊Z(yǔ)法如下:
$ adb shell monkey [options]
如果不指定 options,Monkey 將以無(wú)反饋模式啟動(dòng),并把事件任意發(fā)送到安裝 在目標(biāo)環(huán)境中的全部包。下面是一個(gè)更為典型的命令行示例,它啟動(dòng)指定的應(yīng)用程序,并向其發(fā)送 500 個(gè)偽隨機(jī)事件:
$ adb shell monkey -p your.package.name -v 500
–v
命令行的每一個(gè) -v 將增加反饋信息的級(jí)別。 Level 0( 缺省值 ) 除啟動(dòng)提示、測(cè)試完成和最終結(jié)果之外,提供較少信息。 Level 1 提供較為詳細(xì)的測(cè)試信息,如逐個(gè)發(fā)送到 Activity 的事件。 Level 2 提供更加詳細(xì)的設(shè)置信息,如測(cè)試中被選中的或未被選中的 Activity 。 事件
-s
偽隨機(jī)數(shù)生成器的 seed 值。如果用相同的 seed 值再次運(yùn)行 Monkey ,它將生成相同的事件序列。
–throttle
在事件之間插入固定延遲。通過(guò)這個(gè)選項(xiàng)可以減緩 Monkey 的執(zhí)行速度。如果不指定該選項(xiàng), Monkey 將不會(huì)被延遲,事件將盡可能快地被產(chǎn)成。
–pct-touch
調(diào)整觸摸事件的百分比 ( 觸摸事件是一個(gè) down-up 事件,它發(fā)生在屏幕上的某單一位置 ) 。
–pct-motion
調(diào)整動(dòng)作事件的百分比 ( 動(dòng)作事件由屏幕上某處的一個(gè) down 事件、一系列 的偽隨機(jī)事件和一個(gè) up 事件組成 ) 。
–pct-trackball
調(diào)整軌跡事件的百分比 ( 軌跡事件由一個(gè)或幾個(gè)隨機(jī)的移動(dòng)組成,有時(shí)還伴隨有點(diǎn)擊 ) 。
–pct-nav
調(diào)整“基本”導(dǎo)航事件的百分比 ( 導(dǎo)航事件由來(lái)自方向輸入設(shè)備的 up/down/left/right 組成 ) 。
–pct-majornav
調(diào)整“主要”導(dǎo)航事件的百分比 ( 這些導(dǎo)航事件通常引發(fā)圖形界面中的動(dòng)作,如: 5-way 鍵盤的中間按鍵、回退按鍵、菜單按鍵 )
–pct-syskeys
調(diào)整“系統(tǒng)”按鍵事件的百分比 ( 這些按鍵通常被保留,由系統(tǒng)使用,如 Home 、 Back 、 Start Call 、 End Call 及音量控制鍵 ) 。
–pct-appswitch
調(diào)整啟動(dòng) Activity 的百分比。在隨機(jī)間隔里, Monkey 將執(zhí)行一個(gè) startActivity () 調(diào)用,作為最大程度覆蓋包中全部 Activity 的一種方法。
–pct-anyevent
調(diào)整其它類型事件的百分比。它包羅了所有其它類型的事件,如:按鍵、其它不常用的設(shè)備按鈕、等等。 約束限制
-p
如果用此參數(shù)指定了一個(gè)或幾個(gè)包, Monkey 將只允許系統(tǒng)啟動(dòng)這些包里的 Activity 。如果你的應(yīng)用程序還需要訪問(wèn)其它包里的 Activity( 如選擇取一個(gè)聯(lián)系人 ) ,那些包也需要在此同時(shí)指定。如果不指定任何包, Monkey 將允許系統(tǒng)啟動(dòng)全部包里的 Activity 。要指定多個(gè)包,需要使用多個(gè) -p 選項(xiàng),每個(gè) -p 選項(xiàng)只能用于一個(gè)包。
-c
如果用此參數(shù)指定了一個(gè)或幾個(gè)類別, Monkey 將只允許系統(tǒng)啟動(dòng)被這些類別中的某個(gè)類別列出的 Activity 。如果不指定任何類別, Monkey 將選擇下列類別中列出的 Activity : Intent.CATEGORY_LAUNCHER 或 Intent.CATEGORY_MONKEY 。要指定多個(gè)類別,需要使用多個(gè) -c 選項(xiàng),每個(gè) -c 選項(xiàng)只能用于一個(gè)類別。
調(diào)試
–dbg-no-events
設(shè)置此選項(xiàng), Monkey 將執(zhí)行初始啟動(dòng),進(jìn)入到一個(gè)測(cè)試 Activity ,然后不會(huì)再進(jìn)一步生成事件。為了得到最佳結(jié)果,把它與 -v 、一個(gè)或幾個(gè)包約束、以及一個(gè)保持 Monkey 運(yùn)行 30 秒或更長(zhǎng)時(shí)間的非零值聯(lián)合起來(lái),從而提供一個(gè)環(huán)境,可以監(jiān)視應(yīng)用程序所調(diào)用的包之間的轉(zhuǎn)換。
–hprof
設(shè)置此選項(xiàng),將在 Monkey 事件序列之前和之后立即生成 profiling 報(bào)告。這將會(huì)在 data/misc 中生成大文件 (~5Mb) ,所以要小心使用它。
–ignore-crashes
通常,當(dāng)應(yīng)用程序崩潰或發(fā)生任何失控異常時(shí), Monkey 將停止運(yùn)行。如果設(shè)置此選項(xiàng), Monkey 將繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成。
–ignore-timeouts
通常,當(dāng)應(yīng)用程序發(fā)生任何超時(shí)錯(cuò)誤 ( 如“ Application Not Responding ”對(duì)話框 ) 時(shí), Monkey 將停止運(yùn)行。如果設(shè)置此選項(xiàng), Monkey 將繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成。
–ignore-security-exceptions
通常,當(dāng)應(yīng)用程序發(fā)生許可錯(cuò)誤 ( 如啟動(dòng)一個(gè)需要某些許可的 Activity) 時(shí), Monkey 將停止運(yùn)行。如果設(shè)置了此選項(xiàng), Monkey 將繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成。
–kill-process-after-error
通常,當(dāng) Monkey 由于一個(gè)錯(cuò)誤而停止時(shí),出錯(cuò)的應(yīng)用程序?qū)⒗^續(xù)處于運(yùn)行狀態(tài)。當(dāng)設(shè)置了此選項(xiàng)時(shí),將會(huì)通知系統(tǒng)停止發(fā)生錯(cuò)誤的進(jìn)程。注意,正常的 ( 成功的 ) 結(jié)束,并沒(méi)有停止啟動(dòng)的進(jìn)程,設(shè)備只是在結(jié)束事件之后,簡(jiǎn)單地保持在最后的狀態(tài)。
–monitor-native-crashes
監(jiān)視并報(bào)告 Android 系統(tǒng)中本地代碼的崩潰事件。如果設(shè)置了 –kill-process-after-error ,系統(tǒng)將停止運(yùn)行。
–wait-dbg
停止執(zhí)行中的 Monkey ,直到有調(diào)試器和它相連接。