移動(dòng)App專項(xiàng)性能測(cè)試(Android and iOS)

一直以來,性能測(cè)試是被一部分人遺忘,又讓另一部分人無可奈何的東西。在絕大部分的創(chuàng)業(yè)公司,性能測(cè)試基本上都是被遺忘的,他們認(rèn)為功能測(cè)試和穩(wěn)定性測(cè)試才是重點(diǎn),而在中等規(guī)模的公司中一部分測(cè)試人員考慮進(jìn)行性能測(cè)試,卻無從下手。
從測(cè)試工程師的工作實(shí)踐出發(fā),介紹移動(dòng)端性能測(cè)試的通用方法和結(jié)合產(chǎn)品特點(diǎn)的不同側(cè)重。
隨著流量費(fèi)用的降低,越來越多的人開始在公交地鐵等移動(dòng)場(chǎng)景使用視頻應(yīng)用。視頻類的應(yīng)用會(huì)更多關(guān)注播放流暢度、下載等性能指標(biāo),下面介紹的是百度視頻的性能測(cè)試方法
視頻app是第三方視頻資源聚合類產(chǎn)品,主要提供用戶在線播放、離線下載各種視頻服務(wù),提供PC、Android、iOS三端入口,用戶體驗(yàn)、流暢度、下載速度、檢索視頻資源等是目前產(chǎn)品線最關(guān)注的層面。
一款優(yōu)秀的娛樂類應(yīng)用,必須具有卓越的性能,超越同類競(jìng)品,同時(shí)兼具良好的用戶體驗(yàn)。
1. App性能分析維度
App類型眾多,根據(jù)具體類型劃分,性能指標(biāo)的維度和優(yōu)先級(jí)各不相同。視頻類App歸屬于娛樂游戲型的App,因此性能測(cè)試維度優(yōu)先級(jí)排序?yàn)椋毫鲿扯?、crash、內(nèi)存、流量、響應(yīng)時(shí)長(zhǎng)、功耗、CPU。
表征不同維度指標(biāo)的量化單位如圖21所示。比如流暢度是FPS(幀率),內(nèi)存是兆比等等。

