普遍的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
-
操作要測試的apk
-
cmd窗口輸入命令: adb shell dumpsys gfxinfo packageName
-
得到一個矩陣數據,計算矩陣中幀率大於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
- 操作被測的軟件
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