此文已由做者楊曉受權網易雲社區發佈。
前端
歡迎訪問網易雲社區,瞭解更多網易技術產品運營經驗。web
本文從做者所在項目進行的耗電量測試入手,介紹了移動端App耗電量測試的一些基本概念和方法,重點介紹了iOS應用的耗電量測試的一些實戰經驗。
算法
耗電量測試是指測試App在運行過程當中消耗的能量。設備運行期間消耗能量公式:
安全
W = w * t = U * I * t
網絡
其中U爲電池供電電壓,I爲電流值,t爲測試時間。一般來講U能夠認爲不變,所以Q = I * t(mAh)能夠做爲消耗能量的值。對於平穩的測試過程,耗電量與測試時間成正比,所以能夠經過平均電流 I = Q / t來評價耗電量水平。
前端性能
電池電量幾乎是移動設備最受限的資源,對於長期運行的App來講,耗電量會直接決定電池的續航時間。所以App的耗電量也是移動端App性能的一個評價標準。
工具
儘管App的耗電量對移動設備影響巨大,可是並不是全部的App都須要進行耗電量測試。一般來講,須要持續開啓或後臺運行的App,耗電量對設備續航時間的影響更爲顯著,才須要啓動耗電量專項測試。
性能
一般而言,有需求進行耗電量測試的App都會有性能熱點,如CPU或GPU計算量大,網絡通訊頻繁,長期調用攝像頭等系統硬件,等等,也有可能兼而有之。
測試
一般電量測試的方法有以下幾種:
優化
調用系統提供的Api對電量進行記錄
在代碼中插入獲取電量信息的代碼,記錄結果
經過電力計量芯片來記錄耗電量信息
Android系統已經提供了電量的Api,由杭研QA開發的Emmagee工具也能夠對單個Android的應用進行實時耗電量的記錄,十分好用。
iOS系統沒有開放的Api接口能夠直接獲取電量使用信息,只能經過開發者模式記錄測試過程當中的耗電量信息,並在Instruments中查看。這種方法和在Xcode中調試App獲取到的電量信息同樣,只能精確到5%,精度較低。具體方法將在本文稍後給出。
第二種方法是在代碼中注入獲取電量信息的代碼,以後能夠經過統計數據來對App的耗電量進行分析。這種方法的優勢在於,能夠在獲取電量信息的同時獲取到App的運行狀況等信息,便於判斷性能熱點。可是缺點也是顯而易見的,須要將測試代碼注入到開發代碼中,通用性很差,影響開發代碼。
第三種方法須要將設備的電池拆卸下來,在電池和設備之間接入電力計量測試單元(芯片),經過串口對芯片數據進行實時採樣,進行記錄。
這種方法獲得的數據較爲準確,經過穩壓電源供電還能夠進一步去除電池剩餘電量引發電池電壓變化對耗電量產生的影響,使得測試條件更穩定。優勢是不須要對App作任何處理,能夠充分還原App的實際使用狀況。不過缺點也是顯而易見的,如今的移動設備大部分都是不可拆卸電池,接入電量測試單元也就意味着會對設備進行拆解,成本較高;限於成本,沒法對大量不一樣型號的設備進行電量測試。
iOS系統能夠經過設置->開發者->Logging對耗電量信息進行記錄。執行完畢後,可將設備連入電腦,經過Xcode的Instruments工具中的Energy Diagnostics查看。步驟以下:
開啓Logging
因爲此方法記錄的是整機的耗電狀況,所以須要關閉其餘後臺的應用和後臺刷新數據開關等可能影響結果的設置。
點擊設置->開發者->Logging,打開電量記錄開關。(如圖)點擊Start Recording按鈕,開始記錄。
執行測試步驟
關閉Logging
執行完測試步驟後,一樣在設置->開發者->Logging下,點擊Stop Recording按鈕,結束記錄。
在Instruments中查看
將設備鏈接至Mac,打開Xcode->Instruments,選擇Energy Diagnostics模板,選擇File -> Import Logged Data From Device就能夠看到耗電量、CPU、Wifi、網絡流量等多種數據了(如圖)。
電量(Energy Usage Level)的數據相似於15/20,能夠解讀爲以此耗電水平持續工做1小時,能夠耗盡設備電量的15/20。20/20意味着啓動此耗電水平的App能夠在滿電量設備上工做1小時,1/20意味着能夠工做20小時,以此類推。
耗電量的硬件測試方法須要對設備進行必定的改造,其原理圖以下所示:
將設備的電池拆除,或斷開電池與機身的鏈接後,採用穩壓電源爲設備供電,並在供電線上接入電力計量芯片。電力計量芯片上有接口能夠獲取實時的電流數值,連入PC的USB串口後,能夠經過腳本對實時電流進行採樣。
在本項目的耗電量測試中,採用的是上文所述的第三種方法。公司的互娛MTL實驗室和雷火MTL實驗室均提供了相應的硬件和軟件支持,能夠實時展現電量數據,手動開啓和關閉數據記錄過程,經過腳本處理原始數據自動造成Excel報告。
我所在的洞見項目是一款AR展現的iOS App,啓動系統相機後,對實物進行掃描定位,成功後在屏幕中央展現3D模型並播放動畫。持續調用系統相機、定位算法、模型渲染展現和播放動畫均是耗電熱點。
在測試過程當中也發現設備發熱很是嚴重,電池消耗速度快。因爲算法對硬件有依賴,設備發熱後可能致使其餘問題,所以與產品和開發溝通後,確認須要對App的耗電狀況進行測試和分析。
在進行測試前,咱們要與產品和開發充分溝通,明確電量測試的需求。並不是全部場景都須要進行電量測試,要對耗電量性能的瓶頸進行分析,肯定耗電量測試的需求之後再執行測試。
以我所在的洞見項目舉例來講,會有用戶登陸、下載、掃描和播放動畫過程。其中,用戶會在較長一段時間處於渲染模型和播放動畫階段,所以,這兩個階段的耗電量會對設備續航產生決定性的影響。所以,咱們決定首先對這兩個階段的耗電量進行測試。
一般來講,相機、GPU渲染、網絡通訊等會產生較高的耗電,須要對這些過程引發重視。也能夠經過一些軟件測試的方法肯定耗電量熱點之後再明確測試需求。
明確了測試需求之後,咱們須要設計合理的測試步驟,並準備相應的App包和資料。測試步驟的設計與正常的測試用例並無區別,還能夠設計一些對照實驗來輔助進行分析。
例如對於使用相機進行輸入的App,拍攝不一樣類型的場景,進行測試。對於網絡通訊比較頻繁的應用,在不一樣丟包和延遲的網絡環境下進行測試。還有一些特殊的條件,例如我所在的項目,因爲算法性能受到手機溫度的影響,還須要在不一樣的手機發熱狀況下進行測試。
執行測試用例時,按照用例設計完成準備工做後,點擊PC上電量數據採樣軟件的「開始記錄」按鈕,開始記錄數據。執行完測試步驟後點擊結束記錄,結束這次數據記錄。
一樣的,這個方法也是記錄的整機耗電量,所以須要關閉後臺應用,調整設置,使得結果更加接近單個應用的耗電狀況。
完成全部測試內容之後,執行MLT提供的數據處理腳本就會生成一個Excel文件,提供了每一個測試用例的統計數據(最大/最小/平均電流)和全部源數據。
對於每次測試記錄的原始數據,均可以經過腳本生成Excel報告,以下圖所示
其中左側4列分別爲:t(s)採樣時間點,i(mA)實時電流,Q(mAh)爲累積消耗電量,I_average(mA)爲當前平均電流。圖標爲以相對採樣時間點爲橫軸,i、Q、I_average分別爲縱軸生成的曲線圖。
經過設計的對照測試用例,分析耗電量數據是否符合預期,定位耗電性能熱點。
基於上述幾種方法,除了iOS自帶的電量記錄精度較低之外,其餘方法均可以獲取到精確的耗電量數值。那麼,怎麼來看這些數值,是否是能夠直接就由數值的大小來判斷App的性能呢?
對於大部分App來講,耗電量的絕對數值沒有特別重大的價值。其一,耗電量數據與硬件配置、機器工藝、系統版本等有着密切的關係,同一App在不一樣的機器上表現可能迥異。其二,開發對於App實現方式的耗電數值沒有直觀的預期,沒法經過絕對數值來評價App性能。所以經過對比數據來評估測試數據、挖掘優化點是更加可行的方法。
數據的對比包括App內部的對比和與競品的對比兩類,比較常見的是與競品進行對比。選擇與競品相似的場景,對比平均電流值,來分析App的耗電水平。對於一些前沿技術,沒有競品相似場景能夠對比的,能夠經過對技術複雜度的預估,和技術相似的產品進行對比。
另外一種對比方式是與自身的其餘測試用例結果進行對比。例如我所在的項目,經過對比首次執行測試用例持續60s時長,和執行完上述用例後,再次執行測試用例,持續60s時長的耗電量數據,發現第二種狀況的耗電量有必定程度的提高,進而分析出機身溫度對算法計算量的影響程度。
耗電量測試是移動App特有的專項測試,App的耗電狀況決定了手機的續航時間。QA能夠根據項目需求決定是否進行耗電量測試,與開發充分溝通後,設計合理的測試用例和對照組,並對數據進行分析後造成報告,反饋給開發進行優化。
更多網易技術、產品、運營經驗分享請點擊。
相關文章:
【推薦】 網易蜂巢(雲計算基礎服務)MongoDB服務重磅來襲
【推薦】 初步探索前端性能測試
【推薦】 如何玩轉基於風險的測試