這篇文章主要介紹一下不同平台下APP的耗電量測試。借鑒於: http://www.51testing.com/html/28/n-4456728.html / https://www.jianshu.com/p/d68ae67c9227
相對於PC來說,移動設備的電池電量是非常有限的,保持持久的續航能力尤為重要。另外,Android的很多特性都比較耗電(如屏幕、GPS、sensor傳感器、喚醒機制、CPU、連網等的使用),我們必須要慎重檢查APP的電量使用,以免導致用戶手機耗電發熱,帶來不良體驗。
主要的耗電場景有:
cpu:復雜的運算邏輯、死循環等會直接導致CPU負載過高,會導致耗電;
wakelock:只要有應用拿到wakelock這個鎖,系統就無法進入睡眠狀態。頻繁wakelock或者申請了wakelock沒有釋放,會導致耗電;
wifiscan和wifilock:wifiscan和wifilock也會導致手機的wifi模塊處於激活狀態,頻繁的wifiscan或者wifilock不釋放,會導致耗電;
sensor:傳感器打開后會導致系統持續監聽設備外圍環境的數據變化,使用后不及時關閉,會導致耗電;
network:大量的數據傳輸,或者長時間的移動網絡數據傳輸導致radio長期處於活躍狀態,會導致耗電;
gps:gps也是一種傳感器,定位中沒有及時關閉,會導致耗電;
業務層面,用戶最核心基礎的模塊:
新增的基礎邏輯,倘若入口明顯,潛在較大訪問,必須保證性能;
活動需要,因為活動上新的邏輯,存在較大的用戶訪問,需盡力提升用戶體驗;
反饋體驗不好的模塊;
測試環境
1、恢復出廠設置,排除其他APP對耗電的影響,減少干擾因素;
2、測試過程中,不出現充電情況;
1. iOS下APP的耗電量測試
1.1系統接口
iOS 10系統內置的Setting里可以查看各個APP的電池消耗,系統接口能獲取到整體的電池利用率,以及充電狀態。
該方案不能檢測固定某一時間段內的電池精准消耗。
1.2、硬件檢測
通過硬件PowerMonitor可以精准地獲得應用的電量消耗。
步驟如下:
a. 拆開iOS設備的外殼,找到電池后面的電源針腳
b. 連接電源監控器的設備針腳
c. 運行應用
d. 測量電量消耗
該方案成本太高並不適合我們的測試工作。
1.3、軟件工具檢測
由於iOS系統的封閉性,獲取功耗數據只能通過Xcode自帶的Instruments工具實現,步驟如下:
1. 斷開iOS設備與Mac的連接(充電時測試功耗會導致數值不准確)
2. iOS設置選項->開發者選項->Logging->Start Recording
3. 進入需要測試電量的場景操作
4. 操作完成后進入開發者選項點擊Stop Recording
5. 將iOS設備和Mac連接
6. 打開Instruments,選擇Energy Log
7. 選擇File->Import Logged Data from Device
8. 保存的數據以時間軸輸出到Instrument面板
該方案作為性能測試的補充方案具有較高的權威性,但輸出的數據不直觀,用於功耗測試的效果並不理想。
1.4、使用Battery Life進行功耗測試
該APP無需額外費用,輸出結果直觀(可得到毫安數及百分比)准確,可以嘗試使用。
2. Android下APP的耗電量測試
2.1 普通安卓機

測試環境
1、恢復出廠設置,排除其他APP對耗電的影響,減少干擾因素;
2、測試過程中,不出現充電情況;
3、Android 5.0 以上的設備;
4、通過wifi連接電腦和手機;
測試步驟
1、首先,電腦用數據線連接手機設備,開啟設備的開發者模式后,使用adb devices命令,能夠看到設備在線
2、然后,默認情況下,android系統不會
記錄特定應用的wakelock變化,為了依照時間順序,展示各個 wakelock的詳細信息,需要先執行命令:
adb shell dumpsys batterystats --enable full-wake-history |
3、接着需要重置batterystats數據:
adb shell dumpsys batterystats --reset |
4、接下來可以拔掉數據線,在手機上對被測試app執行相應的用例進入測試場景
5、操作完成后,電腦再次連接設備,執行命令:
adb shell dumpsys batterystats > xxx.txt
# 因為bugreport時間比較長,我們放到后面執行來減少與前面dumpsys的數據的偏差
Android 7.0及以上:
adb bugreport bugreport.zip
Android 6.0及以下:
adb bugreport > bugreport.txt
|
6、打開Battery Historian平台將bugreport.txt導入, 並點擊submit進行分析
Case1:應用后台靜默,wakelock長時間未釋放
如上圖,在一次版本的耗電量測試中發現耗電量顯著增加,通過進一步定位發現是應用中引入的某個SDK為了在后台維持心跳使用了wakelock,而在用戶將應用切入后台后一直持有沒有釋放,隨后經過跟對應的開發同學溝通進行了優化更改了實現方式去掉了wakelock,耗電量恢復正常。
Case2:應用后台靜默,各種sensor持續工作
在做另外一個版本的專項測試中發現耗電量數據異常,如下圖,通過測試結果分析發現是應用在后台駐留了51分鍾,各種傳感器也同樣工作了51分鍾導致耗電量顯著增加,后經過排查確定是引入的推送SDK導致的,經過修改調用方式解決。
Case3:應用前台靜默,各種sensor持續工作
通過前台靜默(無任何操作)15分鍾,發現耗電量比上個版本高了一倍,如下圖: 應用前台靜默期間加速度、重力、陀螺儀這三個傳感器一直被使用。
跟開發溝通后確定是由於另外一個部門提供的SDK導致的,該SDK采集傳感器數據的策略有問題導致會在應用啟動后一直采集造成耗電,解決方案是按照時間窗口來采集數據, 比如每次打開APP采集5分鍾傳感器數據, 然后關閉傳感器數據采集。
通過標准
最佳實踐
2.2 谷歌手機
PowerTutor是一款適用於Google手機的應用程序,可顯示主要系統組件(如CPU,網絡接口,顯示器和GPS接收器以及不同應用程序)所消耗的功率。該應用程序允許軟件開發人員了解設計變更對電源效率的影響。應用程序用戶還可以使用它來確定其操作如何影響電池壽命。PowerTutor使用在仔細控制設備電源管理狀態期間通過直接測量構建的功耗模型。該模型通常在實際值的5%內提供功耗估計。提供了用於功耗歷史的可配置顯示器。它還為用戶提供包含詳細結果的基於文本文件的輸出。您可以使用PowerTutor監控任何應用程序的功耗。
PowerTutor的功率模型建立在HTC G1,HTC G2和Nexus之上。它將在其他版本的GPhone上運行,但是當與上述手機型號以外的手機一起使用時,功耗估算將會非常粗略。我們計划在未來為其他手機提供功率模型。
PowerTutor下載地址: http://ziyang.eecs.umich.edu/projects/powertutor/
