Android 性能測試


關於Android的性能測試,看到一篇很好的文章,轉載過來和大家分享下。


   Android性能測試,跟pc性能測試一樣分爲客戶端及服務器,但在客戶端上的性能測試分爲 類,對於應用性能測試,包括很多測試項,如啓動時間、內存、CPU、GPU、功耗、流量等。但針對rom版本的性能測試,一般關注功耗。

   rom版本的性能測試:

  •     rom 版本一般就關注功耗測試,不過 rom 版本的功耗測試跟應用的功耗測試會有所差異,當然只是用例設計方面的差異,工具仍然採用安捷倫電源儀進行。

    •    應用的性能測試:

    應用的性能測試,對於啓動時間、內存、cpu 測試大家一般都使用外部提供的第三方工具來輔助測試,如GT、安測試等、這些工具的原理都是基於調用 android 底層的一些 api 來獲取到測試所用到的值,當然我們也可以採用其他方法,如使用 android 本身提供的一套 adb 即可完成上述測試。

    對於 GPU、功耗、等測試來說,用第三方工具測試得到的數值一般都不是很準確,這個時候我們需要引入硬件來進行測試了,GPU可以採用高速相機來進行測試,功耗可以使用萬用表或安捷倫電源儀來進行測試(ps:有硬件動手能力的可以DIY一個小板進行)

  • Android性能測試-啓動時間:

  • 首先我們來說說啓動時間。關於應用的啓動時間的測試,分爲三類:

  • 1. 首次啓動 --應用首次啓動所花費的時間 

  • 2. 非首次啓動 --應用非首次啓動所花費的時間

  • 3. 應用界面切換--應用界面內切換所花費的時間那麼如何來做啓動時間的測試呢,一般我們分爲2類,一類爲使用軟件來測試,一類爲使用硬件來測試,首先我們說說軟件測試的方法,可能大部分人都比較通曉使用 android 提供的 DisplayManager 來獲取 activity 的啓動時間。

  • 通過日誌過濾關鍵字 Displayed 來過濾所有 activity 所打印的,記錄日誌通過

  • [java] view plaincopy在CODE上查看代碼片派生到我的代碼片
    1. adblogcat>/address/logcat.txt  

  • 然後使用

  • [java] view plaincopy在CODE上查看代碼片派生到我的代碼片
    1. find "Displayed" /address/logcat.txt>/newaddress/fl.txt  

  • 通過 activity 名來過濾獲取所測應用

  • [java] view plaincopy在CODE上查看代碼片派生到我的代碼片
    1. find "ActivityName" /newaddress/fl.txt>/newaddress/last.txt  

  • 通過計算 activity 最後剩餘的時間之和即可(這裏可以使用excel表格自動相加也可以使用算法,我就不詳細介紹了)

  • 除了 DisplayManager 的打印時間方法後,還有通過關注am的啓動時間及 DisplayManager 打印的結束時間,通過兩者時間之間想減也能得到應用的啓動時間,還有可以通過PowerManager來計算打印時間,在應用啓動的時候,我們可以關注ActivityManager-Launch的變化來計算應用的啓動時間,還有可以通過截圖統計啓動時間,對於自研應用,最效率的莫過於直接在程序中插入打印時間的節點了

  • 除了軟件測試的方法,還有硬件測試,我們可以使用高速相機或者手機,採用錄像的方法把應用啓動過程給錄製下來,然後通過人工數幀或者程序數幀的方式計算啓動時間。

  • Android性能測試-內存消耗

  • 內存消耗,這個測試節點的設計目標是爲了讓應用不佔用過多的系統資源,且及時釋放內存,保障整個系統的穩定性,當然關於內存測試,在這裏我們需要引入幾個概念:空閒狀態、中等規格、滿規格。

空閒狀態:指打開應用後,點擊home鍵讓應用後臺運行,此時應用處於的狀態叫做空閒。中等規格和滿規格指的是對應用的操作時間的間隔長短不一,中等規格時間較長,滿規格時間較短。

接下來我們說說在內存測試中,存在很多測試子項,如下清單所示:

1.空閒狀態下的應用內存消耗情況
2.中等規格狀態下的應用內存消耗情況
3.滿規格狀態下的應用內存消耗情況
4.應用內存峯值情況
5.應用內存泄露情況
6.應用是否常駐內存
7.壓力測試後的內存使用情況

關於android內存測試的方法基本分爲幾類,

1.使用android本身提供的ActivityManager.MemoryInfo()方法獲得(此方法請百度或google)此類第三方工具有如網易的Emmagee、安測試、騰訊的GT等。http://gt.qq.com/download.html

2.使用android 提供的

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. adbshell dumpsys meminfo |grep packagename >/address/mem.txt  
來獲取。

3.使用 android 提供的 procrank

這裏我們詳解一下 procrank 方法(批處理)

首先去google獲取procrank、procmem、libpagemap.so 三個文件 .

然後push文件,執行

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. adbpush procrank /system/xbin  
  2. adbpush procmem /system/xbin  
  3. adbpush libpagemap.so /system/lib  

賦權

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. adbshell chmod 6755 /system/xbin/procrank  
  2. adbshell chmod 6755 /system/xbin/procmem  
  3. adbshell chmod 6755 /system/lib/libpagemap.so ,  

在開啓工具記錄

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. adbshell procrank |grep packagename >/address/procrank.txt  

剩下的就是整理測試數據了

關於內存泄露方面的測試,可以通過幾個方面來測試

