一、Android 性能測試初探(一)
Android 性能測試,跟 pc 性能測試一樣分為客戶端及服務(wù)器,但在客戶端上的性能測試分為 2 類:
一類為 rom 版本的性能測試
一類為應(yīng)用的性能測試
對于應(yīng)用性能測試,包括很多測試項,如啟動時間、內(nèi)存、CPU、GPU、功耗、流量等。 但針對 rom 版本的性能測試,一般關(guān)注功耗。
先說說應(yīng)用的性能測試,對于啟動時間、內(nèi)存、cpu 測試大家一般都使用外部提供的第三方工具來輔助測試,如GT、安測試等、這些工具的原理都是基于調(diào)用 android 底層的一些 api 來獲取到測試所用到的值,當然我們也可以采用其他方法,如使用 android 本身提供的一套 adb 即可完成上述測試。
對于 GPU、功耗、等測試來說,用第三方工具測試得到的數(shù)值一般都不是很準確,這個時候我們需要引入硬件來進行測試了,GPU 可以采用高速相機來進行測試,功耗可以使用萬用表或安捷倫電源儀來進行測試(ps:有硬件動手能力的可以DIY一個小板進行)
再說說 rom 版本的性能測試,rom 版本一般就關(guān)注功耗測試,不過 rom 版本的功耗測試跟應(yīng)用的功耗測試會有所差異,當然只是用例設(shè)計方面的差異,工具仍然采用安捷倫電源儀進行
看到這里,大家應(yīng)該對于移動客戶端方面的性能測試有了一個大概的印象了,后續(xù)我會繼續(xù)探討如何自己創(chuàng)建工具進行性能測試,預(yù)知下文,請聽下文分解
二、Android 性能測試初探(二)
書接前文 Android 性能測試初探(一)。上回大體介紹了下在 android 端的性能測試項,現(xiàn)在我們就細節(jié)測試項做一些闡述(包括如何自己 DIY 測試)。
首先我們來說說啟動時間。關(guān)于應(yīng)用的啟動時間的測試,分為三類:
- 首次啟動 --應(yīng)用首次啟動所花費的時間
- 非首次啟動 --應(yīng)用非首次啟動所花費的時間
- 應(yīng)用界面切換--應(yīng)用界面內(nèi)切換所花費的時間
那么如何來做啟動時間的測試呢,一般我們分為2類,一類為使用軟件來測試,一類為使用硬件來測試,首先我們說說軟件測試的方法,可能大部分人都比較通曉使用 android 提供的 DisplayManager 來獲取 activity 的啟動時間吧,在這里我簡單說下如何通過批處理來 DIY
通過日志過濾關(guān)鍵字 Displayed 來過濾所有 activity 所打印的,記錄日志通過 adb logcat>/address/logcat.txt 然后使用 find “Displayed” /address/logcat.txt>/newaddress/fl.txt
通過 activity 名來過濾獲取所測應(yīng)用 find “ActivityName” /newaddress/fl.txt>/newaddress/last.txt
通過計算 activity 最后剩余的時間之和即可(這里可以使用 excel 表格自動相加也可以使用算法,我就不詳細介紹了)
除了 DisplayManager 的打印時間方法后,還有通過關(guān)注 am 的啟動時間及 DisplayManager 打印的結(jié)束時間,通過兩者時間之間想減也能得到應(yīng)用的啟動時間,還有可以通過 PowerManager 來計算打印時間,在應(yīng)用啟動的時候,我們可以關(guān)注 ActivityManager-Launch 的變化來計算應(yīng)用的啟動時間,還有可以通過截圖統(tǒng)計啟動時間,對于自研應(yīng)用,最效率的莫過于直接在程序中插入打印時間的節(jié)點了
說完了軟件測試的方法,接下來我們聊聊硬件測試,這里我們可以使用高速相機或者手機,采用錄像的方法把應(yīng)用啟動過程給錄制下來,然后通過人工數(shù)幀或者程序數(shù)幀的方式計算啟動時間
好了,今天就說到這里,下回繼續(xù)說其他測試項
三、Android 性能測試初探(三)
書接上文 Android 性能測試初探(二) 本文接著往下聊,今天主聊 CPU 及 內(nèi)存
看到這兩個名詞,做過PC性能測試的就比較熟悉了,同樣的性能測試關(guān)注點 :)
首先說說內(nèi)存,移動端關(guān)注的是內(nèi)存消耗,這個測試節(jié)點的設(shè)計目標是為了讓應(yīng)用不占用過多的系統(tǒng)資源,且及時釋放內(nèi)存,保障整個系統(tǒng)的穩(wěn)定性,當然關(guān)于內(nèi)存測試,在這里我們需要引入幾個概念,
空閑狀態(tài)
中等規(guī)格
滿規(guī)格,
空閑狀態(tài):指打開應(yīng)用后,點擊home鍵讓應(yīng)用后臺運行,此時應(yīng)用處于的狀態(tài)叫做空閑。 中等規(guī)格和滿規(guī)格指的是對應(yīng)用的操作時間的間隔長短不一,中等規(guī)格時間較長,滿規(guī)格時間較短。
接下來我們說說在內(nèi)存測試中,存在很多測試子項,如下清單所示
1.空閑狀態(tài)下的應(yīng)用內(nèi)存消耗情況
2.中等規(guī)格狀態(tài)下的應(yīng)用內(nèi)存消耗情況
3.滿規(guī)格狀態(tài)下的應(yīng)用內(nèi)存消耗情況
4.應(yīng)用內(nèi)存峰值情況
5.應(yīng)用內(nèi)存泄露情況
6.應(yīng)用是否常駐內(nèi)存
7.壓力測試后的內(nèi)存使用情況
說了一些關(guān)于內(nèi)存測試方面的設(shè)定,接下來我們聊聊測試方法DIY,現(xiàn)在關(guān)于android內(nèi)存測試的方法基本分為幾類,
1.使用 android 本身提供的 ActivityManager.MemoryInfo() 方法獲得(此方法請百度或google)此類第三方工具有如網(wǎng)易的Emmagee、安測試、騰訊的GT等
2.使用 android 提供的 adb shell dumpsys meminfo |grep packagename >/address/mem.txt 來獲取
3.使用 android 提供的 procrank
這里我們詳解一下 procrank 方法(批處理)
首先去google獲取procrank、procmem、libpagemap.so 三個文件 .
然后push文件,執(zhí)行 adb push procrank /system/xbin adb push procmem /system/xbin adb push libpagemap.so /system/lib
賦權(quán) adb shell chmod 6755 /system/xbin/procrank adb shell chmod 6755 /system/xbin/procmem adb shell chmod 6755 /system/lib/libpagemap.so ,
在開啟工具記錄 adb shell procrank |grep packagename >/address/procrank.txt
剩下的就是整理測試數(shù)據(jù)了
關(guān)于內(nèi)存泄露方面的測試,可以通過幾個方面來測試
1.通過monkey壓力測試記錄內(nèi)存使用情況,分析數(shù)據(jù)曲線圖及日志情況
2.通過eclipse上的mat+heap來分析存在內(nèi)存泄露方面的節(jié)點
說了這么多內(nèi)存的,我們再來說說CPU方面的,CPU跟內(nèi)存一樣,存在一些測試子項,如下清單所示
1.空閑狀態(tài)下的應(yīng)用CPU消耗情況
2.中等規(guī)格狀態(tài)下的應(yīng)用CPU消耗情況
3.滿規(guī)格狀態(tài)下的應(yīng)用CPU消耗情況
4.應(yīng)用CPU峰值情況
CPU的測試方法分為幾類
1.使用android提供的adb shell dumpsys cpuinfo |grep packagename >/address/cpu.txt來獲取
2.使用top命令 adb shell top |grep packagename>/address/cpu.txt 來獲取
恩,說了大半章了,cpu及內(nèi)存的測試相信各位應(yīng)該有所了解了,下回繼續(xù)聊其他測試項
root之后裝個管理器,設(shè)置權(quán)限
adb push文件的時候,我遇到的問題:
1、Read-only file system。
2、Operation not permitted
解決辦法:
adb shell
$ su
mount -o rw,remount /system
chmod 777 /system
cd system
chmod 777 xbin
cd xbin
exit
$ exit
然后再執(zhí)行adb push 就可以了
以上供參考~
四、Android 性能測試初探(四)
書接上文 Android 性能測試初探(三)
自從 cpu及內(nèi)存后,GPU 這個詞對于 PC 性能測試者也不陌生了,什么 3Dmax,安兔兔之類的第三方軟件讓 GPU 在移動端性能測試領(lǐng)域都知曉,但對于應(yīng)用的 GPU 該如何來測試呢,我們先引入幾個名詞:
過度繪制
幀率
幀方差
過度繪制是指界面顯示的 activity 套接了多層而導(dǎo)致。幀率是指屏幕刷新率。幀方差是指屏幕刷新幀間隔方差。
對于 GPU 的測試主要包括以下幾個測試子項
界面過度繪制
屏幕滑動幀速率
屏幕滑動平滑度
對于過度繪制的測試主要通過人工進行測試,通過打開開發(fā)者選項中的 顯示GPU過度繪制 來進行測試(PS:只有android4.2及以上的版本才具備此功能),驗收的標準為:
不允許出現(xiàn)黑色像素
不允許存在4x過度繪制
不允許存在面積超過屏幕1/4區(qū)域的3x過度繪制(淡紅色區(qū)域)
對于屏幕滑動幀速率主要有 2 種方法。
先說說軟件測試的方法:
1.手機端需打開開發(fā)者選項中的 啟用跟蹤 后勾選 Graphics 和 View
2.啟動 SDK 工具 Systrace 插件,勾選被測應(yīng)用,點擊 Systrace 插件,在彈出的對話框中設(shè)置持續(xù)抓取時間,在trace taps下面勾選 gfx 及 view 選項,
3.人滑動界面可以通過節(jié)拍來進行滑動或者掃動,幀率數(shù)據(jù)會保存到默認路徑下,默認名稱為 trace.html
4.將trace.html文件拷貝到linux系統(tǒng)下 通過命令進行轉(zhuǎn)換,生成trace.csv文件
grep 'postFramebuffer' trace.html | sed -e 's/.]\W//g' -e 's/:.*$//g' -e 's/.//g' > trace.csv
5.用excel打開文件計算得到幀率
接下來我們說說硬件的方法,這里需要引入高速相機,打開高速相機,開啟攝像模式,錄制人滑動或者掃動被測應(yīng)用的視頻,再通過人工或者程序數(shù)幀的方法對結(jié)果進行計算得到幀率
對于屏幕滑動平滑度的測試,方法如同幀率測試,唯一的差異就是最后的結(jié)果計算公式的差異
GPU的測試目前業(yè)界使用的均為硬件來進行,軟件測試的數(shù)據(jù)相較硬件差異較大,對于幀率及幀方差的測試標準而言,需對待不同機型設(shè)定不同的標準
好了,對于GPU方面的測試介紹到此,相信大家對于這塊不會陌生了:)
預(yù)知下文,請聽下回分解
五、Android 性能測試初探(五)
書接上文 Android 性能測試初探之 GPU(四)
前文說了的一些性能測試項大家可能都聽說,接下來我們聊聊大家不常關(guān)注的測試項- 功耗 。
功耗測試主要從以下幾個方面入手進行測試
測試手機安裝目標APK前后待機功耗無明顯差異
常見使用場景中能夠正常進入待機,待機電流在正常范圍內(nèi).
長時間連續(xù)使用應(yīng)用無異常耗電現(xiàn)象
功耗測試的方法分為兩類,一類為軟件測試,一類為硬件測試
我們先說說軟件測試,這里我們會聊聊一些DIY的思路,軟件測試一般分為2類,
第一種采用市場上提供的第三方工具,如金山電池管家之類的。
第二種就是自寫工具進行,這里一般會使用3種方法
第一種基于android提供的PowerManager.WakeLock來進行,
第二種比較復(fù)雜一點,功耗的計算=CPU消耗+Wake lock消耗+數(shù)據(jù)傳輸消耗+GPS消耗+Wi-Fi連接消耗,
第三種通過 adb shell dumpsys battery來獲取
接著說硬件測試,在這里我們一般使用萬用表或者功耗儀進行測試,使用功耗儀測試的時候,需要制作假電池來進行的,有些不能拔插電池的手機還需要焊接才能進行功耗測試
功耗測試大體就說到這里,大家應(yīng)該對功耗測試有一些了解了,下文將講解流量,盡請期待
六、Android 性能測試初探(六)
書接前文 Android 性能測試初探之功耗(五)
本節(jié)聊聊性能測試的最后一項- 流量,當然我所指的性能測試是針對大部分應(yīng)用而言的,可能還有部分應(yīng)用會關(guān)注網(wǎng)速、弱網(wǎng)之類的測試,但本系列文章都不去一一探討了
流量測試,同樣需要引入幾個名詞
中等負荷:應(yīng)用正常操作
高負荷:應(yīng)用極限操作
流量測試包括以下測試項:
應(yīng)用首次啟動流量提示
應(yīng)用后臺連續(xù)運行 2 小時的流量值
應(yīng)用高負荷運行的流量峰值
應(yīng)用中等負荷運行時的流量均值
流量測試一般都是用軟件來進行的,這里我們一般分為2類:
采用市場提供的第三方工具來進行測試,如流量寶之類的
自研工具進行測試
自研工具進行測試一般包含 2 類方法,
通過 tcpdump 抓包,再通過 wireshake 直接讀取包信息來獲得流量
首先獲得被測應(yīng)用的 uid 信息,可以通過 adb shell dumpsys package 來獲取 然后在未操作應(yīng)用之前,我們可以通過查看 adb shell cat /proc/uid_stat/uid/tcp_rcv adb shell cat /proc/uid_stat/uid/tcp_snd 獲取到應(yīng)用的起始的接收及發(fā)送的流量,然后我們再操作應(yīng)用,再次通過上述 2 條命令可以獲取到應(yīng)用的結(jié)束的接收及發(fā)送的流量,通過相減及得到應(yīng)用的整體流量消耗
好了,流量測試就說到這里,android 性能測試初探之旅就到此結(jié)束了,下回我們將探討 android 安全測試,預(yù)知下文,敬請期待