1. 程式人生 > >APP電量測試這樣做。

APP電量測試這樣做。



iOS電量相關問題一直是測試人員頭疼的事情,電量測試怎麼開展、問題怎麼復現和跟進定位、使用者反饋電量相關的問題我們如果獲取更多的資訊等等,一直都沒有一個好的解決方案,以至於我們面對電量相關的問題時,總是束手無策。整個專案組經常收到這樣的一種反饋:你看,你們開發的APP,我還沒怎麼用呢,耗電量就排第一了。對於這樣的反饋,我們能做些什麼呢?之前我們是迷茫的,但經過一段時間的嘗試和努力之後,事情有了一些改觀。

一、電量測試之農業時代

在之前很長一段時間,我們都是用這種可憐的方式進行電量測試的:

1、選定測試場景以及時長;

2、給手機充放電,讓手機剩餘電量在我們預設的值,比如90%,每個場景測試開始時,保證手機都是這一電量;

3、手機系統設定,一般要關注螢幕亮度、藍芽、定位、通知訊息、音量、後臺應用等等,為保證簡單,通常是全部關閉或調到最小即可;

4、記錄開始時的剩餘電量,並執行測試,在測試結束後再記錄一次剩餘電量,兩個電量差,就為該場景在一定時長內的耗電量;剩餘電量嘛,直接讀手機上展示的值或是通過介面獲取(後面會介紹)均可以,幾乎沒有區別;

真是夠簡陋,但並非完全沒有用,明顯的電量消耗問題,還是可以發現,只要選得場景對了就可以。要是發現不了問題也不會一直用這個方法了不是。嘿嘿。

後面我們還將這種方案做了優化,流程不變,但是全自動化,人工只參與資料出來後的整理即可。具體的方法是,在手機和mac之前,加了一塊Arduino開發板,通過mac端的指令,可以智得控制開發板通電或是斷電,以達到手機充電或是放電的效果。

但不管怎麼全自動化都好,終歸還是最粗放的方式,沒有具體的資料,沒法幫助定位,如果還是個偶現的問題,那就更加束手無策,只能作罷。

二、電量測試之工業時代

慢慢得,我們開始去做一些新的嘗試,能不能獲取到更多更詳細的電量資料,是我們的主要目標。

我們想得也比較簡單,執著得認為,肯定是有一些我們沒有發現的介面,可以獲取到一些詳細的資料,要不然系統是怎麼計算每個APP的耗電量的呢?其實在某一段時間之內,確實如我們所想,但並非一直如此。

最初我們用到的是UIDevice類batteryLevel介面。這個介面只能獲取到剩餘電量百分比,目前世面上能見到的所有iOS系統版本都可用,如上文所提到的,他和系統介面上展示的值幾乎沒有區別,唯一不同的是,他是以mAh為單位計的,以這個值計算的剩餘電量百分比,就是系統上顯示的那個值。這樣看來,這個介面也沒有什麼多大的意義。還得繼續嘗試。

接著我們使用到的是IOKit中的IOPMPowerSource介面,私有介面,呼叫方式如下:

在iOS 10及以上的系統上,能獲取到的資訊如下:

看看關鍵資訊:

第三行CurrentCapacity是當前的剩餘電量;

第六行FullyCharged是否滿電量;

第八行IsCharging是否正在充電;

第九行MaxCapacity最大電池容量;

第十行Voltage當前電壓。

資訊是多了一些,有當前電壓值,有剩餘電量。這個有什麼用呢?我們先科普一點點小知識。

首先,某一裝置的電壓,基本是在一定範圍之內變動的,相對穩定的一個值。就像iPhone 6P的電壓,基本是在4V上下。當電池剩餘電量越少時,電壓值會變得越小,但波動不大。電壓過小時,可能會引起手機直接關機,這也是為什麼有時還有20%電量,但手機卻開不了機了。新的電池,電壓波動會小一些,越是老化,電壓波動可能越大。所以電壓這個值能用來判斷當前電池的健康度。

