騰訊TMQ iOS電量測試實踐

2021-08-09 20:55:13 字數 3863 閱讀 3873

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

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

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

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

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

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

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

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

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

最初我們用到的是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及以前的系統上,能獲取到更多更詳細的資訊,大部分是一些硬體的固定資訊,對我們測試沒有幫助。但也有一些其他有用的資訊,比如說當前的溫度,電流,都是很有用的資訊,如下圖:

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

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

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

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

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

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

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

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

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

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

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

tencent GT ios測試電量

temperature 電池溫度。currentcapacity 電池當前的剩餘容量。maxcapacity 電池最大容量。這個是顯示你的電池完全充電之後的容量,從此可以看出電池損耗。designcapacity 電池設計容量。這個是iphone電池出廠設計容量,也就是標準容量。battery ch...

《騰訊iOS測試實踐》一一1 4 測試分析

1.4.1 黑盒測試分析 黑盒測試是軟體測試的主要方法之一,也可以稱為功能測試 資料驅動測試或基於規格說明的測試。測試者無須了解程式的內部情況,無須掌握應用程式的 內部結構和程式語言的知識,只要知道程式的輸入 輸出和系統的功能即可。這是從使用者的角度針對軟體介面 功能及外部結構進行測試,而不考慮程式...

效能測試之電量測試

1.檢查電腦是否連線終端機器命令 adb devices結果如下圖 2.通過下面命令來開啟電池資料的獲取 通過下面命令來開啟電池資料的獲取 adb shell dumpsys batterystats enable full wake history 輸入結果如圖 3.重置電池資料 an highl...