APP性能測試指標和測試方法

流量

經常使用方法

方法一:Android系統自帶統計功能(整體流量數值)
Proc/uid_stat/{UID}/tcp_snd和tcp_rcvhtml

  • UID是每一個app安裝時候分配的惟一編號用於識別該app.
  • tcp_snd:表示發送數據累計大小,單位是字節
  • tcp_rcv:表示接收到的數據累計大小。

具體步驟:
(1)經過包名獲取app的PID;
(2)再訪問/proc/{PID}/status文件查找app對應的UID;
(3)經過UID號加上100000號查看接收和發送的流量文件python

方法二:Wireshark+tcpdumpandroid

./tcpdump -s 0 -w ./t1.pcap -vshell

  • -s 0:默認抓包抓取長度是68字節,加上-s 0能夠抓到完整的數據包。
  • -w xxx:抓取到的包存放路徑。
  • -v:抓包過程當中顯示抓包的數量

方法三:GT(隨身調)工具(直接調用android的api):
TrafficStats類是Android提供的一個流暢統計類,能夠統計手機開機累計到如今使用的流量,也能夠統計某個或者多個進程或者應用所使用流量,包括Wi-Fi和移動數據GPRS。
GT使用TrafficStats.getUidTxBytes(uid)來獲取流量數據(該方法號稱是獲取到指定 uid 發送流量的總和,但實測狀況是隻有 tcp 層的流量)。
GT(隨身調)是APP的隨身調試平臺,是直接運行在手機上的IDTE。可使用GT對APP進行快速的性能測試(CPU、內存、流量、電量、幀率/流暢度等)、開發日誌查看、Crash日誌查看、網絡數據包的抓取、APP內部參數的調試、真機代碼耗時統計等。api

GT官網服務器

流量測試的分析

  • 域名的流量消耗:抓包後,利用現有工具統計不一樣域名下的流量消耗。便於發現某個服務器是否存在流量消耗過大。
  • 協議的流量消耗:便於發現某個協議是否存在流量消耗過大或者協議拉取較頻繁的現象。

電量

Battery Historian:Google提供的電量分析工具,Android 5.0以上支持網絡

adb shell dumpsys battery //讀取電量和溫度
adb shell dumpsys batterystats --reset //重置電池統計信息
adb shell dumpsys batterystats > batterystats.txt // 獲取電池統計信息
python historian.py batterystats.txt > batterystats.html //生成報告

參考app

CPU

/proc 文件系統是一個僞文件系統,只存在內存中而不佔用外存空間。它以文件系統的方式爲內核與進程提供通訊的接口。
從proc文件能夠獲取:系統、進程、線程的CPU時間片使用狀況,因此兩次採集時間片的數據就能夠獲取進程CPU佔用率。tcp

CPU佔用率=(進程T2-進程T1)/(系統T2-系統T1)
進程總CPU時間 

總CPU時間 totalCPUTime=user+nice+system+idle+iowait+irq+softird 
processCPUTime=utime+stime+cutime+cstime  

線程總CPU時間 threadCPUTime=utime+stime+cutime+cstime
  • utime:該任務在用於態運行的時間,單位爲jiffies
  • stime:該任務在覈心態運行的時間,單位爲jiffies
  • cutime:累計的該任務全部waited-for進程曾經在用戶態運行的時間,單位爲jiffies
  • cstime:累計的該任務的全部的waited-for進程曾經在覈心態運行的時間,單位爲jiffies

獲取系統CPU時間片:讀取proc/stat
獲取進程CPU時間片:proc/pid/stat
線程時間片:/proc/pid/task/tid/stat工具

內存

  • 系統內存:
    • 系統內存:/proc/meminfo
    • 系統空閒內存:ActivityManager
    • 系統已有內存:總內存-空閒內存
  • 進程內存:
    • 進程內存上限、總內存均可以直接使用 am.getProcessMemoryInfo(PID)獲取
    • 也能夠直接使用top命令

流暢度檢測

流暢度:Android系統每隔16.7ms發出垂直同步信號(VSync信號)(1000ms/60=16.67ms)觸發對UI進行渲染。流暢畫面須要60幀/s,爲了可以實現60幀/s,意味着計算渲染的大多數操做必須在16.7ms完成。

當繪幀間隔超過16.7ms,垂直同步機制會讓顯示器硬件等待GPU完成柵格化渲染操做,咱們就能夠說此時掉幀了,也會形成用戶直接感官的卡頓。
1秒內vSync信號的次數定義爲流暢值,即SM。

卡頓分類

  • 低流暢值區間:連續小卡頓形成的丟幀,即平均流暢值低於40幀/s的區間。
  • 單次大卡頓:單次大卡頓形成的丟幀,即兩次繪幀間隔大於70ms,至關於丟了4幀以上的區間。

Android的幀繪製流程是:CPU主線程圖像處理->GPU進行光柵化->顯示幀。APP產生掉幀的狀況大可能是由「CPU主線程圖像處理」這一步超負載引發。

頁面啓動時長

頁面啓動時長:

  • Activity啓動時長:喚醒Activity到Activity在前臺進行第一次繪製的時間,繪幀檢測
  • Fragment啓動時長:喚醒Fragment到Fragment執行onResume的完成時間。
  • 冷啓動:頁面從startActivity開始
  • 熱啓動:頁面從onStart或者onResume開始
相關文章
相關標籤/搜索