背景介紹html
一直以來,性能測試是被一部分人遺忘,又讓另外一部分人迫不得已的東西。在絕大部分的創業公司,性能測試基本上都是被遺忘的,他們認爲功能測試和穩定性測試纔是重點,而在中等規模的公司中一部分測試人員考慮進行性能測試,卻無從下手。linux
這個系列,從 baidu 測試工程師的工做實踐出發,介紹移動端性能測試的通用方法和結合產品特色的不一樣側重。android
隨着流量費用的下降,愈來愈多的人開始在公交地鐵等移動場景使用視頻應用。視頻類的應用會更多關注播放流暢度、下載等性能指標,下面介紹的是百度視頻的性能測試方法。git
百度視頻是第三方視頻資源聚合類產品,主要提供用戶在線播放、離線下載各類視頻服務,提供 PC 、 Android 、 iOS 三端入口,用戶體驗、流暢度、下載速度、檢索視頻資源等是目前產品線最關注的層面。github
一款優秀的娛樂類應用,必須具備卓越的性能,超越同類競品,同時兼具良好的用戶體驗。shell
APP性能分析維度xcode
App 類型衆多,根據具體類型劃分,性能指標的維度和優先級各不相同。視頻類 App 歸屬於娛樂遊戲型的 App ,所以性能測試維度優先級排序爲:流暢度、 crash 、內存、流量、響應時長、功耗、 CPU 。網絡
表徵不一樣維度指標的量化單位如圖 21 所示。好比流暢度是 FPS (幀率),內存是兆比等等。app
由於 Android 平臺底層是由 linux 系統改良而來,不一樣維度的指標絕大部分均可以經過命令來取不一樣的指標(具體方法能夠參加後面工具)tcp
在 iOS 平臺上,性能的獲取,必須使用 Xcode 裏面 instruments 下的相應組件,不像開源的 Android 那樣靈活,但技術上是能夠作到各平臺的性能指標獲取測試。
APP性能指標獲取手段
Android系統指標獲取
· CPU
CPU 的測試方法分爲幾類
a. 使用 Android 提供的方法
adbshell dumpsyscpuinfo |grep packagename >/address/cpu.txt 來獲取
b. 使用 top 命令
adbshell top |greppackagename>/address/cpu.txt 來獲取
· 內存
內存消耗,這個測試節點的設計目標是爲了讓應用不佔用過多的系統資源,且及時釋放內存,保障整個系統的穩定性,固然關於內存測試,在這裏咱們須要引入幾個概念:空閒狀態、中等規格、滿規格。
空閒狀態:指打開應用後,點擊 home 鍵讓應用後臺運行,此時應用處於的狀態叫作空閒。中等規格和滿規格指的是對應用的操做時間的間隔長短不一,中等規格時間較長,滿規格時間較短。
接下來咱們說說在內存測試中,存在不少測試子項,以下清單所示:
一、空閒狀態下的應用內存消耗狀況
二、中等規格狀態下的應用內存消耗狀況
三、滿規格狀態下的應用內存消耗狀況
四、應用內存峯值狀況
五、應用內存泄露狀況
六、應用是否常駐內存
七、壓力測試後的內存使用狀況
電量
功耗測試主要從如下幾個方面入手進行測試:
a 、測試手機安裝目標 APK 先後待機功耗無明顯差別。
b 、常見使用場景中可以正常進入待機,待機電流在正常範圍內。
c 、長時間連續使用應用無異常耗電現象。
功耗測試的方法分爲兩類,一類爲軟件測試,一類爲硬件測試。
軟件測試通常分爲 2 類:
第一種採用市場上提供的第三方工具,如金山電池管家之類的。第二種就是自寫工具進行,這裏通常會使用 3 種方法 :
方法1、基於 android 提供的 PowerManager.WakeLock 來進行;
方法2、稍複雜一點,功耗的計算 =CPU 消耗 +Wakelock 消耗 + 數據傳輸消耗 +GPS 消耗 +Wi-Fi 鏈接消耗;
方法3、經過 adbshell dumpsys battery 來獲取。
接着說下硬件測試,在這裏咱們通常使用萬用表或者功耗儀進行測試,使用功耗儀測試的時候,須要製做假電池來進行的,有些不能拔插電池的手機還須要焊接才能進行對了測試。
· 啓動時長
首先咱們來講說啓動時間。關於應用的啓動時間的測試,分爲三類:
首次啓動 -- 應用首次啓動所花費的時間
非首次啓動 -- 應用非首次啓動所花費的時間
應用界面切換 -- 應用界面內切換所花費的時間
那麼如何來作啓動時間的測試呢,通常咱們分爲 2 類,一類爲使用軟件來測試,一類爲使用硬件來測試。對於軟件測試的方法,大部分人都比較通曉使用 Android 提供的 DisplayManager 來獲取 activity 的啓動時間。經過日誌過濾關鍵字 Displayed 來過濾全部 activity 所打印的,記錄日誌經過。
· 幀率
GPU 這個詞對於 PC 性能測試者來講並不陌生,而今 3Dmax ,安兔兔之類的第三方軟件讓 GPU 在移動端性能測試領域家喻戶曉,但對於 App 內的 GPU 該如何來測試呢?首先咱們引入幾個名詞:過分繪製、幀率、幀方差。
過分繪製是指界面顯示的 activity 套接了多層致使的結果。幀率是指屏幕刷新率。幀方差是指屏幕刷新幀間隔方差。
對於 GPU 的測試主要包括如下幾個測試子項:界面過分繪製、屏幕滑動幀速率、屏幕滑動平滑度。
對於過分繪製的測試主要經過人工進行測試,經過打開開發者選項中的顯示 GPU 過分繪製來進行測試( PS :只有 Android4.2 及以上的版本才具有此功能 ) ,驗收的標準爲 :
a 、不容許出現黑色像素
b 、不容許存在 4x 過分繪製
c 、不容許存在面積超過屏幕 1/4 區域的 3x 過分繪製(淡紅色區域)
對於屏幕滑動幀速率,經常使用手段包括軟件測試或硬件輔助測試。軟件測試的方法以下:
1. 手機端需打開開發者選項中的啓用跟蹤後,勾選 Graphics 和 View ;
2. 啓動 SDK 工具 Systrace 插件,勾選被測應用,點擊 Systrace 插件,在彈出的對話框中設置持續抓取時間,在 tracetaps 下面勾選 gfx 及 view 選項;
3. 人滑動界面能夠經過節拍來進行滑動或者掃動,幀率數據會保存到默認路徑下,默認名稱爲 trace.html ;
4. 將 trace.html 文件拷貝到 linux 系統下經過命令進行轉換,生成 trace.csv 文件。
· 網絡流量
性能測試的——流量,固然我所指的性能測試是針對大部分應用而言的,可能還有部分應用會關注網速、弱網之類的測試。流量測試,一樣須要引入幾個名詞:
中等負荷:應用正常操做
高負荷:應用極限操做
流量測試包括如下測試項:
a 、應用首次啓動流量提示
b 、應用後臺連續運行 2 小時的流量值
c 、應用高負荷運行的流量峯值
d 、應用中等負荷運行時的流量均值流量測試
流量測試通常都是用軟件來進行的,這裏咱們通常分爲 2 類:
a 、採用市場提供的第三方工具來進行測試,如流量寶
b 、自研工具進行測試
自研工具進行測試通常包含 2 類方法:
a 、經過 tcodump 抓包,再經過 wireshake 直接讀取包信息來得到流量
b 、首先得到被測應用的 uid 信息(能夠經過 adbshelldumpsys package 來獲取),而後在未操做應用以前,咱們能夠經過查看
adbshell cat/proc/uid_stat/uid/tcp_rcv
adbshell cat/proc/uid_stat/uid/tcp_snd
獲取到應用的起始的接收及發送的流量,而後咱們再操做應用,再次經過上述 2 條命令能夠獲取到應用的結束的接收及發送的流量,經過相減及獲得應用的總體流量消耗。
· iOS系統指標獲取
對於 iOS 系統,只須要一個裝了 xcode 的 mac 電腦,取以上指標相對容易。最新版本是 xcode7.0 (固然你用老版本的也一點問題都沒有)
性能測試工具,推薦用下面三個 :
工具1、 Instruments ,這個是 mac 蘋果自帶的工具,裏面有不少模板,選擇不一樣的系能模板就能夠監聽手機 App 性能了,可是要注意,沒越獄的機器必須註冊開發者證書,或者拿到 App 企業證書,這樣 xcode 才能啓動 App 進行性能監控,也就是說你被測 App 必須有源代碼才行,固然你想規避這個問題,得走百度 smallApple 破解簽名機制
工具2、 GT ,是騰訊開發的一款 App ,可是也得在源碼層面嵌入 GT 的 SDK
工具3、 SmallApple ( https://github.com/hyxbiao/smallapple )
Smallapple 是一個開源的 IOS 自動化測試工具,旨在提供一套完整的 iOS 自動化測試解決方案,提供針對 iOS App 的功能和性能測試,同時提供相似 Android adb 、重簽名、 instruments 結果解析、錄製回放等工具集。
Smallapple 經過一鍵式的執行方式,自動完成 App 重簽名、安裝、測試、性能採集(包括 CPU 、內存、流量等)、 Crash 檢測和結果報告等工做。
Smallapple 特性:
· Smallapple 致力於以最簡單的方式,最小的代價提供給用戶使用。
· 支持非越獄設備
· 不須要依賴源碼
· 支持 Appstore 或者第三方下載的 App 安裝測試
· 徹底的命令行模式
本文轉自【百度質量部】,更多文章可關注公衆號【測試幫日記】