然後是剩餘電量2548,他的單位是mAh。手機電池常用類似1000mAh這樣的標識,這不是具體的電量,光看這個值,能解理到的含義是,以1000mA的電流來放電,能放1小時。或者說,以200mA的穩定電流放電,能放5小時。但明顯這樣意義並不大。因為我們還不知道電池在工作時,會以多少mA的電流工作,所以也就不知道能用多久,我們想知道的是,電池到底還有多少電,這個才是一個具體的值。上面提過,電壓是相對固定的,我們可以算出具體剩餘多少電,以1000mAh,粗略計電壓穩定為4V,根據公式計算得出W=U*I*t=4v*1000mAh=4000mWh。這個就是當前電池剩餘的電量。當計算剩餘電量的百分比的時候,用哪個值去算都一樣了。

以上是IOPMPowerSource介面在iOS10及以上系統上獲取的資訊。但事實上,在iOS 9及以前的系統上,能獲取到更多更詳細的資訊,大部分是一些硬體的固定資訊,對我們測試沒有幫助。但也有一些其他有用的資訊,比如說當前的溫度,電流,都是很有用的資訊,如下圖:

溫度能用來直接判斷當前的發熱情況,電流能直接判斷當前的電池發電功率,都可以有效判斷當前電池的使用狀態。

但是這個介面拿到的資料,仍然是不夠具體,全是整機的電池情況,沒有具體到某一個應用或是其他維度的電量統計。所以,還得繼續摸索。

這一次我們應用到的是BatteryUsageUI.bundle中PLBatteryUsageUIQuery,也是個私有介面。這裡賣個關子,實現就不帖了,有心的同學可以根據我的關鍵字找到具體的東西。這個介面就厲害了,具體得說,他能拿到每一個APP的CPU\GPU\顯示\網路\儲存等前後臺所有詳細資訊,一個巨大的表。

當我們探索到這一步時,激動不已,以為光明就在眼前了。可是事實卻是,這個介面早在iOS9的第一個版本,就完全被封了,只能在iOS 8上的機子上拿到資料。而且經過多次確認後,我們發現,這個資料是每個小時才會更新一次,並不是實時的。

但儘管如此,還是大大得增強了我們繼續探索的信心,我們第一次獲取到了每一個App的電量消耗情況,而且我們很確信,蘋果iOS的電量排行榜,就是根據這些資料計算出來的。因為,我們在這之前,已經發現在越獄環境下有個工具,叫DetailedBatteryUsage,這個外掛只做了一件事情,就是把系統設定裡,電池的顯示方式設定成了“2”,而預設的顯示方式是“0”。設定為“2”以後,就可以在電池設定裡看到很詳細的資訊,如下圖:



跟我們用介面拿到的資料是一致的,所以我們確認電量排行榜資料來至於這個介面,而且,系統一直在呼叫這個介面在統計電量相關的資訊,只是對使用者而言不可見,而且介面也不可見。在越獄環境下能拿到這些資料,對我們定位問題已經有很大的幫助了,但是一方面這些資料是系統顯示出來的,我們處理很不方便,效率也低,另一方面,這些資料只能在越獄的機器上拿到,而目前主流的系統都還是不能越獄的。我們不得不再進一步。

三、電量測試之大資料時代

經過長時間的探索,我們的目標越來越清晰,但是路卻越來越窄,因為能用的介面都被官方給遮蔽了,很長一段時間內,我們都沒有任何進展。直到無意中發現了官方的工具sysdiagnose。這是蘋果日誌系統的統稱,蘋果經常會詢問是否要官方幫忙診斷和定位問題時,上傳的就是sysdiagnose的各種日誌。

Sysdiagnose很龐大,每天上幾百M的日誌,記錄電池、第三方APP、各種系統功能和應用的所有執行情況。

Sysdiagnose怎麼使用呢?簡單得說,就是需要一個開發者賬號,然後到蘋果開發者網下載對應的證書。不需要越獄,沒有系統限制,這個特別關鍵。關於怎麼使用,有明確的說明:

當然每一類不同的日誌,都對應不同的證書,以上說明是針對電池電量的。

