1. 程式人生 > 其它 >adb&monkey&monkeyScript

adb&monkey&monkeyScript

adb install 應用程式.apk 首次安裝
adb install -r 應用程式.apk 覆蓋安裝( -r刪除舊的安裝新的)

解除安裝應用程式:adb uninstall apk包的主包名

adb重啟: adb kill-server
adb start-server

獲取root許可權: adb root
將裝置改為可讀可寫: adb remount
獲取模擬器或手機中的檔案:adb pull
adb pull /data/anr/traces.txt c:
向模擬器或手機中放入檔案:adb push
adb push c:\police_db.sql /data/anr/

檢視adb幫助資訊:adb / adb help

監控CPU的命令:adb shell top
監控包含tencent程序的CPU:adb shell top | findstr tencent > c:\cpute.txt

列印所有軟體包:adb shell pm list packages
清除快取:adb shell pm clear com.tct.launcher

adb shell am start -n packagename/launchableactivity(啟動應用)

adb shell input tap 20 120
adb shell text 15889406905

adb shell input keyevent KEYCODE_TAB
adb shell input swipe 40 720 2 720


adb shell monkey -p com.xx -v --seed 12233 200

adb shell monkey -p com.xx -v -s 12233 200
adb shell monkey -p com.xx -p com.xx.xx -v 12233 200 (同時跑兩個包)
adb shell monkey -p com.x.xy -v --thelter 1000 100(ms)

adb shell monkey 100 --throttle 500 --randomize-throttle


說明:執行一百次monkey隨機事件,每次事件的間隔在0到500毫秒之間不固定


adb shell monkey -p com.x.xy --pct-touch 10 --pct-motion 30 -v 100(指定事件百分比)
adb shell monkey -p com.x.xy -v --ignore-crashes --ignore-timeouts --ignore-security-exception 100(ms)

設定事件百分比,所有的百分比加起來不能超過100%
0:觸控事件百分比,即引數–pct-touch
1:滑動事件百分比,即引數–pct-motion
2:縮放事件百分比,即引數–pct-pinchzoom
5:軌跡球事件百分比,即引數–pct-trackball
4:螢幕旋轉事件百分比,即引數–pct-rotation
3:基本導航事件百分比,即引數–pct-nav
6:主要導航事件百分比,即引數–pct-majornav
7:系統事件百分比,即引數–pct-syskeys
8:Activity啟動事件百分比,即引數–pct-appswitch
9:鍵盤翻轉事件百分比,即引數–pct-flip
10:其他事件百分比,即引數–pct-anyevent

–ignore-crashes:忽略程式崩潰,設定此選項後,Monkey會執行完所有的事件,不會因crash而停止。
–ignore-timeouts:忽略程式無響應,設定此選項後,Monkey會執行完所有的事件,不會因ANR而停止
–ignore-native-crashes 忽略monkey本身的異常,直到事件執行完畢
–ignore-security-exceptions:忽略證書或認證異常,設定此選項後,Monkey會執行完所有的事件,不會因認證或證書異常而停止
–monitor-native-crashes:監視系統中原生代碼發生的崩潰
-v -v -v:每個-v都將增加反饋資訊的級別,共3個級別,-v -v -v將提供最詳細的設定資訊
-s: 用於指定偽隨機數生成器的seed值,如果seed相同,則兩次Monkey測試所產生的事件序列也相同的

殺monkey程序

adb shell ps | grep monkey
adb shell kill pid

#檢視apk包名
aapt dump badging D:\ceshi.apk
aapt dump badging D:\ceshi.apk > D:/log.txt

檢視應用包名
adb shell logcat | findstr "cmp="
adb shell dumpsys window | findstr mCurrentFocus

android log 輸出量巨大,所以定義了四個log緩衝區(adb logcat 預設獲取system and main)

radio 輸出通訊系統的log
system 輸出系統元件的log
events 輸出event的log
main 輸出java層的log

#截圖和錄屏

adb shell screencap -p /sdcard/1.jpg(截圖)
adb shell screenrecord /sdcard/demo.mp4(錄屏預設180s,按crtl+c結束)
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4(錄屏10s)

adb pull /sdcard/demo.mp4 D:\
adb shell wm size(獲取解析度)
adb shell dumpsys battery(獲取電量)
adb shell getprop ro.build.version.release(獲取安卓版本號)

adb shell top | finstr tencent (監控包含tencent程序的CPU)

adb shell top | findstr tencent > c:\cpute.txt

檢視端口占用
netstat -ano | findstr "3306"(win)
netstat -anp | grep "3306"(linux)
tasklist | findstr "PID"
taskkill /pid 14496
taskkill /f /pid 14496(強制殺程序)

ex:adb shell monkey -pcom.amaker.mp-s 300 --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 1000 > C:\java_monkey_log.txt

