日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

移动端 - Android客户端性能测试常见指标

發布時間:2023/12/15 Android 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 移动端 - 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 小時的流量值
  • 應用高負荷運行的流量峰值
  • 應用中等負荷運行時的流量均值
流量測試一般都是用軟件來進行的,這里我們一般分為2類:
  • 采用市場提供的第三方工具來進行測試,如流量寶之類的
  • 自研工具進行測試
  • 自研工具進行測試一般包含 2 類方法,
  • 通過?tcpdump?抓包,再通過?wireshake?直接讀取包信息來獲得流量
  • 首先獲得被測應用的?uid?信息,可以通過?adb shell dumpsys package?來獲取 然后在未操作應用之前,我們可以通過查看?adb shell cat /proc/uid_stat/uid/tcp_rcv?adb shell cat /proc/uid_stat/uid/tcp_snd?獲取到應用的起始的接收及發送的流量,然后我們再操作應用,再次通過上述 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及以上的版本才具備此功能),驗收的標準為:
  • 不允許出現黑色像素
  • 不允許存在4x過度繪制
  • 不允許存在面積超過屏幕1/4區域的3x過度繪制(淡紅色區域)
  • 2)屏幕滑動幀速率:對于屏幕滑動幀速率主要有 2 種方法。 先說說軟件測試的方法: 1.手機端需打開開發者選項中的?啟用跟蹤?后勾選?Graphics?和?View 2.啟動 SDK 工具 Systrace 插件,勾選被測應用,點擊 Systrace 插件,在彈出的對話框中設置持續抓取時間,在trace taps下面勾選 gfx 及 view 選項, 3.人滑動界面可以通過節拍來進行滑動或者掃動,幀率數據會保存到默認路徑下,默認名稱為 trace.html 4.將trace.html文件拷貝到linux系統下 通過命令進行轉換,生成trace.csv文件 grep 'postFramebuffer' trace.html | sed -e 's/.*]\W*//g' -e 's/:.*$//g' -e 's/\.//g' > trace.csv 5.用excel打開文件計算得到幀率 接下來我們說說硬件的方法,這里需要引入高速相機,打開高速相機,開啟攝像模式,錄制人滑動或者掃動被測應用的視頻,再通過人工或者程序數幀的方法對結果進行計算得到幀率 3)屏幕滑動平滑度: 對于屏幕滑動平滑度的測試,方法如同幀率測試,唯一的差異就是最后的結果計算公式的差異 GPU的測試目前業界使用的均為硬件來進行,軟件測試的數據相較硬件差異較大,對于幀率及幀方差的測試標準而言,需對待不同機型設定不同的標準

    九、功耗測試

    功耗測試主要從以下幾個方面入手進行測試
    • 測試手機安裝目標APK前后待機功耗無明顯差異
    • 常見使用場景中能夠正常進入待機,待機電流在正常范圍內.
    • 長時間連續使用應用無異常耗電現象
    功耗測試的方法分為兩類,一類為軟件測試,一類為硬件測試 我們先說說軟件測試,這里我們會聊聊一些DIY的思路,軟件測試一般分為2類,
    • 第一種采用市場上提供的第三方工具,如金山電池管家之類的。
    • 第二種就是自寫工具進行,這里一般會使用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客户端性能测试常见指标的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。