Adb命令的使用以及monkey命令的使用
之前對安卓手機上的APP做了monkey測試,今天來總結一下如何使用安卓自帶的monkey命令去做測試。
首先,PC端要對安卓手機進行monkey測試的話,必須要有以下條件:
1.電腦中必須配有ADB的環境才能進行操作。
2.手機連線電腦時要開啟USB除錯模式,否則ADB命令進行檢測連線裝置時是無法檢測到的。
其次是adb外掛的安裝,adb安裝包在網上有很多資源,隨便找一個網站下載即可,但是下載後我們怎麼才能安裝呢?
首先將下載的壓縮包進行解壓,解壓後,我們需要將它放置如圖目錄下。
在我的電腦中,我的cmd命令進入後預設是AZ這個資料夾,所以將其放入AZ目錄下,為什麼要這樣做,因為放在其他目錄中我們執行ADB命令是找不到命令的,所以我們需要將其放置在這個目錄下。
然後我們就可以開始操作了(前提是手機已經連線好)
怎麼判斷我們的手機已經連線了呢?
輸入:adb devices
就可以檢視我們的裝置是否連線了。這裡注意一個問題,如果命令輸入後報
* daemon not running. starting it now on port 5037 *
這樣一個錯,那就是adb命令使用的是5037埠,而5037被佔用了,我們需要查出來是誰佔用了這個程式,並且KILL掉這個程式,具體操作如下:
先輸入:netstat -ano
找出佔用了埠的程式和它的PID,然後
輸入:Taskkill /f/pid xxx
就可以關掉佔用5307埠的程式,就可以使用adb了
判斷手機連線成功後,我們就可以進行操作了,但是又一個問題來了,我們如何確定我們要執行的程式在手機內部叫什麼名字呢?
如果手機中檔案不多,我們可以
輸入:adb shell pm list package -f
這個命令可以檢視手機中包的名字和路徑,但是他有個侷限性就是我們檔案太多,不知道路徑的情況下是無法得知我們需要執行程式的包名的。
這時候我們只需要開啟我們需要執行的APP,然後
輸入:adb shell dumpsyswindow w | findstr \/ | findstr name=
就可以檢視我們要執行程式的包名了。
得知包名後,我們就可以對APP進行monkey測試了
Monkey命令引數介紹
1) 引數: -p
引數-p用於約束限制,用此引數指定一個或多個包(Package,即App)。指定
包之後,Monkey將只允許系統啟動指定的APP。如果不指定包,Monkey將允許系統啟動裝置中的所有APP。
* 指定一個包: adb shell monkey -pcom.htc.Weather 100
說明:com.htc.Weather為包名,100是事件計數(即讓Monkey程式模擬100次隨機使用者事件)。
* 指定多個包:adb shell monkey -pcom.htc.Weather –p com.htc.pdfreader -pcom.htc.photo.widgets 100
* 不指定包:adb shell monkey 100
說明:Monkey隨機啟動APP併發送100個隨機事件。
* 要檢視裝置中所有的包,在CMD視窗中執行以下命令:
>adbshell
#cddata/data
#ls
2) 引數: -v
用於指定反饋資訊級別(資訊級別就是日誌的詳細程度),總共分3個級別,分別對應的引數如下表所示:
日誌級別Level0
示例adb shellmonkey -p com.htc.Weather –v 100
說明 預設值,僅提供啟動提示、測試完成和最終結果等少量資訊
日誌級別Level 1
示例adb shellmonkey -p com.htc.Weather –v -v 100
說明 提供較為詳細的日誌,包括每個傳送到Activity的事件資訊
日誌級別Level 2
示例adb shellmonkey -p com.htc.Weather –v -v –v 100
說明 最詳細的日誌,包括了測試中選中/未選中的Activity資訊
3)引數: -s
用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的。
* 示例:
Monkey測試1:adb shell monkey -p com.htc.Weather –s 10 100
Monkey測試2:adbshell monkey -p com.htc.Weather–s 10 100
兩次測試的效果是相同的,因為模擬的使用者操作序列(每次操作按照一定的先後順序所組成的一系列操作,即一個序列)是一樣的。操作序列雖然是隨機生成的,但是隻要我們指定了相同的Seed值,就可以保證兩次測試產生的隨機操作序列是完全相同的,所以這個操作序列偽隨機的;
4) 引數: --throttle <毫秒>
用於指定使用者操作(即事件)間的時延,單位是毫秒;
* 示例:adb shell monkey -pcom.htc.Weather –throttle 3000 100
5) 引數: --ignore-crashes
用於指定當應用程式崩潰時(Force& Close錯誤),Monkey是否停止執行。如果使用此引數,即使應用程式崩潰,Monkey依然會發送事件,直到事件計數完成。
* 示例1:adbshellmonkey -p com.htc.Weather --ignore-crashes 1000
測試過程中即使Weather程式崩潰,Monkey依然會繼續傳送事件直到事件數目達到1000為止;
* 示例2:adbshellmonkey -p com.htc.Weather 1000
測試過程中,如果Weather程式崩潰,Monkey將會停止執行。
6)引數: --ignore-timeouts
用於指定當應用程式發生ANR(Application No Responding)錯誤時,Monkey是否停止執行。如果使用此引數,即使應用程式發生ANR錯誤,
Monkey依然會發送事件,直到事件計數完成。
7) 引數: --ignore-security-exceptions
用於指定當應用程式發生許可錯誤時(如證書許可,網路許可等),Monkey是否停止執行。如果使用此引數,即使應用程式發生許可錯誤,
Monkey依然會發送事件,直到事件計數完成。
8) 引數: --kill-process-after-error
用於指定當應用程式發生錯誤時,是否停止其執行。如果指定此引數,當應用程式發生錯誤時,應用程式停止執行並保持在當前狀態(注意:應用程式僅是靜止在發生錯誤時的狀態,系統並不會結束該應用程式的程序)。
9) 引數: --monitor-native-crashes
用於指定是否監視並報告應用程式發生崩潰的原生代碼。
10) 引數: --pct-{+事件類別}{+事件類別百分比}
用於指定每種類別事件的數目百分比(在Monkey事件序列中,該類事件數目佔總事件數目的百分比)
這些是我們進行操作時一般會用到的引數。執行過程中,在dos命令裡日誌顯示只有一小部分,我們就需要在我們編寫的命令列後再加上>log.txt就可以在我們儲存adb路徑中自動生成日誌,方便我們進行檢視。
比如:
Adb shell -p com.htc.xxx -v -v -v -s 2505000>log.txt
上面語句的意思就是,對com.htc.xxx隨機操作5000次,send值為250,並且列印level 2日誌,並且將日誌儲存到log.txt。
命令講完後,我們來講一講如何檢視日誌。
當日志生成後,我們需要進入日誌當中檢視是否有APP崩潰記錄或者無響應記錄。崩潰記錄查詢”CRASH”,無響應記錄查詢”ANR”,記憶體洩露問題搜尋"GC"(需進一步分析),異常問題搜尋“Exception”(如果出現空指標,NullPointerException,需格外重視)。
為了進一步分析問題的來源,可以找到Log中出現問題處的前一次Switch,隨後根據Log主要是檢視相關的Activity。
下面我就把我昨天執行後的日誌拿出來:
進入日誌後,會顯示
:Monkey: seed=250count=3500
:AllowPackage:com.text.app.hospitalassistant
上面表示了點選了3500次,執行seed值為250,對甘肅婦幼這個APP進行了操作。
// Eventpercentages:
// 0: 15.0% 0:觸控事件百分比,即引數–pct-touch
// 1: 10.0% 1:滑動事件百分比,即引數–pct-motion
// 2: 2.0% 2:縮放事件百分比,即引數–pct-pinchzoom
// 3: 15.0% 3:軌跡球事件百分比,即引數–pct-trackball
// 4: -0.0% 4:螢幕旋轉事件百分比,即引數–pct-rotation
// 5: 25.0% 5:基本導航事件百分比,即引數–pct-nav
// 6: 15.0% 6:主要導航事件百分比,即引數–pct-majornav
// 7: 2.0% 7:系統事件百分比,即引數–pct-syskeys
// 8: 2.0% 8:Activity啟動事件百分比,即引數–pct-appswitch
// 9: 1.0% 9:鍵盤翻轉事件百分比,即引數–pct-flip
// 10: 13.0% 10:其他事件百分比,即引數–pct-anyevent
後面我用中文翻譯寫了出來,這樣可以看出在點選這麼多下後,自動執行操作的各種比例。
以上就是我這幾天總結的adb與monkeyAPP自動化測試的使用方法與問題。測試是可以執行的,但是在執行過程中,總是會點選手機頂部的下拉框,有時候會影響測試結果,比如把wifi關了,然後軟體是依賴於wifi環境的,關掉wifi之後直接崩潰。這個問題暫時還沒有解決,但是隻要在過程中不關閉wifi那就不會影響測試結果。
還有一個問題就是對日誌的檢視還是比較難看懂,就是知道錯誤,也不知道是哪個地方出了錯誤。雖然有操作記錄,但是並不知道點選的哪個地方,所以還在查閱資料中,日後如果解決了這個問題,我會繼續把文件補全。