電量日誌是sysdiagnose系統中最龐大的一塊。電量日誌每天有幾十到一百M,他是一個龐大的資料庫,裡面有267張表,記錄了電池電量的各維度資訊。看來要弄懂電量的資料來源,必須要弄明白這些表之前的聯絡以及各自的意思。

經過幾周的折騰,我們弄明白了幾個關鍵的頂部的表格,下面列出來分享給大家:

通過這些表格資料,我們能明白,系統記錄了哪一些資料,他們之前的關係,哪些是對我們有用的。資料非常全面,我只能說蘋果威武。

有了這樣全面的官方資料,我們的測試怎麼做呢?

1、首先,上線前的電量測試,只要裝上對應的證書,便可開始執行測試,只要記下哪個時間段對應的是哪個場景,然後測試完後,取下系統的資料庫,便可以對當次的電量做較全面的評價,例如,某個APP在某場景下,20分鐘執行時間,顯示耗電100mWh,CPU耗電20mWh,執行溫度是32度,平均電流是110mA,是不是很酷?這樣的資料,一旦異常,對於問題的定位幫助也比較大,點個贊。

2、使用者反饋的問題,不再沒有頭緒,只需要裝證書傳送給他,讓他裝上,半小時後便可以獲取到最近幾天的所有電量資訊,用於跟進和定位問題。酷不酷?想不想學?

不僅如此,這些關鍵資料,還讓我們弄清了兩個關鍵問題,一個是剩餘電量是怎麼計算的,另一個是電量排行榜是怎麼計算的,我一一列舉。

四、剩餘電量是怎麼計算的

iOS系統每20秒會讀取一次系統電量相關資料記錄入整機電量資料庫,主要內容有當前電流,電壓,剩餘電量,最大電量,溫度,是否在充電,充放電次數。

1、電流以mA計,直接通過硬體測得,是計算其他資料的基礎,iPhone工作時,電流一般在1mA到700mA之間。超過500mA電池很容易發熱。

2、電壓以mV計,通過硬體測得,是計算其他資料的基礎,iPhone工作時,電壓幾乎一直恆定在4V左右。測試過程中出現過的最高電壓是4.3V。

3、剩餘電量是以mAh計,他和最大電量是相對值,我們看到的電量百分比是這兩個值的比值。電量最大值是一個理論值,1000mAh的意義是,以1000mA的恆定電流放電時,能放1小時。他最大值並不固定,他會隨著電壓而發生一些波動。

4、溫度也通過硬體介面獲得,可以作為一個參考值,測試過程中出現的最高溫度是37度,能明顯感覺到發熱了。

5、是否在充電,如果是在充電過程中,使用的任何應用,具體電量都不作統計,不入資料庫,而只統計整機的電量。

6、充放電次數,以充放一次最大電池容量記為一次,充放電次數可以作為電池老化程度的一個根據。

下面再來說說到底是怎麼計算的。

假如充滿電是1000mAh,系統會每20秒讀一次電流值,以及判斷是在充電還是放電,記算這段時間的功耗,逐步累加。如半小時後還有800mAh,剩餘電量就是80%。

五、電量排行榜是怎麼計算出來的

1、首先要說明的是,電量排行榜顯示的不是實時的資料,他有1小時內的延遲。同時他與系統顯示的剩餘電量百分比也不是同一套計算體系。

2、iPhone用來記錄電量相關資料的資料庫極為龐大,有在概265張表,每天超10M的資料。

3、每一個安裝到iPhone的應用,在系統級都會有一個ID標註,稱作結點ID。

4、系統電量的消耗分為主要以下大類,每一種都作為電量消耗的根結點。isp\apsocbase \display\wifi data\GPU venc\venc\CPU\restofsoc\GPS\DRAM。

5、系統中每個應用都有幾種狀態,分別是不執行、前臺活躍、前臺不活躍(一般應用間切換時出現)、後臺、暫停(在後臺但沒有執行,程式還在記憶體中)。

