1. 程式人生 > >Adb命令的使用以及monkey命令的使用

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那就不會影響測試結果。

還有一個問題就是對日誌的檢視還是比較難看懂,就是知道錯誤,也不知道是哪個地方出了錯誤。雖然有操作記錄,但是並不知道點選的哪個地方,所以還在查閱資料中,日後如果解決了這個問題,我會繼續把文件補全。