APP效能測試
一、響應
測試點:
- 冷啟動:首次啟動APP的時間間隔(只是啟動時間,不包括頁面載入)
adb shell am start -W packageName/ActivityName(絕對路徑,首個Activity)
含義:
ThisTime:該Activity的啟動耗時
TotalTime:應用自身啟動耗時,ThisTime+應用application等資源啟動耗時
WaitTime:系統啟動應用耗時,TotalTime+系統資源啟動時間
測試標準:冷啟動時間TotalTime不超過1.5秒 -
熱啟動:按back鍵後再啟動adb命令
測試標準:熱啟動時間不超過1秒
-
完全啟動:從啟動到首頁完全加載出來的時間間隔
- 有網啟動:從發起跳轉,到頁面完全加載出來的時間間隔
- 無網啟動:從發起跳轉,到頁面完全加載出來的時間間隔
(一般只關注冷啟動和熱啟動即可)
二、記憶體
在安卓系統中,每個APP程序除了其他程序共享記憶體之外,還獨用私有記憶體,通常我們用PSS(私有記憶體+比例分配共享記憶體)來衡量一個APP的記憶體開銷,。由於一個裝置的記憶體是固定的,如果記憶體消耗過大就會出現應用卡頓或者閃退,因此需要對記憶體進行測試。正常情況下,應用不應占用過多的記憶體資源,且能及時釋放記憶體,保證整個應用內的穩定性和流暢性。
測試點:
- 空閒狀態:切換至後臺或者啟動後不做任何操作,消耗最小
- 中強度狀態:時間偏長的操作應用
- 高強度狀態:高強度使用應用,可以跑moneky來測試
記憶體洩漏:應用內的記憶體沒有釋放,記憶體一直增加,系統記憶體一直減少
測試方法:
- 使用adb命令:
adb shell dumpsys meminfo packageName
關注點:
1、Native heap alloc:JNI層的記憶體分配
2、Dalvik heap alloc:Java層的記憶體分配
如果這兩個值一直增長,應用程式可能出現了記憶體洩漏
Total的PSS:應用真正佔據的記憶體大小 - 使用效能測試工具:Emmagge(一直沒更新了)、GT(需要接入sdk)、Android Monitor等
關注點:
1、退出某個頁面後,記憶體是否有回落:如果沒有及時回落,且程式自動GC或者手動GC,那便可確認有問題
2、進行某個操作後,記憶體是否增長過快:如果增長過快,也可能有風險,需要重複操作確認
三、CPU
cpu測試,主要是關注cpu的佔用率。cpu佔用率過高,容易引起無法響應、ANR(application not responding)等問題
測試點:
- 在空閒時間(切換至後臺)的消耗
- 在執行一些應用的情況下,觀察應用程式佔用cpu的情況
- 在高負荷的情況下,觀察應用程式佔用cpu的表現
具體場景:
1、應用空閒狀態執行監測CPU佔用率 空閒狀態:應用按Home鍵退到後臺,不再佔用系統的狀態(通常是滅屏半分鐘後) CPU佔用率=0% 2、應用中等規格執行監測CPU佔用率 中等規格:模擬使用者最常見的使用場景 CPU佔用率≤30% 3、應用滿規格長時間正常執行監測CPU佔用率 Monkey測試 CPU佔用率≤30% 4、應用正常執行期間監測CPU佔用率峰值 應用正常執行:開啟應用進行基本操作 CPU佔用率≤50%測試方法:
- 使用adb命令
1、adb shell top -n 3|grep packageName
top cpu引數:
-m 顯示最大數
-s 按指定列序號排序(1-x,預設是9)
-t 顯示程序名稱
-n 在退出前重新整理幾次
-d 重新整理間隔
如果反覆進行某個操作,cpu佔用過高且一直無法釋放,那便可能存在風險2、adb shell dumpsys cpuinfo |grep packageName
-
使用第三方工具:Emmagee、GT等
- 使用Android Monitor
四、FPS
一般來說,安卓裝置的螢幕重新整理率為60幀/s,要保持畫面流暢不卡頓,要求每一幀的時間不超過1000/60=16.6ms,這就是16ms的黃金準則,如果中間的某些幀的渲染時間超過16ms,就會導致這一段時間的畫面發生跳幀,畫面會卡頓
測試方法:
- adb命令
1)開啟手機:開發者選項-->GPU呈現模式分析 --> in adb shell dumpsys gfxinfo
2)操作要測試的apk
3)cmd命令:adb shell dumpsys gfxinfo packageName
4)得到一個矩陣資料,計算矩陣中幀率大於16的點所佔比例,即為卡頓比
含義:
Draw:表示在java中建立顯示列表部分中,OnDraw()方法所佔用的時間
Process:表示渲染引擎執行顯示列表所花的時間,view越多,時間越長
Execute:表示把一幀資料傳送到螢幕上排版顯示實際所花費的時間
Draw+Process+Execute:完整顯示一幀,這個時間要小於16ms才能保持每秒60幀
5)通過Excel進行表格處理可以直觀的檢視軟體的流暢度
2、使用開發者選項自帶的圖表
1) 開啟手機:開發者選項 -->GPU呈現模式分析 --> 在螢幕上顯示為條形圖
2)操作被測得軟體,介面會顯示條形圖
3、使用第三方測試工具:Emmagee、GT等
4、使用Android Monitor
五、GPU渲染
gpu渲染是指在一個畫素點上繪製多次(超過一次):顯示一個什麼都沒有做的activity介面算作畫了1層,給activity加一個背景是第2層,在上面放了一個Text View(有背景的Text View)是第3層,Text View顯示文字就是第4層僅僅只是為了顯示一個文字,卻在同一個畫素點繪製了四次,這是一定要優化的。過度繪製對動畫效能的影響是極其嚴重的,如果你想要流暢的動畫效果,那麼一定不能忽視過度繪製。
測試方法:
1)開啟開發者選項 -- > 除錯GPU過度繪製 --> 顯示過度繪製區域
2)開啟被測應用,可以看到不同顏色的繪製程度
原色:無過度繪製
藍色:繪製一次(理想狀態)
綠色:繪製兩次
淺紅:繪製三次
深紅:繪製四次(必須優化)
測試指標
- 控制過濾繪製為2x
- 不允許存在4x過度繪製
- 不允許存在面積超過螢幕1/4的3x過度繪製
六、耗電量
測試前先看下規定時間內手機正常待機下耗電量為多少,然後再啟動APP測試耗電量
測試點:
- 測試手機安裝apk前後待機狀態功耗無明顯差別
- 常見使用場景中,耗電量在正常範圍內
- 長時間連續使用應用,耗電量正常
測試方法:
- adb命令
#設定,目的:依照時間順序展示各個wakelock的詳細資訊
adb shell dumpsys batterystats --enable full-wake-history
#重置batterystats資料
adb shell dumpsys batterystats --reset
#執行測試用例
#完成測試用例執行,連線裝置,匯出資料
adb shell dumpsys batterystats > bugreport.txt
#Android 7.0及以上
adb bugreport bugreport.zip - 使用第三方測試工具:Emmagee、GT等