6、系統每小時記錄了每一個根結點被哪些應用佔用,應用的狀態是怎麼樣的,每應用消耗了多少能量,總共消耗了多少,比如某一小時內,某個APPCPU\GPU\GPS\DRAM\顯示各耗電20mAh,共100mAh,這小時內所有APP耗電200mAh,那麼該APP耗電佔比50%。

六、總結

總結一下,電量測試從農業時代,到工業時代,再進大資料時代,是量變到質量的過程。我們做了長時間的探索,最終還是站在巨人的肩膀上,實現了最初預想的目標,走了很多彎路,由於研究的人很少,經常一些關鍵詞,google出來的資訊就兩三條,很容易走進死衚衕裡,但也正因為這樣,也沒有在一條錯的路上一直走,總算是有點收穫,很是感慨。

相關推薦

APP電量測試這樣

 iOS電量相關問題一直是測試人員頭疼的事情,電量測試怎麼開展、問題怎麼復現和跟進定位、使用者反饋電量相關的問題我們如果獲取更多的資訊等等,一直都沒有一個好的解決方案,以至於我們面對電量相關的問題時,總是束手無策。整個專案組經常收到這樣的一種反饋:你看,你們開發的APP

遊戲音效想要有出色的表現,可以這樣

在遊戲中,既有讓遊戲不再單調的的背景音樂,又有烘托氣氛的音效,背景音樂≠音效,那麼怎麼樣才能讓遊戲音效在遊戲中有出色的表現呢?今天跟著遊戲音效小編一起來看看。       想要讓遊戲音效在遊戲中有出眾的表現,那麼就一定要關注遊戲中所會遇到的一系列問題,例

鵝廠揭祕——高階大氣的App電量測試

移動裝置從之前的諾基亞、摩托羅拉等功能機到現在android、iOS等智慧機,手機已經越來越普及,功能越來越豐富,但電池技術基本上卻停滯不前,逐漸顯現出功能機時代沒有出現的續航短板,續航待機時間短一直是使用者吐槽的焦點,而許多廠商也坦承電池成了制約手機發展的最大障礙之一。手機的其他模組越來越小,而

IOS的app電量測試

需要工具Sysdiagnose,只需要安裝一個證書即可。如下:下載、安裝、使用:把證書傳送到需要測試電量的手機上,安裝證書安裝完成後同時按住+ -音量鍵後按一下電源鍵,手機震動一下說明啟動成功.可以對A

IOS app電量測試方法調研

方法一——硬體檢測通過硬體 PowerMonitor 可以精準地獲得應用的電量消耗。步驟如下:拆開iOS裝置的外殼,找到電池後面的電源針腳。連線電源監控器的裝置針腳執行應用測量電量消耗下圖展示了與iPhone的電池針腳連線的電源監控器工具。enter image descri