結果分析
1.ANR問題:在日誌中搜索“ANR”
2.崩潰問題:在日誌中搜索“Exception”, “Crash”, “error”,“ForceClosed”

MonkeyScript(按照需求跑monkey)

執行指令碼命令:adbshell monkey -f <MonkeyScript> <EventCount>

1:點選事件 DispatchPointer通過對指定位置座標資訊傳送單個手勢訊息,多用於模擬點選的操作。

DispatchPointer(longdownTime,longeventTime,intaction,floatx,floaty,floatpressure,floatsize,intmetaState,floatxPrecision,floatyPrecision,intdevice,intedgeFlags)

·action:事件是按下還是抬起,0表示按下,1表示抬起。

·x、y:表示當前事件觸發的X軸和Y軸的座標

·兩個DispatchPointer命令加在一起,分別表示按下和抬起,這表示一次點選操作,其餘的引數,統一設定為0即可。

2:按鍵訊息 DispatchKey

DispatchKey 主要是用於傳送一些Android 標準的 EventKey 按鍵訊息。但是需要寫對應的值。

DispatchKey(longdownTime,longeventTime,intaction,intcode,intrepeat,intmetaState,intdevice,intscancode)

具體的鍵值,可以通過官網查詢:

https://developer.android.com/reference/android/view/KeyEvent.html

DispatchKey 訊息的方法前面和DispatchPointer 一樣,所以同樣也只需要關注 action、x、y 三個引數即可。

3:開啟關閉軟鍵盤DispatchFlip

DispatchFlip命令用於開啟或者關閉軟鍵盤。它的方法簽名如下:

DispatchFlip(booleankeyboardOpen)

其中的引數,true表示開啟,false表示關閉。

4: 開啟指定的Activity LaunchActivity

LaunchActivity 命令用於開啟任意應用的一個頁面,但是前提條件是開啟的Activity 需要屬性 android:exported 被設定為true,才可以通過 LaunchActivity 開啟。它的方法簽名如下:

LaunchActivity(Stringpkg_name,Stringcl_name)

它的兩個引數,分別表示開啟的 App 的包名和開啟的 Activity 的名稱。

5: 等待 UserWait

UserWait 命令用於讓指令碼中斷執行一段時間。因為是指令碼執行,多個事件之間執行的速度會非常的快,有時候我們需要等待一些事件觸發之後的結果返回,需要等待一段時間之後,再繼續執行指令碼,這個時候就可以使用 UserWait 。

它的方法簽名如下:

UserWait(longsleeptime)

sleepTime 的單位是毫秒。

7 :輸入字串 DispatchString

DispatchString 命令用於向 Shell 輸入一個字串。

它的方法簽名如下:

DispatchString( input )

沒什麼好解釋的, input 就是一個字串即可,但是 MS 對中文的支援並不好,所以儘量輸入英文的測試資料。

8:執行 Shell 命令 RunCmd

RunCmd 命令用於在裝置上執行 shell 命令。當然這些 shell 命令必須是當前待測試裝置支援的 shell 命令。

它的方法簽名如下:

RunCmd ( cmd )

引數 cmd 就是需要執行的 shell 命令。

9:鍵盤事件 DispatchPress

DispatchPress 命令用於模擬敲擊鍵盤的事件。

它的方法簽名如下:

DispatchPress( keyName )

下面是對一個手機自帶計算器的一個小的操作的指令碼monkey.script

type= raw events

count= 10

speed= 1.0

start data >>

 

LaunchActivity(com.android.calculator2,com.android.calculator2.Calculator)

#touch 9

#按下9按鈕

DispatchPointer(0,0,0,400,700,0,0,0,0,0,0,0)

#彈起按鈕

DispatchPointer(0,0,1,400,700,0,0,0,0,0,0,0)

#等待1500ms

UserWait(1500)

#touch 6

#DispatchPointer(0,0,0,400,900,0,0,0,0,0,0,0)

#DispatchPointer(0,0,1,400,900,0,0,0,0,0,0,0)

DispatchPress(KEYCODE_6)

UserWait(1500)

#touch +

DispatchPress(KEYCODE_PLUS)

UserWait(1500)

#touch 7

Tap(100,700,50)

UserWait(1500)

#touch =

DispatchPointer(0,0,0,630,1100,0,0,0,0,0,0,0)

DispatchPointer(0,0,1,630,1100,0,0,0,0,0,0,0)

#DispatchPress(KEYCODE_EQUALS)

UserWait(1500)

 

#RotateScreen(2,1)螢幕翻轉180°

#UserWait(1500)

將monkey.txt push到手機(模擬器)裝置上面,執行以下命令:

adb push monkey.txt /data/temp(root狀態,如果push失敗,執行“adb shell chmod 777 /data/temp”)

adb shell monkey -f /data/temp/monkey.txt100