背景介紹
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? ?? /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
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毫秒的時間去運算