鵝廠揭祕——高階大氣的App電量測試
移動裝置從之前的諾基亞、摩托羅拉等功能機到現在android、iOS等智慧機,手機已經越來越普及,功能越來越豐富,但電池技術基本上卻停滯不前,逐漸顯現出功能機時代沒有出現的續航短板,續航待機時間短一直是使用者吐槽的焦點,而許多廠商也坦承電池成了制約手機發展的最大障礙之一。手機的其他模組越來越小,而電池的體積越來越大,已經成為了一個不爭的事實。早前的功能機電池容量基本都小於1000mAh,而現在手機電池容量3000mAh已經是標配了,但反而待機時間都不及之前功能機的三分之一。
為了提高電池的續航能力,那麼需要硬體廠商降低元器件的單位功耗以及軟體系統開發商提高對硬體使用的效率。那麼對於APP開發者來說,是不是就不用關心電量消耗了呢?顯然不是,例如在anrdoid系統中,不恰當的使用wakelock鎖、GPS定位等功能也將產生大量的電量消耗,那麼如何評價我們開發出來的應用是耗電還是不耗電,如何測試?這就是我們今天討論的主題——電量測試,一個在移動應用中新出現的測試型別。
1什麼是電量測試
所謂的電量測試,就是測試移動裝置電量消耗快慢的一種測試方法。一般是用平均電流(電池生產廠家一般都採用mAh來標記電池容量大小,平均電流越小,說明裝置使用時間就越長)來衡量電量消耗速度。但平均電流多大才能說明不耗電?事實上業界並沒有統一的標準,目前我們(騰訊智慧平臺測試團隊,下同)通用的做法就是通過場景來定義一個平均電流經驗值,例如無網路待機下平均電流要小於10mA。下表給出一個常見場景下參考的平均電流值:
從上表可以得知(因iOS可測性不高,上面資料都是在android平臺下測試的資料,下同),待機下平均電流和非待機平均電流差別是非常大的,最少一個數量級。所以在我們實際應用開發過程中由於API的錯誤使用導致CPU一直工作無法休眠,將消耗大量的電量,電量測試的目的就是要測試出這種可能出現的場景,解決因錯誤使用API、網路操作處理不合理或者程式碼編寫不規範等導致異常耗電的情況。
2電量測試的方法
上面瞭解電量測試的一些基本知識概念後,可能有同學要問,怎麼測試電量呢?目前有2種方法可以測試電量,硬體測試法和軟體測試法。硬體測試法就是利用硬體裝置測試被測裝置(例如可拆卸電池的android手機)的電流,統計一段時間內的平均電流值。硬體測試儀器包括穩壓電源,可以實時讀取電流的電流儀器以及個人PC電腦(也有穩壓電源和電流儀器為一體的電流儀裝置,這種裝置較貴),如下圖所示:
目前我們採取的電流儀為自己製作的儀器“電量寶”(考慮成本低的因素,且實時處理資料可控),邏輯電路接線圖如下所示:
“電量寶”主要功能實現被測物件電流實時讀取,並輸出實時曲線圖,記錄原始電流和電壓資料。如下實物圖所示(實物圖比較醜陋,晶片、電池處理等比較原始,但比較實用,各位看官不要嘲笑哈,我們不是富二代):
實物圖說明:
1)電源:電源是通過原始的電池作為電源供電,也可以選擇穩壓電源(原始電池省錢,更接近使用者場景,缺陷是不穩定,沒有穩壓電源穩定);
2)電量寶晶片:USB線5V電壓作為晶片工作的電壓,同時通過串列埠通訊來讀取資料;
3)被測物件手機:手機需要取下電池,通過導線正負極和“電量寶”相連。
各個硬體模組功能瞭解清楚後,在硬體測試過程中還有一些事項需要特別注意,第一個就是電壓的問題,如果使用電池供電,儘量保證電池滿電下開始測試(因有外部接線干擾,會分壓,導致手機實際電壓不足);如果使用穩壓電源,因不同手機對電壓敏感程度不同,所以會導致手機開機需要的電壓不同(,可以根據實際調整,一般在4.0V~4.5V左右,電壓值選擇不正確,會導致手機無法開機或者開機後不穩定,迴圈重啟等問題,嚴重情況會損壞手機),第二個就是連線的導線問題,純銅導線和劣質的非純銅導線或者鋁導線,電阻有明顯差異(電流波動較大),這樣會對被測手機有較大影響,因手機對電流是非常敏感的,電流忽大忽小將導致手機不穩定,非常影響測試效率,第三個就是接線正負極的問題,手機端正負極和電源端正負極一定要對應上,接反有可能損壞手機。手機端正負極觸片較小,需要購買特殊夾子才能使用,圖下圖所示:
準備工作搞定了之後,就可以通過串列埠實時讀取電流資料了,記錄原始資料,就可以計算平均電流值了。如下圖就是實時採集手機(GT-I9500)開機過程中實時電流曲線圖,平均電流值為480mA:
另外一種方法就是軟體測試法,例如android4.1以上版本系統設定中提供了電量消耗的統計(也有第三方的統計軟體例如電池醫生等類似應用),模擬計算應用APP的耗電,這種方法一般用來分析APP耗電,不作為平均電流值的基準值,可以具體到APP程序級別,能分別統計到APP的CPU使用時間、wakelock鎖時間、網路傳輸的資料、GPS時間等(其中部分選項需要擴充套件android原始碼settings App才能獲取到,預設情況下部分資訊無法獲取)。下圖為我們自己編譯android原始碼實現的電量統計APP耗電的資訊:
也可以通過android系統本身自帶的adb除錯命令來獲取電量資訊,命令如下:
adb shell dumpsys batterystats/batteryinfo
android4.4及以上為電池統計服務為batterystats,4.4以下為batteryinfo。命令獲取的結果分2部分,一部分是系統整體耗電資訊,如下圖所示:
另外一部分是各個程序的耗電資訊,如下圖所示:
根據上面介紹後,再進行電量測試就容易得多了。首先明確被測場景,然後使用硬體儀器測試被測硬體(例如手機)的平均電流,統計資料並分析該場景下是否耗電,然後使用軟體工具統計詳細資訊,例如CPU使用情況、WIFI/蜂窩網路傳輸資料、GPS、藍芽使用情況等,判斷可能耗電的地方,優化,再測試,再分析,直到被測物件平均電流低於預期值。那麼本篇文章大致內容介紹完畢,下一篇文章將詳細介紹電量測試的硬體和軟體測試的細節、實戰講解等內容,敬請期待。
---------------------