因?yàn)锳ndroid平臺(tái)底層是由linux系統(tǒng)改良而來,不同維度的指標(biāo)絕大部分都可以通過命令來取不同的指標(biāo)(具體方法可以參加后面工具)
在iOS平臺(tái)上,性能的獲取,必須使用Xcode里面instruments下的相應(yīng)組件,不像開源的Android那樣靈活,但技術(shù)上是可以做到各平臺(tái)的性能指標(biāo)獲取測(cè)試。
2. App性能指標(biāo)獲取手段
2.1 Android系統(tǒng)指標(biāo)獲取
CPU
CPU的測(cè)試方法分為幾類
a.使用Android提供的方法
adbshell dumpsyscpuinfo |grep packagename >/xxx/cpu.txt來獲取
b.使用top命令
adbshell top |greppackagename>/xxx/cpu.txt來獲取
內(nèi)存
內(nèi)存消耗,這個(gè)測(cè)試的設(shè)計(jì)目標(biāo)是為了讓應(yīng)用不占用過多的系統(tǒng)資源,且及時(shí)釋放內(nèi)存,保障整個(gè)系統(tǒng)的穩(wěn)定性,當(dāng)然關(guān)于內(nèi)存測(cè)試,在這里我們需要引入幾個(gè)概念:空閑狀態(tài)、中等規(guī)格、滿規(guī)格。
空閑狀態(tài):指打開應(yīng)用后,點(diǎn)擊home鍵讓應(yīng)用后臺(tái)運(yùn)行,此時(shí)應(yīng)用處于的狀態(tài)叫做空閑。中等規(guī)格和滿規(guī)格指的是對(duì)應(yīng)用的操作時(shí)間的間隔長(zhǎng)短不一,中等規(guī)格時(shí)間較長(zhǎng),滿規(guī)格時(shí)間較短。
接下來我們說說在內(nèi)存測(cè)試中,存在很多測(cè)試子項(xiàng),如下清單所示:
空閑狀態(tài)下的應(yīng)用內(nèi)存消耗情況
中等規(guī)格狀態(tài)下的應(yīng)用內(nèi)存消耗情況
滿規(guī)格狀態(tài)下的應(yīng)用內(nèi)存消耗情況
應(yīng)用內(nèi)存峰值情況
應(yīng)用內(nèi)存泄露情況
應(yīng)用是否常駐內(nèi)存
壓力測(cè)試后的內(nèi)存使用情況
電量
功耗測(cè)試主要從以下幾個(gè)方面入手進(jìn)行測(cè)試:
a、測(cè)試手機(jī)安裝目標(biāo)APK前后待機(jī)功耗無明顯差異。
b、常見使用場(chǎng)景中能夠正常進(jìn)入待機(jī),待機(jī)電流在正常范圍內(nèi)。
c、長(zhǎng)時(shí)間連續(xù)使用應(yīng)用無異常耗電現(xiàn)象。
功耗測(cè)試的方法分為兩類,一類為軟件測(cè)試,一類為硬件測(cè)試。
一般分為2類:
第一種采用市場(chǎng)上提供的第三方工具,如金山電池管家之類的。第二種就是自寫工具進(jìn)行,這里一般會(huì)使用3種方法:
方法一、基于android提供的PowerManager.WakeLock來進(jìn)行;
方法二、稍復(fù)雜一點(diǎn),功耗的計(jì)算=CPU消耗+Wakelock消耗+數(shù)據(jù)傳輸消耗+GPS消耗+Wi-Fi連接消耗;
方法三、通過adbshell dumpsys battery來獲取。
接著說下硬件測(cè)試,在這里我們一般使用萬用表或者功耗儀進(jìn)行測(cè)試,使用功耗儀測(cè)試的時(shí)候,需要制作假電池來進(jìn)行的,有些不能拔插電池的手機(jī)還需要焊接才能進(jìn)行對(duì)了測(cè)試。
啟動(dòng)時(shí)長(zhǎng)
首先我們來說說啟動(dòng)時(shí)間。關(guān)于應(yīng)用的啟動(dòng)時(shí)間的測(cè)試,分為三類:
首次啟動(dòng) --應(yīng)用首次啟動(dòng)所花費(fèi)的時(shí)間 非首次啟動(dòng) --應(yīng)用非首次啟動(dòng)所花費(fèi)的時(shí)間 應(yīng)用界面切換--應(yīng)用界面內(nèi)切換所花費(fèi)的時(shí)間
那么如何來做啟動(dòng)時(shí)間的測(cè)試呢,一般我們分為2類,一類為使用軟件來測(cè)試,一類為使用硬件來測(cè)試。對(duì)于軟件測(cè)試的方法,大部分人都比較通曉使用Android 提供的 DisplayManager 來獲取 activity 的啟動(dòng)時(shí)間。通過日志過濾關(guān)鍵字 Displayed 來過濾所有 activity 所打印的,記錄日志通過。
幀率
GPU這個(gè)詞對(duì)于PC性能測(cè)試者來說并不陌生,而今3Dmax,安兔兔之類的第三方軟件讓GPU 在移動(dòng)端性能測(cè)試領(lǐng)域家喻戶曉,但對(duì)于App內(nèi)的GPU該如何來測(cè)試呢?首先我們引入幾個(gè)名詞:過度繪制、幀率、幀方差。
過度繪制是指界面顯示的activity套接了多層導(dǎo)致的結(jié)果。幀率是指屏幕刷新率。幀方差是指屏幕刷新幀間隔方差。
對(duì)于 GPU 的測(cè)試主要包括以下幾個(gè)測(cè)試子項(xiàng):界面過度繪制、屏幕滑動(dòng)幀速率、屏幕滑動(dòng)平滑度。
對(duì)于過度繪制的測(cè)試主要通過人工進(jìn)行測(cè)試,通過打開開發(fā)者選項(xiàng)中的顯示GPU過度繪制來進(jìn)行測(cè)試(PS:只有Android4.2及以上的版本才具備此功能),驗(yàn)收的標(biāo)準(zhǔn)為:
a、不允許出現(xiàn)黑色像素
b、不允許存在4x過度繪制
c、不允許存在面積超過屏幕1/4區(qū)域的3x過度繪制(淡紅色區(qū)域)
對(duì)于屏幕滑動(dòng)幀速率,常用手段包括軟件測(cè)試或硬件輔助測(cè)試。軟件測(cè)試的方法如下:
1.手機(jī)端需打開開發(fā)者選項(xiàng)中的啟用跟蹤后,勾選Graphics 和 View;
2.啟動(dòng)SDK工具Systrace插件,勾選被測(cè)應(yīng)用,點(diǎn)擊Systrace插件,在彈出的對(duì)話框中設(shè)置持續(xù)抓取時(shí)間,在tracetaps下面勾選gfx及view選項(xiàng);
3.人滑動(dòng)界面可以通過節(jié)拍來進(jìn)行滑動(dòng)或者掃動(dòng),幀率數(shù)據(jù)會(huì)保存到默認(rèn)路徑下,默認(rèn)名稱為 trace.html;
4.將trace.html文件拷貝到linux系統(tǒng)下通過命令進(jìn)行轉(zhuǎn)換,生成trace.csv文件。
網(wǎng)絡(luò)流量
性能測(cè)試的——流量,當(dāng)然我所指的性能測(cè)試是針對(duì)大部分應(yīng)用而言的,可能還有部分應(yīng)用會(huì)關(guān)注網(wǎng)速、弱網(wǎng)之類的測(cè)試。流量測(cè)試,同樣需要引入幾個(gè)名詞:
中等負(fù)荷:應(yīng)用正常操作
高負(fù)荷:應(yīng)用極限操作
流量測(cè)試包括以下測(cè)試項(xiàng):
a、應(yīng)用首次啟動(dòng)流量提示
b、應(yīng)用后臺(tái)連續(xù)運(yùn)行2小時(shí)的流量值
c、應(yīng)用高負(fù)荷運(yùn)行的流量峰值
d、應(yīng)用中等負(fù)荷運(yùn)行時(shí)的流量均值流量測(cè)試
流量測(cè)試一般都是用軟件來進(jìn)行的,這里我們一般分為2類:
a、采用市場(chǎng)提供的第三方工具來進(jìn)行測(cè)試,如流量寶
b、自研工具進(jìn)行測(cè)試
自研工具進(jìn)行測(cè)試一般包含 2 類方法:
a、通過tcpdump抓包,再通過wireshake直接讀取包信息來獲得流量
b、首先獲得被測(cè)應(yīng)用的uid信息(可以通過adbshelldumpsys package來獲?。缓笤谖床僮鲬?yīng)用之前,我們可以通過查看
adbshell cat/proc/uid_stat/uid/tcp_rcv
adbshell cat/proc/uid_stat/uid/tcp_snd
獲取到應(yīng)用的起始的接收及發(fā)送的流量,然后我們?cè)俨僮鲬?yīng)用,再次通過上述 2 條命令可以獲取到應(yīng)用的結(jié)束的接收及發(fā)送的流量,通過相減及得到應(yīng)用的整體流量消耗。
2.2 iOS系統(tǒng)指標(biāo)獲取
對(duì)于iOS系統(tǒng),只需要一個(gè)裝了xcode的mac電腦,取以上指標(biāo)相對(duì)容易。
性能測(cè)試工具,推薦用下面三個(gè):
工具一、Instruments,這個(gè)是mac蘋果自帶的工具,里面有很多模板,選擇不同的系能模板就可以監(jiān)聽手機(jī)App性能了,但是要注意,沒越獄的機(jī)器必須注冊(cè)開發(fā)者證書,或者拿到App企業(yè)證書,這樣xcode才能啟動(dòng)App進(jìn)行性能監(jiān)控,也就是說你被測(cè)App必須有源代碼才行,當(dāng)然你想規(guī)避這個(gè)問題,得走百度smallApple破解簽名機(jī)制
工具二、GT,是騰訊開發(fā)的一款A(yù)pp,但是也得在源碼層面嵌入GT的SDK
工具三、SmallApple
https://github.com/hyxbiao/smallapple
Smallapple是一個(gè)開源的IOS自動(dòng)化測(cè)試工具,旨在提供一套完整的iOS自動(dòng)化測(cè)試解決方案,提供針對(duì)iOS App的功能和性能測(cè)試,同時(shí)提供類似Android adb、重簽名、instruments結(jié)果解析、錄制回放等工具集。
Smallapple通過一鍵式的執(zhí)行方式,自動(dòng)完成App重簽名、安裝、測(cè)試、性能采集(包括CPU、內(nèi)存、流量等)、Crash檢測(cè)和結(jié)果報(bào)告等工作。
Smallapple特性:
Smallapple致力于以最簡(jiǎn)單的方式,最小的代價(jià)提供給用戶使用。 支持非越獄設(shè)備 不需要依賴源碼 支持Appstore或者第三方下載的App安裝測(cè)試 完全的命令行模式
PS: 由狂師老師親自授課主講的「全棧測(cè)試開發(fā)技能訓(xùn)練營」正在招生,課程非常值得推薦,課程大綱:重磅消息 | 2021年最新全棧測(cè)試開發(fā)技能實(shí)戰(zhàn)指南(第2期)
END

長(zhǎng)按二維碼/微信掃碼 添加作者
