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/
監控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 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