APP性能测试之功耗测试
功耗,通俗的理解即電流通過導體使設備運行,導體本身的電阻將電能轉換為熱能的過程,因此,通常功耗測試也叫電量測試。
耗電量測試是指測試App在運行過程中消耗的能量。設備運行期間消耗能量公式:W = w * t = U * I * t
- w表示單位時間耗電量
- U為電池供電電壓
- I為電流值
- t為測試時間 通常來說U可以認為不變,對于平穩的測試過程,耗電量與測試時間成正比。
移動設備功耗
由于移動設備的電池容量限制,所以對于App的功耗也是需要考慮的一個方面。Android的很多特性都比較耗電(如屏幕、GPS、sensor傳感器、喚醒機制wakelock、CPU、連網等等),我們必須要慎重檢查APP的電量使用,以免導致用戶手機過度耗電發熱,帶來不良體驗。
主要的耗電場景有:
- screen:屏幕顯示畫面會耗電。
- cpu:復雜的運算邏輯、死循環等會直接導致CPU負載過高,會導致耗電;
- wakelock:喚醒鎖,只要有應用拿到wakelock這個鎖,系統就無法進入睡眠狀態。頻繁wakelock或者申請了wakelock沒有釋放,會導致耗電;
- wifiscan和wifilock:wifiscan和wifilock也會導致手機的wifi模塊處于激活狀態,頻繁的wifiscan或者wifilock不釋放,會導致耗電;
- sensor:傳感器打開后會導致系統持續監聽設備外圍環境的數據變化,使用后不及時關閉,會導致耗電;
- network:大量的數據傳輸,或者長時間的移動網絡數據傳輸會導致耗電;
- gps:gps也是一種傳感器,定位中完成后沒有及時關閉,會導致耗電。
Android功耗
目前很多定制Android 系統支持查看App耗電量查看,如下圖所示是魅族Flyme系統的應用電量消耗圖。
Android 電量測試
API
按照Android 系統規則,設備制造商必須在/frameworks/base/core/res/res/xml/power_profile.xml中提供組件的電源配置文件,該配置文件定義了每個耗電項的具體計算單位,內容樣例可以點擊查看 power_profile.xml
但是從Android 4.4開始系統電量權限做了嚴格的限制,隨著現在系統版本越來越高,使用API獲取電量不太現實。
硬件工具
基于基于硬件的測試方案,使用用電量表來測試手機耗電量。該方法優點是測試比較精準,同樣缺點也很明顯缺點:采購成本高,測試的是整個手機,不是被測APP,測試時要減少系統本身和其他app的干擾。得到數值無法直接參考,不知道合理還是偏高。不能給出進一步參考,比如具體哪個app方面消耗電量比較多。
batterystats
使用dumpsys batterystats 命令可用來生成關于設備電池使用情況的統計數據,這些數據按唯一用戶 ID (UID) 進行整理。統計信息包括以下內容:
- 電池相關事件的歷史記錄
- 設備的全局統計信息
- 每個UID 和系統組件的大致用電量
- 單個應用的每個數據包占用的移動網絡毫秒數
- 系統 UID匯總統計信息
- 應用 UID 匯總統計信息
bugreport
Android為了方便開發人員分析整個系統平臺和某個App在運行一段時間之內的所有信息,專門開發了bugreport工具。輸入命令adb bugreport [filepath]/即可執行信息采集,并生成zip或者txt文件格式的數據文件。
Battery Historian
Batterystats 是包含在 Android 框架中的一種工具,用于收集設備上的電池數據。您可以使用 adb 將收集的電池數據轉儲到PC,并創建一份可使用分析的報告。Battery Historian 會將報告從 Batterystats 轉換為可在瀏覽器中查看的 HTML報告。
注意:要使用 Batterystats 和 Battery Historian,您需要一臺搭載 Android 5.0 或更高版本且啟用了 USB 調試功能的移動設備。
電量數據收集
1、收集電池的歷史數據
adb shell dumpsys batterystats --enable full-wake-history2、重置電池數據
adb shell dumpsys batterystats --reset3、斷開設備與電腦的連接,以便只從設備的電池中消耗電流,然后執行指定的App進行相關操作。
4、使用命令adb bugreport導出電量信息結果,這里需要注意的是Android 7.0以上系統版本和Android 7.0以下命令不同。
Android 7.0以上系統版本:
adb bugreport C:\Users\Shuqing\Desktop\bugreport.zipAndroid 7.0以下系統版本
獲取bugreport信息(記錄了從開機之后詳細的dumpsys,dumpstate和logcat信息)
adb bugreport > [path]bugreport.txt??獲取dumpsys信息(獲取系統信息:比如內存CPU,accounts,activities,wifi等信息)
adb shell dumpsys batterystats > 存放的電腦地址/batterystats.txt或者獲取指定的應用程序的dumpsys信息:
adb shell dumpsys batterystats > 包名 > 存放的電腦地址/batterystats.txt電量數據解析
Battery Historian 一款由Google提供的Android系統電量分析工具,從手機中導出bugreport文件上傳至頁面,在網頁中生成詳細的圖表數據來展示手機上各模塊電量消耗過程,最后通過App數據的分析制定出相關的電量優化的方法。
1、使用Battery Historian需要在本地安裝,最簡單的方法使用docker安裝,然后執行如下命令。
docker run -d -p 9999:9999 bhaavan/battery-historian執行完成后使用瀏覽器打開鏈接:http://localhost(IP):9999 即可看到Battery Historian界面。
?http://點擊鏈接加入群聊【軟件測試交流群】:https://jq.qq.com/?_wv=1027&k=Ts5N8qumhttp://點擊鏈接加入群聊【軟件測試交流群】:https://jq.qq.com/?_wv=1027&k=Ts5N8qum?_wv=1027&k=Ts5N8qum
注意
上傳生成的報告文件然后點擊submit提交即可,如果上傳后沒有顯示submit按鈕,則需要科學上網。原因是因為web某些資源沒有加載出來,其中的一些資源需要訪問Google服務器,但是這些資源被墻了,無法訪問。只要解決了墻的問題,submit的問題也就迎刃而解了。
如果不想在本地搭建環境,那么可以訪問在線的解析平臺:https://bathist.ef.lc/ (網站可能打不開,原因你懂的)
查看整體電量數據
上傳數據解析之后如下圖所示,可以查看到詳細數據展示。
- 橫坐標是一個時間范圍。以重置為起點,獲取bugreport內容時刻為終點。坐標的間隔,會隨著時間的長度發生改變。
- 縱坐標是消耗電量的具體內屬性。
- 黑色曲線是測試過程中整體的電量信息。將Show bars的勾選去掉可以只展示該曲線。
重點參數說明:
- battery_level:剩余電量,可以看出電量的變化。
- plugged:充電狀態,這一欄顯示是否進行充電,以及充電的時間范圍。
- Longwakelock:該屬性記錄了長時間使設備保持喚醒的進程。
- screen:屏幕是否點亮。可以用于考慮睡眠狀態和點亮狀態下電量的使用信息。
- top app:該欄顯示當前時刻哪個app處于最上層,就是當前手機運行的app。用來判斷某個app對手機電量的影響。
- Coulomb charge電量消耗值,單位毫安時mAh。
- Temperature 電池溫度。
- discharge rate 放電率,是表示電池放電快慢的一種度量。
查看單個進程電量消耗數據
在App Selection中選擇指定的App進程,即可查看該進程的耗電數據。
iOS功耗測試
Energy Log
啟動Instruments,選擇你的設備和要檢測的app,打開Energy Log,如下圖所示:(充電然后進行電量測試不合理)
選擇設備和應用進行執行之后可以查看到電量消耗情況
iOS電量測試
1、打開設置-開發者-Logging
2、打開Energy,然后點擊開始錄制。
3、執行應用操作
4、完成后,返回“設置”>“開發者”>“Logging”,然后點擊“stop recording”。
5、連接設備,打開instrument,啟動Energy Log,從設備導入數據。
6、導入完成后即可查看數據信息。?
?http://點擊鏈接加入群聊【軟件測試交流群】:https://jq.qq.com/?_wv=1027&k=Ts5N8qum?_wv=1027&k=Ts5N8qum
總結
以上是生活随笔為你收集整理的APP性能测试之功耗测试的全部內容,希望文章能夠幫你解決所遇到的問題。