環境準備:android
一、安裝jdkshell
二、安裝安卓sdk網絡
三、配置環境變量:app
ANDROID_HOME=../sdk(sdk的目錄下)tcp
PATH=%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\android-4.4.2;測試
注意:jdk和sdk的版本必須一致(要麼都是32位,要麼都是64位)ui
安裝genymotionspa
一、雙擊genymotion-2.8.0.exe開始軟件的安裝,默認顯示English指針
二、點擊OK,設置選擇軟件的安裝位置,默認爲C:\Program Files\Genymobile\Genymotion,也能夠選擇別的位置日誌
三、設置開始菜單文件的名稱,默認爲Genymotion
四、創建桌面快捷方式圖標
五、繼續下一步安裝便可
六、完成後將將translations文件夾放到安裝目錄下,覆蓋原來的文件,默認安裝文件夾位置在:
C:\Program Files\Genymobile\Genymotion
七、運行程序就是中文版了
使用教程
一、在主界面上點擊Add按鈕
二、而後在彈出來的界面輸入你註冊的帳號和密碼而後點擊connect按鈕,在咱們下載的時候填寫的郵箱中你們能夠看到兩個郵件,在裏面的連接能夠激活,應該是Genymotion那個郵件,點擊裏面的Click here,而後帳號就是你的郵箱,密碼就是咱們填寫的密碼,而後會選擇手機型號,看你們本身的選擇啦
三、而後再添加虛擬機設備,基本都會自動跳出來,不須要你們本身手動點擊的,記住修更名稱
四、點擊next,一直next,等模擬器安裝完成
五、而後再給已經建立好的模擬器命名
六、名好了之後再回到模擬器的主窗口,選擇→添加的模擬器,這就看咱們剛纔是怎麼命名的了,好比Nexus 7,而後點擊Play啓動模擬器
七、啓動Nexus 7,幾秒鐘的事,速度很是快
八、打開genymotion,切換到Use custom Android SDK tools,而後選擇本身安裝的sdk的路徑,而後重啓genymotion
九、把百度助手的ListenerApk.apk拖到genymotion裏,打開百度助手,,進入以下的頁面
十、點擊建立測試按鈕,進入建立項目頁面,輸入任務名稱,點擊查看安裝的app的按鈕,選擇一個須要測試的apk,cpu正常區間和內存正常區間勾選到一個合適的範圍(視頻類、直播類的cpu必定很高),點擊提交按鈕,以下圖設置
十一、提交後會自動啓動apk,而後點擊點擊測試按鈕,而後選擇一個視頻或者業務場景,跑一會而後中止,跳轉到以下圖所示
十二、點擊查看詳情按鈕,能夠看到下圖
1三、點擊內存右側的大於號,能夠看到三條線,分別是Pss、Uss和Dss,若是沒有Pss,看Iss,Pss是實際佔用的物理內存,再點擊cpu右側的大於號,能夠看到一條曲線,把異常次數的標記出來,cpu和內存的範圍是在第10步裏設置的範圍,20%和20M,再點擊電量右側的大於號,電量正常,什麼都不顯示,再看流量,正常有兩條線,上傳和接收,全部的圖表均可以保存到本地,而後生成報告
下面過濾語句只顯示優先級爲warning或更高的日誌信息
adb logcat *:W > 1.txt
monkey的特色
一、運行時機:通常是產品穩定後(首輪功能測試完成的夜間進行)
二、須要知道packageName
三、目的:主要測試產品是否存在崩潰問題和ANR問題
Monkey的基本命令
一、標準monkey命令:adb shell monkey -p com.android.calculator2 -v 50
-p:packageName
-v:日誌級別
50:事件數
二、adb shell monkey -p com.android.calculator2 -v -v --pct-touch 50 --throttle 500 100
--pct-touch 50:設置整個過程當中點擊操做所佔的百分比
--throttle 500:每一個事件間隔500ms
三、adb shell monkey -p packagename --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v 1000000 > monkey_test.txt
adb shell monkey 100,100個事件,未指定包名,monkey執行出現錯誤就中止了不會往下進行
adb shell monkey -p 包名 100,100個事件,若是沒有問題會出現Events injected 100,輸入adb shell "logcat|grep START",再點擊要測試的app就能夠找到包名和activity
adb shell monkey -p 包名 --throttle 500 100,100個事件,--throttle 500是指事件和事件之間的間隔是500ms
adb shell monkey -p 包名 --throttle 500 -v 100,100個事件 -v是表明日誌等級,3個v是日誌最全的
adb shell monkey -p 包名 --throttle 500 -v -v --pct-touch 50 100,--pct-touch是觸摸事件佔50%
ignore是忽略,能夠忽略crashes,也能夠忽略timeouts等,由於只要遇到crashes就會中止,因此要加上ignore crashes
Monkey的日誌級別
參數:-v,用於指定反饋信息級別(信息級別就是日誌的詳細程度),總共分3個級別,分別對應的參數以下表所示:
一、日誌級別 Level 0
示例:adb shell monkey -p com.htc.Weather -v 100
說明:缺省值,僅提供啓動提示、測試完成和最終結果等少許信息
二、日誌級別 Level 1
示例:adb shell monkey -p com.htc.Weather -v -v 100
說明:提供較爲詳細的日誌,包括每一個發送到Activity的事件信息
三、日誌級別 Level 2
示例:adb shell monkey -p com.htc.Weather -v -v -v 100
說明:最詳細的日誌,包括了測試中選中/未選中的Activity信息
Monkey的其餘參數
--ignore-crashes 用於指定當應用程序崩潰時(Force&Close錯誤),Monkey是否中止運行。若是使用此參數,即便應用程序崩潰,Monkey依然會發送事件,直到事件計數完成
--ignore-timeouts 用於指定當應用程序發生ANR(Application No Responding)錯誤時,Monkey是否中止運行。若是使用此參數,即便應用程序發生ANR錯誤,Monkey依然會發送事件,直到事件計數完成
--ignore-security-exceptions 用於指定當應用程序發生許可錯誤時(如證書許可,網絡許可等),Monkey是否中止運行。若是使用此參數,即便應用程序發生許可錯誤,Monkey依然會發送事件,直到事件計數完成
--kill-process-after-error 用於指定當應用程序發生錯誤時,是否中止其運行。若是指定此參數,當應用程序發生錯誤時,應用程序中止運行並保持在當前狀態(注意:應用程序僅是靜止在發生錯誤時的狀態,系統並不會結束該應用程序的進程)
--monitor-native-crashes 用於指定是否監視並報告應用程序發生崩潰的本地代碼
Monkey的參數 -s
參數:-s用於指定僞隨機數生成器的seed值,若是seed相同,則兩次Monkey測試所產生的事件序列也相同的
示例:
Monkey測試1:adb shell monkey -p com.htc.Weather -s 10 100
Monkey測試2:adb shell monkey -p com.htc.Weather -s 10 100
兩次測試的效果是相同的,由於模擬的用戶操做序列(每次操做按照必定的前後順序所組成的一系列操做,即一個序列)是同樣的,操做序列雖然是隨機生成的,可是隻要咱們指定了相同的Seed值,就能夠保證兩次測試產生的隨機操做序列是徹底相同的,因此這個操做序列僞隨機的
在輸出的日誌裏能夠看到seed值,-s指定一個seed值,若是開發讓迴歸測試的話,就用設置的這個值,adb shell monkey -p 包名 -s 1234561 100
Monkey的日誌分析
一、按關鍵字進行搜索,ANR、Exception、Crash、Error
二、找到有問題的地方,查看上下文信息
三、注意第一個switch上下文信息
四、查看monkey裏面出錯前的一些事件動做,能夠手動執行該動做
五、進行問題復現,可使用以前執行的monkey命令在執行一遍,注意seed值要同樣
touch有ACTION_DOWN和ACTION_UP的操做,就是按下和擡起,後面括號裏的數字是座標
crashTest.apk,ANRTest.apk,crashTest-normal.apk,ANRTest-normal.apk四個apk,主要測試crashTest.apk和ANRTest.apk(包名cn.besttest.anrtest),在模擬器上安裝crashTest.apk,而後找到包名cn.besttest.crashtest
adb shell monkey -p cn.besttest.crashtest -v -v -v --ignore-crashes 1000 > crash.txt
Crash專項
一、安裝可能引發Crash的app
二、執行壓力測試
三、分析Crash的Exception信息
查看Exception的三種方式:
一、查看monkey的log
二、/data/com.swftcoin.client.android/cache/crash/traces.txt
三、查看logcat日誌Crash
MonkeyScript
MonkeyScript是一組能夠被Monkey識別的命令集合
優勢:MonkeyScript能夠完成重複固定的操做
使用:adb shell monkey -f <scriptfile> <event-count>
MonkeyScript命令1
DispatchTrackball
軌跡球事件
DispatchTrackball(long downtime,long eventtime,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)
注意:按一個鍵須要兩個軌跡球事件
DispatchTrackball參數詳解
# long downtime 指按鍵最初被按下的時間
# long eventtime 指事件發生的時間
# int action 指具體操做的動做,如按下(記住這個就行,別的能夠不動)
# float x,float y 指x和y的座標(記住這個就行,別的能夠不動)
# float pressure 壓力事件的大小(0-1)
# float size 觸摸近似值(0-1)
# int metastate 指當前按下meta鍵的標識
# float xprecision,float yprecision 指x和y座標的精確值
# int device 事件的來源(0~x)
# int edgeflags 指超出了屏幕範圍
action:0表明按下,1表明彈起
MonkeyScript命令2
DispatchPointer
點擊事件,上邊有參數詳解
DispatchPointer(long downtime,long eventtime,int action,float x,float y,float pressure,float size,int metastate,float xprecision,float yprecision,int device,int edgeflags)
注意:按一個鍵須要兩個點擊事件,點擊事件和軌跡球是同樣的
MonkeyScript命令3
DispatchString
輸入字符串命令
DispatchString(String text)
MonkeyScript命令4
LaunchActivity
啓動應用
LaunchActivity(package,Activity)
MonkeyScript命令5
UserWait
等待事件
UserWait(1000),單位:ms
MonkeyScript命令6
DispatchPress
按下鍵值
DispatchPress(int keycode)
keycode 66 回車鍵
上面四行記住了就行,固定格式
adb push 本地路徑\monkey-aisi.script /data/local/tmp # 先把腳本上傳到手機上
adb shell monkey -f /data/local/tmp/monkey-aisi.script 2 # 執行兩次
找座標步驟:設置->關於手機->版本號連續點擊,直到顯示您已處於開發者模式,無需進行此操做爲止,退出進入開發者選項,找到指針位置,開啓後點擊屏幕便可看到座標
先輸入from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage,再輸入MonkeyRunner.alert("hello","hi","OK"),就會彈出
能夠在sdk/tools/monkeyrunner.bat裏進行輸入
把上面腳本保存成py文件,而後在cmd裏輸入monkeyrunner xx.py文件,必定要輸入絕對路徑,也能夠在monkeyrunner.bat裏輸入相對路徑(這裏的相對路徑是相對於monkeyrunner.bat)
img2=MonkeyRunner.loadImageFromFile('c:\\files\\test_1234.png','png') #
MonkeyRunner.sleep(3)
flag=image.sameAs(img2,0.65) # 圖像對比
MonkeyRunner.sleep(1)
print flag # true或者false
RSS是每一個app都是一個內存,如10M,PSS是每一個app都乘以10M的比例
adb shell "top -d 1 | grep packageName"是1s顯示一次
倒數第一列+倒數第二列<=倒數第三列
手機重啓之後tcp_rcv和tcp_snd文件中的數據被清空
4554的單位是B,換算成KB,B換成KB/1024
流量是不經過什麼方式來的,不管是無線,仍是4G,若是出現多行就多行累加
後一秒-前一秒的差值仍是比較準確的,後面的相加-前面的相加
取TotalTime的值
用的最多就是第一條,執行monkey前執行一次,執行monkey後執行一次,兩個level值相減就是消耗的電量(連着電腦就是電腦的電量,斷開鏈接就是手機的電量)
電量設爲100,level就是100,模擬器上電量是滿格的
看status是1和不是1的狀態
首先在模擬器上安裝MyMemoryDemo.apk
關注data object裏的Total Size的數據,而後在模擬器裏打開MyMemoryDemo.apk,點擊點我啊點我啊按鈕11次,10屢次就行,以下圖:
點完後跳出模擬器,發現Total Size一直增長,懷疑它是內存泄漏,因而點擊Dump HPROF file按鈕,把這個文件dump下來
出現下面這個圖證實文件dump下來了,保存一下