1.通過monkey壓力測試記錄內存使用情況,分析數據曲線圖及日誌情況
2.通過eclipse上的mat+heap來分析存在內存泄露方面的節點

說了這麼多內存的,我們再來說說CPU方面的,CPU跟內存一樣,存在一些測試子項,如下清單所示

1.空閒狀態下的應用CPU消耗情況
2.中等規格狀態下的應用CPU消耗情況
3.滿規格狀態下的應用CPU消耗情況
4.應用CPU峯值情況

CPU的測試方法分爲幾類
1.使用android提供的

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. adbshell dumpsys cpuinfo |grep packagename >/address/cpu.txt來獲取  

2.使用

top命令

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. adbshell top |grep packagename>/address/cpu.txt來獲取  

      Android性能測試-內存消耗自從cpu及內存後,GPU這個詞對於PC性能測試者也不陌生了,什麼3Dmax,安兔兔之類的第三方軟件讓GPU 在移動端性能測試領域都知曉,但對於應用的GPU該如何來測試呢,我們先引入幾個名詞:過度繪製、幀率、幀方差。

過度繪製是指界面顯示的activity套接了多層而導致。幀率是指屏幕刷新率。幀方差是指屏幕刷新幀間隔方差。

對於 GPU 的測試主要包括以下幾個測試子項:界面過度繪製、屏幕滑動幀速率、屏幕滑動平滑度。

對於過度繪製的測試主要通過人工進行測試,通過打開開發者選項中的顯示GPU過度繪製來進行測試(PS:只有android4.2及以上的版本才具備此功能),驗收的標準爲:

  •    a、不允許出現黑色像素

  •    b、不允許存在4x過度繪製

  •    c、不允許存在面積超過屏幕1/4區域的3x過度繪製(淡紅色區域)

  •    對於屏幕滑動幀速率主要有 2 種方法。

  •    先說說軟件測試的方法:

1.手機端需打開開發者選項中的啓用跟蹤 後勾選 Graphics 和 View

2.啓動SDK工具Systrace插件,勾選被測應用,點擊Systrace插件,在彈出的對話框中設置持續抓取時間,在tracetaps下面勾選gfx及view選項,

3.人滑動界面可以通過節拍來進行滑動或者掃動,幀率數據會保存到默認路徑下,默認名稱爲 trace.html

4.將trace.html文件拷貝到linux系統下通過命令進行轉換,生成trace.csv文件

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. grep'postFramebuffer' trace.html | sed -e 's/.*]\W*//g' -e 's/:.*$//g' -e's/\.//g' > trace.csv  

5.用excel打開文件計算得到幀率

接下來我們說說硬件的方法,這裏需要引入高速相機,打開高速相機,開啓攝像模式,錄製人滑動或者掃動被測應用的視頻,再通過人工或者程序數幀的方法對結果進行計算得到幀率

對於屏幕滑動平滑度的測試,方法如同幀率測試,唯一的差異就是最後的結果計算公式的差異

GPU的測試目前業界使用的均爲硬件來進行,軟件測試的數據相較硬件差異較大,對於幀率及幀方差的測試標準而言,需對待不同機型設定不同的標準。

  1.   Android 性能測試-功耗測試:

  2.    功耗測試主要從以下幾個方面入手進行測試:

    •    a、測試手機安裝目標APK前後待機功耗無明顯差異。

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

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

       功耗測試的方法分爲兩類,一類爲軟件測試,一類爲硬件測試。

       軟件測試一般分爲2類:

       第一種採用市場上提供的第三方工具,如金山電池管家之類的。第二種就是自寫工具進行,這裏一般會使用3種方法:

       第一種基於android提供的PowerManager.WakeLock來進行;

       第二種比較複雜一點,功耗的計算=CPU消耗+Wakelock消耗+數據傳輸消耗+GPS消耗+Wi-Fi連接消耗;

       第三種通過 adbshell dumpsys battery來獲取。

     接着說下硬件測試,在這裏我們一般使用萬用表或者功耗儀進行測試,使用功耗儀測試的時候,需要製作假電池來進行的,有些不能拔插電池的手機還需要焊接才能進行功耗測試。

  3.    

    1.    Android 性能測試-流量測試:

    2.    
    3.  性能測試的——流量,當然我所指的性能測試是針對大部分應用而言的,可能還有部分應用會關注網速、弱網之類的測試。流量測試,同樣需要引入幾個名詞
      •    中等負荷:應用正常操作

      •    高負荷:應用極限操作

         流量測試包括以下測試項:

      •    a、應用首次啓動流量提示

      •    b、應用後臺連續運行2小時的流量值

      •    c、應用高負荷運行的流量峯值

      •    d、應用中等負荷運行時的流量均值

         流量測試一般都是用軟件來進行的,這裏我們一般分爲2類:

      •    a、採用市場提供的第三方工具來進行測試,如流量寶之類的

      •    b、自研工具進行測試

         自研工具進行測試一般包含 2 類方法:

         通過tcodump抓包,再通過wireshake直接讀取包信息來獲得流量

         首先獲得被測應用的uid信息,可以通過

      adbshell dumpsys package

         來獲取 然後在未操作應用之前,我們可以通過查看

       adbshell cat /proc/uid_stat/uid/tcp_rcv

       adbshell cat /proc/uid_stat/uid/tcp_snd

         獲取到應用的起始的接收及發送的流量,然後我們再操作應用,再次通過上述 2 條命令可以獲取到應用的結束的接收及發送的 

    4.    流量,通過相減及得到應用的整體流量消耗


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