app性能測試

環境準備: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下來了,保存一下

相關文章
相關標籤/搜索