4Requestdata我們使用花括號({)創建一個新的字典我們可以像這樣一個空字典:

student res pin font std mar con 括號 ont p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 { marg

app如何更換使用者頭像資訊呢 不妨這樣

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

利用神州靈雲apptrace抓取到的APP資料反向給Jmeter介面測試

前提:準備一款手機APP,嵌入神州靈雲公司sdk,使其操作產生的資料傳送到神州靈雲apptrace平臺上;本文就以開源的月光茶人APP(ios)程式為例,講述如何用sdk採集到資料提供給jmeter做介面或壓力測試; 1,首先操作手機月光茶人app執行一個完整

這樣介面測試,老闆肯定找你談話

這幾天小編一直看到有人在後臺給小編回覆:介面測試,那麼如何做好介面測試呢?我們今天來講解一下,希望對大家有所幫助,還有今天每日一道面試題開始做了,希望大家多多留言多多答覆,一起共同進步,來看看今天的文章吧 本文主要分為兩個部分: 第一部分:主要從問題出發,引入介面測試的相關內容並與前端測試進行簡單對比

利用神州靈雲AppTrace抓取到的APP資料反向給Jmeter介面測試(二)

用jmeter模擬登入月光茶人APP選購支付流程(或者大量併發,實現壓測效果) 現實中APP對登入都有限制,同一賬號只能同時登入一次,且手裡沒有多餘的賬號如何進行併發測試呢,這個時候只需單獨對登入http請求進行控制即可;其他請求操作可以放在一塊進行併發測試;

APP測試內容 -- 手機電量測試

nose 內容 打開 執行時間 idata 降溫 五步 itunes 行操作 一、ios電量測試  需要工具Sysdiagnose,只需要安裝一個證書即可。如下: 下載、安裝、使用:   證書下載:https://developer.apple.com/bug-rep

VS2015 報“包含在 Image 和 Image 項組中專案項不允許這樣,它只能屬於一個項組”解決方法

    今天在開啟同事移交的VS2015專案時報錯:包含在 Image 和 Image 項組中。專案項不允許這樣做,它只能屬於一個項組。     百度了一下沒有找到解決方法。 也許是錯誤太低階,大神們都不願意記錄了。     解決方案:     1、根據VS的錯誤提示,找到

測試人員是否需要從需求階段就介入?如果需要,這樣的優點是什麼?

目前來看,測試從需求階段介入,已經是一個不爭的事實 優點從兩方面來說: 1.測試本身,測試人員更早的熟悉整個專案的迭代計劃,熟悉每個迭代的具體需求    這樣測試能夠更好的去安排測試計劃,提前設計測試場景,準備測試環境和資料    從而使整個專案測試工作有條不紊

日程管理APP測試計劃和測試矩陣

集成 說明 計劃 idt 無線 roi ble -c nbsp 測試計劃:(完成整個APP時間:2周) 編號 測試時間 測試內容 1 第2天 在需求設計階段,檢查產品說明文檔及設計文檔 2 第3~9天 在編碼階段,編寫測試用例 3 第10~11天 集成測試

App功能測試的7大註意點

成功 免登陸 text 其他 後臺管理 自動 升級 推送 打擾 1.運行 1)App安裝完成後的試運行,可正常打開軟件。 2)App打開測試,是否有加載狀態進度提示。  3)App頁面間的切換是否流暢,邏輯是否正確。  4)註冊  同表單編輯頁面  用戶名密碼長度  註冊後

python專項測試——Android App自動化測試框架

selenium sdk str ase val 測試環境 self ron app自動化 1 為什麽需要框架? 代碼混亂,難閱讀; 重復編碼,效率低;需求變化,難維護; 一 自動化實例 1 準備測試的app;準備測試環境;實現腳本; 2 測試app:只有登錄功能

項目文檔管理工作還可以這樣

項目文檔管理工作 每一個人做項目管理都有自己的方式和套路。項目管理很多管理工作都依靠文檔來記錄和梳理。為了讓過程文檔能夠用到上,而不是只是為了有管理文檔而做文檔,選擇合適文檔管理流程,很必要。還有就是一些工作能夠簡化,能夠優化,請盡早去落實,這樣也能夠讓過程文檔管理工作更容易落實。 沒有什麽項

涉嫌壟斷的App Store,到底了什麽讓開發者暴怒

app store什麽行業最賺錢?不是你想象中的餐飲、互聯網、鉆石,而是壟!斷!行!業!不管是壟斷什麽,只要一家獨大,就能任意制定價格和遊戲規則,將利益最大化。還有掌控整個鏈條上參與者的“生殺大權”,不亦快哉!但一旦玩過火,也會激起激烈的反抗。而近日,蘋果App Store就成為了眾矢之的。限於蘋果App S

移動app自動化測試

click 企業開發 手機 技術分享 對比 second ios測試 web drive 原文出處https://www.toutiao.com/i6473606106970063374/ 原文作者是今日頭條的:一個字頭的誕生 在此感謝原文作者的無私分享! 移動App自

app 安全測試概覽

操作 裏的 provide 代碼 時間 軟鍵盤 數據加密 系統 所有 目錄 一、安裝包測試 1.1、關於反編譯 1.2、關於簽名 1.3、完整性校驗 1.4、權限設置檢查 二、敏感信息測試 三、軟鍵盤劫持 四、賬戶安全 五、數據通信安全 六、組件安全測試 七、服務端接口