流量、電量、弱網環境怎麼測?

流量、電量、弱網環境怎麼測?|Android App性能測試白皮書

背景介紹

Android用戶也許會經常碰到以下的問題:

1)應用後臺開着,手機很快沒電了——應用耗電大;

2)首次/非首次啓動應用,進入應用特別慢——應用啓動慢;

3)應用使用過程中,越來越卡——CPU能力不足/內存泄露;

4)應用頁面卡頓——幀率較低、頁面卡頓。

因此,對開發的Android應用,必須對其進行性能測試,不然將會直接影響用戶體驗。

Android應用性能測試通常包括:啓動時間、內存、CPU、耗電量、流量、流暢度等。我們將在這個月陸續爲大家簡單介紹一下每個測試點的常見測試方法及簡單的定位思路,僅供參考。之前兩週內,我們爲大家介紹了啓動時間內存&CPU內存泄漏&卡頓"測試方法,本期我們介紹Android性能測試白皮書的最後一章——流量、電量、弱網環境的測試方法。

耗電

耗電操作主要包含CPU、WIFI、流量、傳感器(GPS NFC),以及應用屏幕wakelock等操作。我們更多的是關注應用本身是否劫持了系統的屏幕wakelock操作,沒有及時釋放屏幕wakelock,導致耗電。

電量測試監控方法可以簡單的從設置->電池->使用情況中查看,手機中的每個部件運行時對應的能耗值都放在power_profile.xml文件中,而系統的設置->電池->使用情況中,統計的能耗使用情況也是以power_profile.xml的value作爲基礎參數的。通過命令監控app個部件的使用時長,然後結合設備耗電的基礎參數進行加權計算,即可得到app使用的耗電量。至於更詳細的耗電量測試,可以專門把耗電這一性能指標拿出來,專項測試。

流量

針對流量測試,首先要搞明白什麼是流量?我們的收集通過運營商的網絡訪問Internet,運營商替我們的手機轉發數據報文,數據報文的總大小(字節數)即流量,這裏的數據報文包含手機上下行的報文。由於數據報文采用IP協議傳輸,運營商計算的流量一般是包含IP頭的數據報文大小。

下面就介紹兩種流量的測試方法:

1、tcpdump+Wireshark抓包測試法

流量測試最直接的方法就是抓包。在App運行期間,把手機收發的所有報文度抓取下來,再計算收發報文總大小,即App消耗的流量。但是如果我們需要測試某一個App消耗的流量需要禁用其他APP的連網權限。

1)限制其他app的聯網權限,因爲有些App的進程是常駐後臺的,即使不運行,也會有網絡報文。可以藉助一些手機管家軟件禁用網絡。

2)手機上抓包,下載tcpdump,手機連接電腦,獲得root權限。

3)將 tcpdump (forAndroid)上傳至Android手機上,在命令提示符窗口中輸入命令:adbpush  <LocalPath of tcpdump>   /data/local/tcpdump

4)給 tcpdump 增加可執行權限

adb shell

su

chmod 6755 /data/local/tcpdump

5)啓動抓包,使用命令/data/local/tcpdump-v -i any -s 0 -w /sdcard/zhangyu.pcap

Got後面的數字表示當前抓到的包的數量。如果有變化,表示有網絡流量。6)導出抓包結果adb pull /sdcard/zhangyu.pcap <LocalPathof PcapFile >

7)用Wireshark打開剛纔的抓包結果,點擊StatisticsàSummary,流量的數值爲Bytes一行的Displayed一欄。

2、使用安卓自身提供的TCP收發長度統計功能

一般APP和後臺服務器之間的通信都是基於TCP的,所以我們可以利用此統計來測試我們APP的流量,而且安卓提供的該統計功能是按照APP緯度來統計的,不需要禁止其他app的連網權限。

操作步驟如下:

1)使用ps命令查看所測app的uid,例如貼吧的uid爲10000+191=10191

adbshell

su

ps |grep com.baidu.tieba

2)進入/proc/uid_stat/1191目錄,cat獲取當前tcp_snd和tcp_tcv的初始值

3)此時可以開始測試了,測試完成後再次獲取tcp_snd和tcp_tcv的值

4)所測時間內的流量計算

發送流量:tcp_snd_new-tcp_snd_old=2032150-893233=1128917bytes

接收流量:tcp_rcv_new-tcp_rcv_old=18648825-1350829=17297996bytes

弱網環境

在進行手機應用測試時,經常需要模擬網絡不穩定的狀態下對測試執行的影響。調研了幾款工具,可以通過手動設置數據丟包率,以及網絡時延等參數,模擬弱網環境。如Charles、clumsy、netlimite、atc等。

1、幾款工具的比較

1)Charles、Fiddler這樣的軟件只支持短連接,也就是說只有走短連接的接口才生效,長連接的不能使用。

缺點:不支持長連接

2)Atc工具和蘋果自帶的ios developer (開發者選項)的使用方法是一樣的,需要在手機端操作,atc工具需要搭建一系列環境後,手機訪問一個ip地址就能看見控制頁面,然後修改相應的參數即可。

缺點:不宜操作,每次修改網絡場景需要把被測app置於後臺,切換到網絡模擬界面改參數,然後再切回被測app。影響被測app的操作連貫性。

3) clumsy、netlimite等這類軟件易安裝,安裝在電腦端,手機通過共享網絡連接電腦,實時的將系統接收和發出的網絡數據包攔截下來,人工的造成延遲,掉包和篡改操作後再進行發送。

