【新夢想幹貨】App常見性能測試點

原文鏈接:http://www.hnxmxit.com/index.php?g=home&m=article&a=show&id=27

普遍的apk性能測試,主要是以下七類

1、響應

2、內存

3、cpu

4、FPS (app使用的流暢度)

5、GPU過度渲染

6、耗電

7、耗流

(app除了這些性能測試,還有:手機版本號兼容性,屏幕分辨率兼容性,穩定性測試,安全測試等,後續會持續更新… 流量測試同這些一起更新,這裏就不在說明了 )

一、響應

軟件的響應時間和響應速度直接影響到用戶的體驗度,如果一個軟件,遲遲加載不出來,會直接影響到軟件的日活、留存。因此對於一個軟件,對響應速度測試是必不可少的。

主要測試點:

1、冷啓動:首次啓動app的時間間隔(只是啓動時間,不包括頁面加載)

2、熱啓動:非首次啓動app的時間間隔(只是啓動時間,不包括頁面加載)

3、完全啓動:從啓動到首頁完全加載出來的時間間隔

4、有網啓動:從發起跳轉,到頁面完全加載出來的時間間隔

5、無網啓動:從發起跳轉,到頁面完全加載出來的時間間隔

(在項目中,主要測試關注點是冷啓動,熱啓動)

測試方法:

1、使用adb命令

1) 冷啓動

adb shell am start -W packageName/ActivityName(絕對路徑,首個Activity)

含義:

ThisTime: 該Activity的啓動耗時;

TotalTime: 應用自身啓動耗時, ThisTime+應用application等資源啓動時間;

WaitTime: 系統啓動應用耗時, TotalTime+系統資源啓動時間

2)熱啓動:按back按鍵後再啓動adb命令

測試標準:冷啓動時間不超過1.5s, 熱啓動不超過1s.

3)完全啓動,無網啓動,有網啓動都可以通過charles抓包來獲取啓動的時間

charles是一個很強大的抓包工具,除了截取請求還能進行單接口壓測,修改請求參數併發出請求,以及模擬無網,弱網,2G,3G,4G等。能解決app的很多專項測試。

限制網絡情況需要用到charles的一個功能: Throttle Setting

通過設置網速和抓包,可以獲取啓動時間,但是有一定的誤差。在項目中,一般只需要測試冷啓動,熱啓動便可。

2、使用AndroidStudio的Android Monitor,查看手機日誌系統輸出

Android Monitor總共有5大模塊:logcat, memory, cpu, network,GPU

我們可以通過logcat獲取應用的響應時間(如何使用,內存中有介紹)

3、代碼日誌輸入查看

直接源碼打日誌,輸入各個位置的耗時操作最爲有效,需要源碼。

4、借用工具,高速相機,但是成本較高。(如下圖:目前項目團隊使用的測試工具)

原理: 通過壓力感應來自動識別起始點,回放圖片判斷結束點,(一般默認手機界面靜止不動爲結束點), 鍵盤按S鍵爲起始點,按F鍵爲結束點。

這裏便不介紹用法了。

二、內存

在Android系統中,每個APP進程除了同其他進程共享內存(shared dirty)外,還獨用私有內存(private dirty),通常我們使用PSS(私有內存+比例分配共享內存)來衡量一個APP的內存開銷。由於一個移動設備的內存是固定的,如果內存消耗過大就會造成應用卡頓或者閃退,需要對內存進行測試。正常情況下,應用不應占用過多的內存資源,且能夠及時釋放內存,保證整個應用內的穩定性和流暢性。

測試點:

1、空閒狀態:切換至後臺或者啓動後不做任何操作,消耗內存最少。

2、中強度狀態:時間偏長的操作應用。

3、高強度狀態:高強度使用應用,可以跑monkey來測試(通常用來測試內存泄漏)。

** 內存泄漏:指應用裏的內存一直沒有釋放,內存一直增加 ,系統內存一直減少 **

