qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          Android測試之Monkey

           Android官方對Monkey進(jìn)行了簡單介紹,網(wǎng)上也有不錯的翻譯。這部分就直接引用官網(wǎng)的原文和網(wǎng)友的翻譯。個人理解不同所以覺得有必要把官網(wǎng)原文貼出來。你也可以直接參見https://developer.android.com/tools/help/monkey.html。本文適合android測試人員閱讀,歡迎交流討論。
            Monkey是什么
            Monkey是可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中的程序。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實(shí)現(xiàn)對正在開發(fā)的應(yīng)用程序進(jìn)行壓力測試
            The Monkey is a program that runs on your emulator or device and generates pseudo-random streams of user events such as clicks, touches, or gestures, as well as a number of system-level events. You can use the Monkey to stress-test applications that you are developing, in a random yet repeatable manner.
            Monkey簡介
            Monkey是一個命令行工具,可以運(yùn)行在模擬器里或?qū)嶋H設(shè)備中。它向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流,實(shí)現(xiàn)對正在開發(fā)的應(yīng)用程序進(jìn)行壓力測試。Monkey包括許多選項(xiàng),它們大致分為四大類:
            · 基本配置選項(xiàng),如設(shè)置嘗試的事件數(shù)量。
            · 運(yùn)行約束選項(xiàng),如設(shè)置只對單獨(dú)的一個包進(jìn)行測試。
            · 事件類型和頻率。
            · 調(diào)試選項(xiàng)。
            在Monkey運(yùn)行的時候,它生成事件,并把它們發(fā)給系統(tǒng)。同時,Monkey還對測試中的系統(tǒng)進(jìn)行監(jiān)測,對下列三種情況進(jìn)行特殊處理:
            · 如果限定了Monkey運(yùn)行在一個或幾個特定的包上,那么它會監(jiān)測試圖轉(zhuǎn)到其它包的操作,并對其進(jìn)行阻止。
            · 如果應(yīng)用程序崩潰或接收到任何失控異常,Monkey將停止并報(bào)錯。
            · 如果應(yīng)用程序產(chǎn)生了應(yīng)用程序不響應(yīng)(application not responding)的錯誤,Monkey將會停止并報(bào)錯。
            按照選定的不同級別的反饋信息,在Monkey中還可以看到其執(zhí)行過程報(bào)告和生成的事件。
            The Monkey is a command-line tool that that you can run on any emulator instance or on a device. It sends a pseudo-random stream of user events into the system, which acts as a stress test on the application software you are developing.
            The Monkey includes a number of options, but they break down into four primary categories:
            Basic configuration options, such as setting the number of events to attempt.
            Operational constraints, such as restricting the test to a single package.
            Event types and frequencies.
            Debugging options.
            When the Monkey runs, it generates events and sends them to the system. It also watches the system under test and looks for three conditions, which it treats specially:
            If you have constrained the Monkey to run in one or more specific packages, it watches for attempts to navigate to any other packages, and blocks them.
            If your application crashes or receives any sort of unhandled exception, the Monkey will stop and report the error.
            If your application generates an application not responding error, the Monkey will stop and report the error.
            Depending on the verbosity level you have selected, you will also see reports on the progress of the Monkey and the events being generated.
            Monkey的基本用法
            可以通過開發(fā)機(jī)器上的命令行或腳本來啟動Monkey。由于Monkey運(yùn)行在模擬器/設(shè)備環(huán)境中,所以必須用其環(huán)境中的shell來進(jìn)行啟動。可以通過在每條命令前加上adb shell來達(dá)到目的,也可以進(jìn)入Shell后直接輸入Monkey命令。基本語法如下:
            $ adb shell monkey [options]
            如果不指定options,Monkey將以無反饋模式啟動,并把事件任意發(fā)送到安裝在目標(biāo)環(huán)境中的全部包。下面是一個更為典型的命令行示例,它啟動指定的應(yīng)用程序,并向其發(fā)送500個偽隨機(jī)事件:
          $ adb shell monkey -p your.package.name -v 500
          You can launch the Monkey using a command line on your development machine or from a script. Because the Monkey runs in the emulator/device environment, you must launch it from a shell in that environment. You can do this by prefacing adb shell to each command, or by entering the shell and entering Monkey commands directly.
          The basic syntax is:
          $ adb shell monkey [options] <event-count>
          With no options specified, the Monkey will launch in a quiet (non-verbose) mode, and will send events to any (and all) packages installed on your target. Here is a more typical command line, which will launch your application and send 500 pseudo-random events to it:
          $ adb shell monkey -p your.package.name -v 500
            命令選項(xiàng)參考
            --help
            列出簡單的用法。
            -v
            命令行的每一個-v將增加反饋信息的級別。Level 0(缺省值)除啟動提示、測試完成和最終結(jié)果之外,提供較少信息。Level 1提供較為詳細(xì)的測試信息,如逐個發(fā)送到Activity的事件。Level 2提供更加詳細(xì)的設(shè)置信息,如測試中被選中的或未被選中的Activity。
            事件
            -s <seed>
            偽隨機(jī)數(shù)生成器的seed值。如果用相同的seed值再次運(yùn)行Monkey,它將生成相同的事件序列。
            --throttle <milliseconds>
            在事件之間插入固定延遲。通過這個選項(xiàng)可以減緩Monkey的執(zhí)行速度。如果不指定該選項(xiàng),Monkey將不會被延遲,事件將盡可能快地被產(chǎn)成。
            --pct-touch <percent>
            調(diào)整觸摸事件的百分比(觸摸事件是一個down-up事件,它發(fā)生在屏幕上的某單一位置)。
            --pct-motion <percent>
            調(diào)整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的偽隨機(jī)事件和一個up事件組成)。
            --pct-trackball <percent>
            調(diào)整軌跡事件的百分比(軌跡事件由一個或幾個隨機(jī)的移動組成,有時還伴隨有點(diǎn)擊)。
            --pct-nav <percent>
            調(diào)整“基本”導(dǎo)航事件的百分比(導(dǎo)航事件由來自方向輸入設(shè)備的up/down/left/right組成)。
            --pct-majornav <percent>
            調(diào)整“主要”導(dǎo)航事件的百分比(這些導(dǎo)航事件通常引發(fā)圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵)
            --pct-syskeys <percent>
            調(diào)整“系統(tǒng)”按鍵事件的百分比(這些按鍵通常被保留,由系統(tǒng)使用,如Home、Back、Start Call、End Call及音量控制鍵)。
            --pct-appswitch <percent>
            調(diào)整啟動Activity的百分比。在隨機(jī)間隔里,Monkey將執(zhí)行一個startActivity()調(diào)用,作為最大程度覆蓋包中全部Activity的一種方法。
            --pct-anyevent <percent>
            調(diào)整其它類型事件的百分比。它包羅了所有其它類型的事件,如:按鍵、其它不常用的設(shè)備按鈕、等等。
            約束限制
            -p <allowed-package-name>
            如果用此參數(shù)指定了一個或幾個包,Monkey將只允許系統(tǒng)啟動這些包里的Activity。如果你的應(yīng)用程序還需要訪問其它包里的Activity(如選擇取一個聯(lián)系人),那些包也需要在此同時指定。如果不指定任何包,Monkey將允許系統(tǒng)啟動全部包里的Activity。要指定多個包,需要使用多個 -p選項(xiàng),每個-p選項(xiàng)只能用于一個包。
            -c <main-category>
            如果用此參數(shù)指定了一個或幾個類別,Monkey將只允許系統(tǒng)啟動被這些類別中的某個類別列出的Activity。如果不指定任何類別,Monkey將選 擇下列類別中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多個類別,需要使用多個-c選項(xiàng),每個-c選 項(xiàng)只能用于一個類別。
            調(diào)試
            --dbg-no-events
            設(shè)置此選項(xiàng),Monkey將執(zhí)行初始啟動,進(jìn)入到一個測試Activity,然后不會再進(jìn)一步生成事件。為了得到最佳結(jié)果,把它與-v、一個或幾個包約 束、以及一個保持Monkey運(yùn)行30秒或更長時間的非零值聯(lián)合起來,從而提供一個環(huán)境,可以監(jiān)視應(yīng)用程序所調(diào)用的包之間的轉(zhuǎn)換。
            --hprof
            設(shè)置此選項(xiàng),將在Monkey事件序列之前和之后立即生成profiling報(bào)告。這將會在data/misc中生成大文件(~5Mb),所以要小心使用它。
            --ignore-crashes
            通常,當(dāng)應(yīng)用程序崩潰或發(fā)生任何失控異常時,Monkey將停止運(yùn)行。如果設(shè)置此選項(xiàng),Monkey將繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成。
            --ignore-timeouts
            通常,當(dāng)應(yīng)用程序發(fā)生任何超時錯誤(如“Application Not Responding”對話框)時,Monkey將停止運(yùn)行。如果設(shè)置此選項(xiàng),Monkey將繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成。
            --ignore-security-exceptions
            通常,當(dāng)應(yīng)用程序發(fā)生許可錯誤(如啟動一個需要某些許可的Activity)時,Monkey將停止運(yùn)行。如果設(shè)置了此選項(xiàng),Monkey將繼續(xù)向系統(tǒng)發(fā)送事件,直到計(jì)數(shù)完成。
            --kill-process-after-error
            通常,當(dāng)Monkey由于一個錯誤而停止時,出錯的應(yīng)用程序?qū)⒗^續(xù)處于運(yùn)行狀態(tài)。當(dāng)設(shè)置了此選項(xiàng)時,將會通知系統(tǒng)停止發(fā)生錯誤的進(jìn)程。注意,正常的(成功的)結(jié)束,并沒有停止啟動的進(jìn)程,設(shè)備只是在結(jié)束事件之后,簡單地保持在最后的狀態(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)試器和它相連接。  使用Monkey流程
            總的來說使用monkey進(jìn)行測試是比較簡單的,只是需要做一些比較復(fù)雜的準(zhǔn)備工作。下面詳解測試步驟(很簡單的哦),所講內(nèi)容是建立在已經(jīng)配置好ADB環(huán)境的基礎(chǔ)上(如果這部分不清楚請先google一下先配置好環(huán)境,這里不做描述)。
            1、ADB連接Android測試設(shè)備。
            2、確定你要測試的應(yīng)用的PackageName。
            3、使用Monkey發(fā)一條測試命令。
            步驟詳解
            步驟確實(shí)很簡單吧。不敢保證讀者都明白如何去完成上面的步驟,這里講講每步如何做。
            1、ADB連接Android測試設(shè)備。
            如果你用的是模擬器,那么啟動后通常是已經(jīng)連在ADB上了。對于真機(jī)來說兩種方式都可以:
            方式一:使用USB把Android設(shè)備接到PC上,然后裝上驅(qū)動(不好找驅(qū)動的話就用豌豆莢吧)。
            方式二:首先得確保你的Android已經(jīng)成功root了,那么可以使用wifi無線連接。①下載一個wifi adb應(yīng)用裝在你的android設(shè)備上;②在android上打開wifi adb;③在pc上的命令行中輸入wifi adb中顯示的那部分內(nèi)容:adb connect 192.168.x.x,命令行中顯示connected 192.168.x.x那么說明連接好了。
            我比較喜歡方式二,這樣可以不用去下載驅(qū)動(主要是驅(qū)動很多都不穩(wěn)定),而且不傷害電池。長時間插在USB上對電池始終是不好的。只不過這種方式設(shè)備一旦休眠那么就可能需要重連。
            2、確定你要測試的應(yīng)用的PackageName。
            先說明一下這里講的方法是通用的,而網(wǎng)上其他方法獲取PackageName不然不通用(因?yàn)樗墙⒃趓oot的基礎(chǔ)上的,我不敢保證你的設(shè)備已經(jīng)root)。
            ①在android設(shè)備上點(diǎn)擊一下你要測試的設(shè)備,然后就不用操作設(shè)備了。
            ②在PC上的命令行輸入:adb logcat>D:/log.txt *:I
            在這里的D:/log.txt你可以改成其他的路徑,但是一定要先確保路徑下沒有這個文件,不然的話你以前的文件就被改掉了,一定要小心。
            ③按下Ctrl+c先停掉(為了避免過多的新信息)。打開剛剛的那個文件D:/log.txt。從文件最下面開始找下面格式的信息
            I/ActivityManager( 數(shù)字): Displayed 包名/類名: +數(shù)字ms
            例如我的信息如下:
            I/ActivityManager(  272): Displayed com.vane/.act.ActLauncher: +315ms
            不過你可能會發(fā)現(xiàn)有很多這種格式的信息,到底哪個才是你需要的呢,如果你嚴(yán)格按照剛剛的步驟做的話,那么很可能是最下面那條信息,即使不是那么也肯定是最下面幾條信息中的某一條,這需要你根據(jù)應(yīng)用進(jìn)行辨別。
            ④記下你剛剛得到的包名,例子中的包名為“com.vane”。馬上就會用。
            3、使用Monkey發(fā)一條測試命令。
            這一步就比較簡單了。直接在pc上的命令行輸入:adb shell monkey -p com.vane -v 50
            備注:上面命令中的com.vane就是之前獲得的包名;命令中的參數(shù)你可以自己根據(jù)需要參考上面的參數(shù)文檔進(jìn)行修改。
            4、觀察android設(shè)備,直到Monkey停止。
            5、如果應(yīng)用崩潰的話就好分析一下Monkey中的信息。
            總結(jié)
            Monkey的使用確實(shí)比較簡單,但是在測試中確有不小的作用,值得使用。
            文字若有不妥之處希望讀者提出你的寶貴意見。歡迎拍磚。

          posted on 2014-03-04 10:51 順其自然EVO 閱讀(361) 評論(0)  編輯  收藏 所屬分類: android

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 甘洛县| 临泽县| 丹东市| 栖霞市| 和林格尔县| 凌云县| 沁水县| 平乡县| 长治市| 包头市| 专栏| 绩溪县| 屏东市| 蓬溪县| 万全县| 雅安市| 灵台县| 兴城市| 庆云县| 茂名市| 双江| 玛沁县| 凉城县| 弥勒县| 会东县| 鄢陵县| 石棉县| 洪泽县| 囊谦县| 娄底市| 建宁县| 板桥市| 黎平县| 石台县| 永福县| 永定县| 兴业县| 镇雄县| 康保县| 杨浦区| 仁寿县|