4)購買一些儀器,在全公司範圍搭建一個弱網環境。

缺點:搭建成本高,需要有專門的技術人員支持。

綜合比較以上四類工具,第三類推薦在日常測試過程中使用。下面就拿clumsy舉例,介紹一下環境的搭建及使用。

2、clumsy環境搭建及使用

1)環境準備

windows筆記本,clumsy安裝文件,共享網絡

2)安裝clumsy

clumsy免安裝程序,下載完成後,直接點擊exe可執行文件即可。

下載地址:https://pan.baidu.com/s/1pLAjm2J密碼: mk8i

3)創建共享網絡

a、電腦連接網線,打開網絡和共享中心

b、點擊本地連接---屬性---共享---勾選第一個,並選擇一個家庭網絡連接(此時本地連接會顯示共享的字樣)

c、cmd--輸入命令(啓動cmd,最好用管理者身份啓動)

netshwlan set hostednetwork mode=allow ssid=zhangyu1 key=123456789(ssid和key對應共享網絡的名稱和密碼,key不能低於8位)

netshwlan start hostednetwork

至此手機就會搜索到電腦共享的網絡,然後連接即可。

3、clumsy參數說明及使用

界面如下:

clumsy 首先根據用戶選擇的 filter 來攔截指定的網絡數據。在 filter 中可以設定你感興趣的協議(tcp/udp),端口號,是接收還是發出的端口。你也可以通過簡單的邏輯語句來進一步縮小範圍。當 clumsy 被激活時,只有符合這些標準的網絡數據會被進行處理,而你不感興趣的數據仍然會由系統正常傳輸。

當被 filter 的網絡數據包被攔截後,你可以選擇 clumsy 提供的功能來有目的性的調整網絡情況:

1.   延遲(Lag),把數據包緩存一段時間後再發出,這樣能夠模擬網絡延遲的狀況。

2.   掉包(Drop),隨機丟棄一些數據。

3.   節流(Throttle),把一小段時間內的數據攔截下來後再在之後的同一時間一同發出去。

4.   重發(Duplicate),隨機複製一些數據並與其本身一同發送。

5.   亂序(Out of order),打亂數據包發送的順序。

6.   篡改(Tamper),隨機修改小部分的包裹內容。

類似模擬網絡環境的軟件很多,大家可以針對自己的情況選擇,不要找環境搭建過於繁瑣的工具,簡單易用就好。

定位常用軟件

在發現問題後,定位分析時,可以藉助以下常用軟件。

1、traceview使用簡介

TraceView 是 Android 平臺特有的數據採集和分析工具,它主要用於分析 Android 中應用程序的 hotspot,可以方便的查看線程的執行情況,某個方法執行時間、調用次數、在總體中的佔比等,從而定位性能點。 

使用方法: 使用Android studio->Android Device Monitor->進入DDMS->點擊開始按鈕

Case: 在微粉首頁上下滑動,滑動過程中等待圖片、視頻加載完成 。點擊結束按鈕出現結果如下(劃分爲上下兩個面板,即Timeline Panel(時間線面板)和Profile Panel(分析面板):

Timeline Panel又可細分爲左右兩個部分: (1)左邊顯示的是測試數據中所採集的線程信息。 (2)右邊所示爲時間線,時間線上是每個線程測試時間段內所涉及的函數調用信息。 (3)可以在時間線中移動時間線縱軸。縱軸上邊將顯示當前時間點中某線程正在執行的函數信息。       

Profile Panel(分析面板)按調用次數由高到低排列結果如下圖

按照佔用CPU時間從高到低排列結果如下圖:

2、Systrace使用簡介

Systrace是Android4.1中新增的性能數據採樣和分析工具。它可幫助開發者收集Android關鍵子系統(如surfaceflinger、WindowManagerService等Framework部分關鍵模塊、服務,View系統等)的運行信息,從而幫助開發者更直觀的分析系統瓶頸,改進性能。Systrace的功能包括跟蹤系統的I/O操作、內核工作隊列、CPU負載以及Android各個子系統的運行狀況等。 使用方法: 使用Android studio->Android Device Monitor  

進入DDMS->打開微粉APP->點擊開始systrace

設置參數->點擊OK

case: 在微粉首頁滑動列表,滑動過程中需等待圖片視頻加載完成 在chrome地址欄中輸入chrome://tracing 點擊load打開trace.html文件

通過工具抓取的數據用瀏覽器打開後顯示如下:

查看Frames這一行,可以看到這裏展示了被繪製出來的每一幀,並且用綠、黃、紅三顏色來區分它們在繪製時的性能 

選一個紅色幀在底部給出Alter信息: 

展開「Inflation during ListViewrecycling」這條警告(警告部分的總耗時155毫秒,遠高於了我們對保障60fps所需的16毫秒繪製時間): 

選擇這一幀中最長的一塊,對其進行進一步分析整個區塊耗時98毫秒,而在這之中CPU只消耗了65毫秒的時間去運算

參考資料:

1、《移動App性能評測與優化》

2、安卓啓動時間分析

http://www.open-open.com/lib/view/open1451570355573.html

3、安卓CPU&內存監控

http://www.open-open.com/lib/view/open1449216889405.html

到今天爲止,我們爲大家分享了Android性能測試白皮書,包括「啓動時間、內存&CPU內存泄露&卡頓,以及今天的流量&電量&弱網環境「方面的測試方法,希望能幫助大家梳理思路。若有任何問題,歡迎一起討論!