編輯:關於Android編程
最近項目做完後,需要測試,坑爹的是公司招兩個月了,都沒有測試,於是選擇其他路徑,在網上找到了一個測試方法,即monkey命令行,通過此命令,選擇指定應用的報名,可以模仿點擊事件,完成測試。
Android官方對Monkey進行了簡單介紹,網上也有不錯的翻譯。這部分就直接引用官網的原文和網友的翻譯。
主要的命令行如下:
adb shell monkey -p cn.doolii.useng -v -v 10000 >F:\log.txt
此行代碼的意思是,-p 指定測試某個應用程序的包名 如cn.doolii.useng,-v 只顯示測試出的log等級,-v -v -v為最高級別,打出的log最為詳細。-v 10000 是指自動測試10000次,>F:\log.txt 是指將log以文本的格式輸出,即存在F盤下。可以打開。
Monkey是什麼
Monkey是可以運行在模擬器裡或實際設備中的程序。它向系統發送偽隨機的用戶事件流(如按鍵輸入、觸摸屏輸入、手勢輸入等),實現對正在開發的應用程序進行壓力測試。
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是一個命令行工具,可以運行在模擬器裡或實際設備中。它向系統發送偽隨機的用戶事件流,實現對正在開發的應用程序進行壓力測試。Monkey包括許多選項,它們大致分為四大類:
· 基本配置選項,如設置嘗試的事件數量。
· 運行約束選項,如設置只對單獨的一個包進行測試。
· 事件類型和頻率。
· 調試選項。
在Monkey運行的時候,它生成事件,並把它們發給系統。同時,Monkey還對測試中的系統進行監測,對下列三種情況進行特殊處理:
· 如果限定了Monkey運行在一個或幾個特定的包上,那麼它會監測試圖轉到其它包的操作,並對其進行阻止。
· 如果應用程序崩潰或接收到任何失控異常,Monkey將停止並報錯。
· 如果應用程序產生了應用程序不響應(application not responding)的錯誤,Monkey將會停止並報錯。
按照選定的不同級別的反饋信息,在Monkey中還可以看到其執行過程報告和生成的事件。
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的基本用法
可以通過開發機器上的命令行或腳本來啟動Monkey。由於Monkey運行在模擬器設備環境中,所以必須用其環境中的shell來進行啟動。可以通過在每條命令前加上adb shell來達到目的,也可以進入Shell後直接輸入Monkey命令。基本語法如下:
$ adb shell monkey [options]
如果不指定options,Monkey將以無反饋模式啟動,並把事件任意發送到安裝在目標環境中的全部包。下面是一個更為典型的命令行示例,它啟動指定的應用程序,並向其發送500個偽隨機事件:
$ 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 emulatordevice 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
命令選項參考
--help
列出簡單的用法。
-v
命令行的每一個-v將增加反饋信息的級別。Level 0(缺省值)除啟動提示、測試完成和最終結果之外,提供較少信息。Level 1提供較為詳細的測試信息,如逐個發送到Activity的事件。Level 2提供更加詳細的設置信息,如測試中被選中的或未被選中的Activity。
事件
-s seed
偽隨機數生成器的seed值。如果用相同的seed值再次運行Monkey,它將生成相同的事件序列。
--throttle milliseconds
在事件之間插入固定延遲。通過這個選項可以減緩Monkey的執行速度。如果不指定該選項,Monkey將不會被延遲,事件將盡可能快地被產成。
--pct-touch percent
調整觸摸事件的百分比(觸摸事件是一個down-up事件,它發生在屏幕上的某單一位置)。
--pct-motion percent
調整動作事件的百分比(動作事件由屏幕上某處的一個down事件、一系列的偽隨機事件和一個up事件組成)。
--pct-trackball percent
調整軌跡事件的百分比(軌跡事件由一個或幾個隨機的移動組成,有時還伴隨有點擊)。
--pct-nav percent
調整“基本”導航事件的百分比(導航事件由來自方向輸入設備的updownleftright組成)。
--pct-majornav percent
調整“主要”導航事件的百分比(這些導航事件通常引發圖形界面中的動作,如:5-way鍵盤的中間按鍵、回退按鍵、菜單按鍵)
--pct-syskeys percent
調整“系統”按鍵事件的百分比(這些按鍵通常被保留,由系統使用,如Home、Back、Start Call、End Call及音量控制鍵)。
--pct-appswitch percent
調整啟動Activity的百分比。在隨機間隔裡,Monkey將執行一個startActivity()調用,作為最大程度覆蓋包中全部Activity的一種方法。
--pct-anyevent percent
調整其它類型事件的百分比。它包羅了所有其它類型的事件,如:按鍵、其它不常用的設備按鈕、等等。
約束限制
-p allowed-package-name
如果用此參數指定了一個或幾個包,Monkey將只允許系統啟動這些包裡的Activity。如果你的應用程序還需要訪問其它包裡的Activity(如選擇取一個聯系人),那些包也需要在此同時指定。如果不指定任何包,Monkey將允許系統啟動全部包裡的Activity。要指定多個包,需要使用多個 -p選項,每個-p選項只能用於一個包。
-c main-category
如果用此參數指定了一個或幾個類別,Monkey將只允許系統啟動被這些類別中的某個類別列出的Activity。如果不指定任何類別,Monkey將選 擇下列類別中列出的Activity: Intent.CATEGORY_LAUNCHER或Intent.CATEGORY_MONKEY。要指定多個類別,需要使用多個-c選項,每個-c選 項只能用於一個類別。
調試
--dbg-no-events
設置此選項,Monkey將執行初始啟動,進入到一個測試Activity,然後不會再進一步生成事件。為了得到最佳結果,把它與-v、一個或幾個包約 束、以及一個保持Monkey運行30秒或更長時間的非零值聯合起來,從而提供一個環境,可以監視應用程序所調用的包之間的轉換。
--hprof
設置此選項,將在Monkey事件序列之前和之後立即生成profiling報告。這將會在datamisc中生成大文件(~5Mb),所以要小心使用它。
--ignore-crashes
通常,當應用程序崩潰或發生任何失控異常時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。
--ignore-timeouts
通常,當應用程序發生任何超時錯誤(如“Application Not Responding”對話框)時,Monkey將停止運行。如果設置此選項,Monkey將繼續向系統發送事件,直到計數完成。
--ignore-security-exceptions
通常,當應用程序發生許可錯誤(如啟動一個需要某些許可的Activity)時,Monkey將停止運行。如果設置了此選項,Monkey將繼續向系統發送事件,直到計數完成。
--kill-process-after-error
通常,當Monkey由於一個錯誤而停止時,出錯的應用程序將繼續處於運行狀態。當設置了此選項時,將會通知系統停止發生錯誤的進程。注意,正常的(成功的)結束,並沒有停止啟動的進程,設備只是在結束事件之後,簡單地保持在最後的狀態。
--monitor-native-crashes
監視並報告Android系統中本地代碼的崩潰事件。如果設置了--kill-process-after-error,系統將停止運行。
--wait-dbg
停止執行中的Monkey,直到有調試器和它相連接。
總的來說使用monkey進行測試是比較簡單的,只是需要做一些比較復雜的准備工作。下面詳解測試步驟(很簡單的哦),所講內容是建立在已經配置好ADB環境的基礎上(如果這部分不清楚請先google一下先配置好環境,這裡不做描述)。
1、ADB連接Android測試設備。
2、確定你要測試的應用的PackageName。
3、使用Monkey發一條測試命令。
步驟詳解
步驟確實很簡單吧。不敢保證讀者都明白如何去完成上面的步驟,這裡講講每步如何做。
1、ADB連接Android測試設備。
如果你用的是模擬器,那麼啟動後通常是已經連在ADB上了。對於真機來說兩種方式都可以:
方式一:使用USB把Android設備接到PC上,然後裝上驅動(不好找驅動的話就用豌豆莢吧)。
方式二:首先得確保你的Android已經成功root了,那麼可以使用wifi無線連接。①下載一個wifi adb應用裝在你的android設備上;②在android上打開wifi adb;③在pc上的命令行中輸入wifi adb中顯示的那部分內容:adb connect 192.168.x.x,命令行中顯示connected 192.168.x.x那麼說明連接好了。
我比較喜歡方式二,這樣可以不用去下載驅動(主要是驅動很多都不穩定),而且不傷害電池。長時間插在USB上對電池始終是不好的。只不過這種方式設備一旦休眠那麼就可能需要重連。
2、確定你要測試的應用的PackageName。
先說明一下這裡講的方法是通用的,而網上其他方法獲取PackageName不然不通用(因為他是建立在root的基礎上的,我不敢保證你的設備已經root)。
①在android設備上點擊一下你要測試的設備,然後就不用操作設備了。
②在PC上的命令行輸入:adb logcatDlog.txt I
在這裡的Dlog.txt你可以改成其他的路徑,但是一定要先確保路徑下沒有這個文件,不然的話你以前的文件就被改掉了,一定要小心。
③按下Ctrl+c先停掉(為了避免過多的新信息)。打開剛剛的那個文件Dlog.txt。從文件最下面開始找下面格式的信息
IActivityManager( 數字) Displayed 包名類名 +數字ms
例如我的信息如下:
IActivityManager( 272) Displayed com.vane.act.ActLauncher +315ms
不過你可能會發現有很多這種格式的信息,到底哪個才是你需要的呢,如果你嚴格按照剛剛的步驟做的話,那麼很可能是最下面那條信息,即使不是那麼也肯定是最下面幾條信息中的某一條,這需要你根據應用進行辨別。
④記下你剛剛得到的包名,例子中的包名為“com.vane”。馬上就會用。
3、使用Monkey發一條測試命令。
這一步就比較簡單了。直接在pc上的命令行輸入:adb shell monkey -p com.vane -v 50
備注:上面命令中的com.vane就是之前獲得的包名;命令中的參數你可以自己根據需要參考上面的參數文檔進行修改。
4、觀察android設備,直到Monkey停止。
5、如果應用崩潰的話就好分析一下Monkey中的信息。
A Service is an application component that can perform long-running operations in the
笑對人生,能穿透迷霧;笑對人生,能堅持到底;笑對人生,能化解危機;笑對人生,能照亮黑暗。 本講內容:自定義View(可以在布局文件多次用) 一、步驟:
先對上一遍的工具類,補充兩點:1、Client關閉異常如果沒有連接host就調用close()的話,會導致NullPointException,因為mInputStrea
一個朋友今天有這麼個需求(下圖),我覺得那自定義View來做還是很適合的,就做了下,順便和大家分享下,對於自定義View多練沒壞處麼。如果你看了前兩篇,那麼