移动端 - Android客户端性能测试常见指标
生活随笔
收集整理的這篇文章主要介紹了
移动端 - Android客户端性能测试常见指标
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
rom版本的性能測試? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
一般關注功耗(不過 rom 版本的功耗測試跟應用的功耗測試會有所差異,當然只是用例設計方面的差異,工具仍然采用安捷倫電源儀進行)應用的性能測試? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
包括很多測試項,如啟動時間、內存、CPU、GPU、功耗、流量等。 對于啟動時間、內存、cpu 一般都使用外部提供的第三方工具來輔助測試,如GT、安測試,這些工具的原理都是基于調用 android 底層的一些 api 來獲取到測試所用到的值,當然我們也可以采用其他方法,如使用 android 本身提供的一套 adb 即可完成上述測試。 對于 GPU、功耗等測試來說,用第三方工具測試得到的數值一般都不是很準確,這個時候我們需要引入硬件來進行測試了,GPU 可以采用高速相機來進行測試,功耗可以使用萬用表或安捷倫電源儀來進行測試(ps:有硬件動手能力的可以DIY一個小板進行)一、內存
關于內存測試需要引入空閑狀態、中等規格、滿規格的概念。1、空閑狀態
指打開應用后,點擊home鍵讓應用后臺運行,此時應用處于的狀態叫做空閑。2、中等規格和滿規格
指的是對應用的操作時間的間隔長短不一,中等規格時間較長,滿規格時間較短。 接下來我們說說在內存測試中,存在很多測試子項,如下清單所示 1)空閑狀態下的應用內存消耗情況 2)中等規格狀態下的應用內存消耗情況 3)滿規格狀態下的應用內存消耗情況 4)應用內存峰值情況 5)應用內存泄露情況 6)應用是否常駐內存 7)壓力測試后的內存使用情況3、如何使用adb查看內存信息
1)查看所有內存信息 命令:dumpsys meminfo 例: C:\Users\yijiayi>adb shell shell@android:/ $ dumpsys meminfo 2)查看某個包的內存信息 命令:dumpsys meminfo pkg_name or pid 注:pid可以通過 adb shell top | grep app_name 來查找 例: C:\Users\yijiayi>adb shell shell@android:/ $ dumpsys meminfo com.tencent.mobileqq 或 shell@android:/ $ dumpsys meminfo 1034(注:1034是pid) 重點關注如下幾個字段: (1) Native/Dalvik 的 Heap 信息 具體在上面的第一行和第二行,它分別給出的是JNI層和Java層的內存分配情況,如果發現這個值一直增長,則代表程序可能出現了內存泄漏。 (2) Total 的 PSS 信息 這個值就是你的應用真正占據的內存大小,通過這個信息,你可以輕松判別手機中哪些程序占內存比較大了。 查詢內存 其他參數含義: dalvik : dalvik使用的內存 native : native堆上的內存,指C\C++堆的內存(android 3.0以后bitmap就是放在這兒) other : 除了dalvik和native的內存,包含C\C++非堆內存······ Pss : 該內存指將共享內存按比例分配到使用了共享內存的進程 allocated : 已使用的內存 free : 空閑的內存 private dirty : 非共享,又不能被換頁出去的內存(比如linux系統中為了提高分配內存速度而緩沖的小對象,即使你的進程已經退出,該內存也不會被釋放) share dirty : 共享,但有不能被換頁出去的內存二、CPU
1)CPU頻率設置過高時會導致過熱,過熱導致耗電更嚴重,CPU頻率設置過低導致手機滯后,應用處理緩慢同樣會導致耗電。更多時候,用戶解決CPU超載問題只能關閉甚至卸載App,App就被Kill了! 注意:程序持續運行及操作過程中,內存不能一直增加,不然系統會自動kill掉該進程。 (1)空閑狀態下的應用CPU消耗情況 (2)中等規格狀態下的應用CPU消耗情況 (3)滿規格狀態下的應用CPU消耗情況 (4)應用CPU峰值情況 2)CPU的測試方法分為幾類(使用adbshell腳本進行測試,查看Log數據): 1.使用android提供的adb shell dumpsys cpuinfo | grep packagename >D:\cpu.txt(獲取指定進程使用cpu的詳細信息) 2.使用top命令 adb shell top -n 1 | grep packagename>/address/cpu.txt (獲取指定進程使用cpu的詳細信息,且只刷新一次) 3.?cat ?/proc/cpuinfo 獲取cpu 硬件信息 6.?cat /proc/stat 例:查詢QQ的CPU使用情況三、流量
可以借用網易的開源工具:Emmagee,或者騰訊開發的工具:GT 流量測試,同樣需要引入幾個名詞- 中等負荷:應用正常操作
- 高負荷:應用極限操作
- 應用首次啟動流量提示
- 應用后臺連續運行 2 小時的流量值
- 應用高負荷運行的流量峰值
- 應用中等負荷運行時的流量均值
四、電量
和競品做對比測試,同一機型的測試機在不同時間,不同網絡條件,不同功能使用的情況下分別測試電量使用情況。 命令:dumpsys battery五、啟動速度和滑動、界面切換速度
編寫測試代碼(AndroidInstrumentation),打樁到源碼中,運行后通過log數據進行分析。六、與服務器交互的網絡速度
七、啟動時間
關于應用的啟動時間的測試,分為三類:1. 首次啟動?
應用首次啟動所花費的時間
2. 非首次啟動
應用非首次啟動所花費的時間3. 應用界面切換
應用界面內切換所花費的時間4、如何測試啟動時間?
方法分為2類,一類為使用軟件來測試,一類為使用硬件來測試。 1)使用 android 提供的 DisplayManager 來獲取 activity 的啟動時間吧,在這里我簡單說下如何通過批處理來 DIY- 通過日志過濾關鍵字 Displayed 來過濾所有 activity 所打印的,記錄日志通過?adb logcat>/address/logcat.txt?
- 然后使用find “Displayed” /address/logcat.txt>/newaddress/fl.txt
通過 activity 名來過濾獲取所測應用?find “ActivityName” /newaddress/fl.txt>/newaddress/last.txt
通過計算 activity 最后剩余的時間之和即可
2)除了 DisplayManager 的打印時間方法后,還有通過關注 am 的啟動時間及 DisplayManager 打印的結束時間,通過兩者時間之間想減也能得到應用的啟動時間,還有可以通過 PowerManager 來計算打印時間,在應用啟動的時候,我們可以關注 ActivityManager-Launch 的變化來計算應用的啟動時間,還有可以通過截圖統計啟動時間,對于自研應用,最效率的莫過于直接在程序中插入打印時間的節點了 3)硬件測試方法,這里我們可以使用高速相機或者手機,采用錄像的方法把應用啟動過程給錄制下來,然后通過人工數幀或者程序數幀的方式計算啟動時間 查看頁面啟動時間:手機需要root 以啟動camera為例 adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity ubuntu@ubuntu:/media/disk/work/core$ adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mediatek.camera/com.android.camera.CameraActivity } Status: ok Activity: com.mediatek.camera/com.android.camera.CameraActivity ThisTime: 2871 TotalTime: 2871 WaitTime: 2949 Complete 格式為adb shell am start -W 包名/全類名或叫activity名 打印的結果為 ThisTime ?該activity啟動耗時 TotalTime ?應用自身啟動耗時=ThisTime+應用application等資源啟動時間 WaitTime ?系統啟動應用耗時=TotalTime+系統資源啟動時間 在測試該啟動時間時需要理解兩個概念 冷啟動:應用第一次啟動 熱啟動:按back按鍵后再啟動或非第一次啟動切沒有清除該應用后臺或緩存數據 上面的數據為冷啟動打印的數據,下面運行熱啟動的測試結果: ubuntu@ubuntu:/media/disk/work/core$ adb shell am start -W com.mediatek.camera/com.android.camera.CameraActivity Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.mediatek.camera/com.android.camera.CameraActivity } Status: ok Activity: com.mediatek.camera/com.android.camera.CameraActivity ThisTime: 1848 TotalTime: 1848 WaitTime: 1895 Complete 該命令具體實現在/frameworks/base/cmds/am/src/com/android/commands/am/Am.java,原理是跨Binder調用ActivityManagerService.startActivityAndWait() 接口,其中返回數據分別調用對應 startTime: ?調用startActivityAndWait()的時間點 endTime: ? 調用startActivityAndWait()函數調用返回的時間點 WaitTime: ?調用startActivityAndWait()調用耗時。 再通過之間的計算得到 4)另外一種方法: 命令: adb logcat -c && adb logcat -f /mnt/sdcard/up.txt -s tag 選項說明 -c???清屏 -f?????指定運行結果輸出文件,默認輸出到標準設備(一般是顯示器 -s???設置默認的過濾級別為Silent tag??僅顯示priority/tag 更多信息煩請參考?adb logcat -help 例: 先啟動app,然后執行如下命令 C:\Users\laiyu>adb logcat -c && adb logcat -f /mnt/sdcard/up.txt -s ActivityMana ger八、GPU性能測試
關于GPU的幾個名詞,過度繪制、幀率、幀方差(過度繪制是指界面顯示的 activity 套接了多層而導致。幀率是指屏幕刷新率。幀方差是指屏幕刷新幀間隔方差。) 對于 GPU 的測試主要包括以下幾個測試子項 1)界面過度繪制:對于過度繪制的測試主要通過人工進行測試,通過打開開發者選項中的?顯示GPU過度繪制?來進行測試(PS:只有android4.2及以上的版本才具備此功能),驗收的標準為:九、功耗測試
功耗測試主要從以下幾個方面入手進行測試- 測試手機安裝目標APK前后待機功耗無明顯差異
- 常見使用場景中能夠正常進入待機,待機電流在正常范圍內.
- 長時間連續使用應用無異常耗電現象
- 第一種采用市場上提供的第三方工具,如金山電池管家之類的。
- 第二種就是自寫工具進行,這里一般會使用3種方法
- 第一種基于android提供的PowerManager.WakeLock來進行,
- 第二種比較復雜一點,功耗的計算=CPU消耗+Wake lock消耗+數據傳輸消耗+GPS消耗+Wi-Fi連接消耗,
- 第三種通過 adb shell dumpsys battery來獲取
移動端相關功耗測試雜談:
1、為什么要測功耗?測功耗的實際意義有哪些?
ROM級別的,測功耗(包括其自帶的應用)是必然的(畢竟rom的耗電決定待機時間長短,這是手機的很重要賣點之一,也是用戶比較關心的一個指標)。一般官方宣傳的手機資料時,里面寫的待機時間多少分鐘、2G/3G通話/上網多少分鐘、wifi上網/聽音樂/播放視頻的最大時長,就是測耗電量再經過計算得來的。 單個App級別的,大家都知道,耗電量的增加,也就意味著內存/CPU占用的增加。正所謂,透過現象看本質,如果增幅較之前版本過大,那很有可能是代碼出問題了(即便不影響功能使用,這種問題即便不修正不優化,但最好能做到知道哪有問題);比之前版本過小,時間精力夠的話最好去找找導致差異過大的原因。 (PS:像ROM級別的功耗測試這肯定是各個廠商都會做的,咱們普通小老百姓基本無需操心這些。非系統自帶的App,尤其是安卓平臺,在海量的ROM下,用戶量比較大的應用,可以去著重在各種ROM上看看耗電量還可以;一般的應用,我個人愚見,測耗電量的意義和回報不太大,還不如多關注UI設計、優化內存CPU的占用、優化各功能的響應時間的更有意義,因此測App的功耗視需求而定。)2、測功耗大致過程是怎樣?
測功耗,一般是選取(經過細致評估的App或ROM的功能性能)比較穩定的版本來做一輪功耗測試,測時用兩三個硬件沒什么問題的手機、刷個干凈穩定的系統,讓手機、假電池、電流表串聯(即假電池連接到電流表的電流輸出口,然后再安到手機上模擬日常用的電池來給手機供電,這樣保證三者電流一致),和然后放上SIM卡(一般是移動的),然后去測各種功能下的耗電量。 比如,測理論上的手機2G通話的最大時長,打幾個十分鐘的電話,采集并計算這段時間系統的電流的平均值,然后再用該手機配備的電池的容量除以這個電流值即得出理論上的2G最大通話時間。測單個功能的功耗,只要減掉手機待機時的電流值即得到單個功能的功耗。 (PS:上面有些理論是從別的博客摘抄記錄下來的,但具體沒有記錄是哪些博客,所以這里就不貼原博客地址了,但實際的操作是自己做的)轉載于:https://www.cnblogs.com/Chilam007/p/10639958.html
總結
以上是生活随笔為你收集整理的移动端 - Android客户端性能测试常见指标的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 保“胃”功臣硒
- 下一篇: canvas绘制简单五子棋棋盘