測試方法:

1、使用adb命令: adb shell dumpsys meminfo packageName

獲取應用包名和Actively:

adb shell dumpsys window | findstr mCurrentFocus

測試關注點:

1、Native heap alloc

2、Dalvik heap alloc

3、PSS

2、使用性能測試工具:Emmagee(只支持Android)

Emmagee是網易開發的一款測安卓應用性能的測試apk

1、安裝Emmagee.apk,打開。

2、選擇需要測試性能的應用啓動

3、被測應用界面會展示內存、CPU、電流、流量等數據

4、stop Test之後,在本地SD卡中保存一份性能測試數據,可以從裏面獲取內存信息。

5、可以通過execl將數據轉化成圖表,更直觀的查看各性能指標的數據。

(保存地址:/sdcard/Emmagee/******* .csv文件)

生成的csv文件:

原理:Emmagee是使用Android自身提供的ActivityManager.MemoryInfo()方法獲得

可查看: cpu 內存 流量 電量 FPS(流暢度)是一個相對比較好的選擇

但是隻支持安卓6.0及以下的版本

除了Emmagee,還有騰訊提供的一個同樣測試性能的app, GT。使用與Emmagee大體一致,但是GT除了支持Android,同樣支持ios。GT相對於Emmagee功能也更強大:性能測試(CPU、內存、流量、電量、幀率/流暢度等等)、開發日誌的查看、Crash日誌查看、網絡數據包的抓取、APP內部參數的調試、真機代碼耗時統計。

3、使用AndroidStudio 自帶 CPU 和內存檢測功能 – Android Monitor

(首先要下載並安裝好Android Studio)

Android Monitor 可以檢測CPU 和內存,能夠繪製出變化圖,可以直觀明瞭的看出內存和cpu的變化曲線。

Android Monitor ,有5個模塊 :logcat、Memory、CPU、Network、GPU。

關注點:

1、退出某個頁面後,內存是否有回落。

如果沒有及時回落,且程序自動GC或者手動GC,那便可確認有問題。

2、進行某個操作後,內存是否增長過快。

如果增長過快,也有可能存在風險,需重複操作確認。

三、CPU

CPU測試,主要關注的是cpu的佔用率。很多時候,我們玩手機時,會出現發熱發燙,那是因爲CPU使用率過高,CPU過於繁忙,會使整個手機無法響應用戶,整體性能降低,用戶體驗就會很差,也容易引起ANR(application not responding, 主線程(UI線程)如果在規定時內沒有處理完相應工作,就會出現ANR)等等一系列問題。

測試點:

1).在空閒時間(切換至後臺)的消耗,基本沒大應用使用cpu

2).在運行一些應用的情況下,cpu已佔50%的情況下,觀察應用程序佔用cpu的情況

3).在高負荷的情況下看CPU的表現(cpu佔用應是在80%以上)

具體場景:

1、應用空閒狀態運行監測CPU佔用率

空閒狀態:應用按Home鍵退到後臺,不再佔用系統的狀態(通常是滅屏半分鐘後)

CPU佔用率=0%

2、應用中等規格運行監測CPU佔用率

中等規格:模擬用戶最常見的使用場景

CPU佔用率≤30%

3、應用滿規格長時間正常運行監測CPU佔用率

Monkey測試

CPU佔用率≤30%

4、應用正常運行期間監測CPU佔用率峯值

應用正常運行:打開應用進行基本操作

CPU佔用率≤50%

測試方法:

1、使用adb命令:

1) top -m -s cpu |grep packageName

top cpu 參數:

-m 顯示最大數

-s 按指定行排序

-t 顯示進程名稱

-n 在退出前刷新幾次

-d 刷新間隔

如果反覆進行某個操作,cpu佔用過高且一直無法釋放,那便可能存在風險。

2)dumpsys cpuinfo |grep packageName

2、使用第三方測試工具:Emmagee、GT等。

3、使用AndroidStudio自帶的檢測工具Android Monitor。

四、FPS (應用的使用流暢度)

FPS是圖像領域中的定義,是指畫面每秒傳輸幀數,通俗來講就是指動畫或視頻的畫面數。FPS是測量用於保存、顯示動態視頻的信息數量。每秒鐘幀數愈多,所顯示的動作就會愈流暢。

一般來說,Android設備的屏幕刷新率爲60幀/s,要保持畫面流暢不卡頓,要求每一幀的時間不超過1000/60=16.6ms,這就是16ms的黃金準則,如果中間的某些幀的渲染時間超過16ms,就會導致這段時間的畫面發生了跳幀,因此原本流暢的畫面變發生了卡頓。

測試方法:

1、adb命令

1)打開手機:開發者選項—>profile GPU rendering —> in adb shell dumpsys gfxinfo

  1. 操作要測試的apk

  2. cmd窗口輸入命令: adb shell dumpsys gfxinfo packageName

  3. 得到一個矩陣數據,計算矩陣中幀率大於16的點所佔比例,即爲卡頓比

含義:

Draw: 表示在Java中創建顯示列表部分中,OnDraw()方法佔用的時間。

Process:表示渲染引擎執行顯示列表所花的時間,view越多,時間就越長。

Execute:表示把一幀數據發送到屏幕上排版顯示實際花費的時間。

Draw + Process + Execute = 完整顯示一幀 ,這個時間要小於16ms才能保存每秒60幀。

5)通過execl進行表格處理可以直觀的查看軟件的流暢度

2、除了使用adb shell, 還可以直接使用開發者選項自帶的圖表

1)打開手機:開發者選項—>profile GPU rendering —> on screen as bars

  1. 操作被測的軟件

3)界面會顯示如下的一個統計數據表

2、使用第三方測試工具:Emmagee、GT等。

3、使用AndroidStudio自帶的檢測工具Android Monitor。

五、GPU渲染

GPU渲染是指在一個像素點上繪製多次(超過一次):顯示一個什麼都沒有做的activity界面算作畫了1層,給activity加一個背景是第2層,在上面放了一個Text View(有背景的Text View)是第3層,Text View顯示文本就是第4層僅僅只是爲了顯示一個文本,卻在同一個像素點繪製了四次,這是一定要優化的。過度繪製對動畫性能的影響是極其嚴重的,如果你想要流暢的動畫效果,那麼一定不能忽視過度繪製。

測試方法:

1、手機自動的Debug GPU overdraw

1)打開手機—>設置—>開發者選項—>Debug GPU overdraw—>show overdraw areas

2)打開被測的應用

GPU過渡渲染不同的顏色代表不同的繪製程度

1)、原色:無過渡繪製

2)、藍色:繪製一次 (理想狀態)

3)、綠色:繪製二次

4)、淺紅:繪製三次 (可以優化)

5)、深紅:繪製四次 (必須優化)

測試指標:

1、控制過渡繪製爲2x

2、不允許存在4x過渡繪製

3、不允許存在面積超過屏幕1/4的3x過渡繪製

六、耗電量

測試應用對電量的消耗前需要對手機本身的電量消耗有個大概瞭解,測試前先看規定時間內手機正常待機下(重啓後待機)電量消耗爲多少。然後再啓動待測試APP看看消耗的電量增加了多少取差值。

測試點:

測試手機安裝目標APK前後待機功耗無明顯差異;

常見使用場景中能夠正常進入待機,待機電流在正常範圍內;

長時間連續使用應用無異常耗電現象。

測試方法 :(先關閉所有的應用,再打開被測app)

1、使用第三方測試工具:Emmagee、GT等,只需要測試的電流靜置一晚,待機電流在正常範圍內即可。一般是被測應用對比待機電流<=2mA。

2、使用adb命令

adb shell dumpsys batterystats |grep packageName

end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章