学习
实践
活动
工具
TVP
写文章
原创

iOS 电量测试实践

作者:张锦铭团队:腾讯移动品质中心TMQ

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=UIt=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出来的信息就两三条,很容易走进死胡同里,但也正因为这样,也没有在一条错的路上一直走,总算是有点收获,很是感慨。

搜索微信公众号:腾讯移动品质中心TMQ,获取更多测试干货!

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

登录 后参与评论
0 条评论

相关文章

  • iOS耗电量测试方法-Sysdiagnose

    如果有问题,可以进一步通过快捷入口打开Time Profile,Network Profile,Location Profile做进一步细致排查问题点。 这...

    用户5521279
  • 腾讯TMQ在线沙龙回顾|iOS电量测试

    iOS电量测试 活动时间:2017年11月15日 斗鱼直播 活动介绍 TMQ在线沙龙第三十三期分享 本次分享的主题是:iOS电量测试 共有69位测试小伙伴报名参...

    腾讯移动品质中心TMQ
  • IOS手机耗电量测试的一个文艺玩法

    在iOS通用设置中打开电池百分比数值显示,然后操作30分钟,60分钟,90分钟,看开始时和结束时电池百分比数值的差值。

    ITester软件测试小栈
  • 有赞iOS精准测试实践

    近几年有赞零售业务快速发展,为了满足日益增多的业务需求,2019年起零售客户端发版改成了每周一次,在质量保障方面,技术团队要面对更大的挑战。故此我们团队做了很多...

    有赞coder
  • APP专项测试之耗电量测试

    Hi,大家好。随着应用市场不断推陈出新,用户在使用APP时更加关注电量问题。如果自己的App不小心出现在耗电量排行榜Top10,用户卸载的概率就会很高,针对AP...

    ITester软件测试小栈
  • 【版本升级】PerfDog新增多维度测试报告对比功能、iOS电量测试功能升级

    伴随春日暖阳,疫情终将过去,PerfDog在新的一年为广大用户带来重磅更新:新增多维度测试报告对比功能,iOS电量测试功能全新升级。诚邀大家体验。 版本更新内容...

    腾讯Bugly
  • 【版本升级】PerfDog新增多维度测试报告对比功能、iOS电量测试功能升级

    伴随春日暖阳,疫情终将过去,PerfDog在新的一年为广大用户带来重磅更新:新增多维度测试报告对比功能,iOS电量测试功能全新升级。诚邀大家体验。 版本更新内容...

    WeTest质量开放平台团队
  • iOS 逻辑自动化测试实践

    在本文中,以iOS手机管家为例子,逻辑自动化测试的范围选定为 ObjectController 文件夹中的类,此文件夹中的类文件均为与 UI 无关的业务逻辑类。

    腾讯移动品质中心TMQ
  • GrowingIO 数据采集 iOS SDK 测试实践

    GrowingIO 是基于用户行为数据的增长平台,精准采集用户行为数据是公司业务的基石,只有及时、准确、可靠的采集到数据,才能支撑上层的数据分析,用户画像,运营...

    ios-lan
  • 腾讯TMQ在线沙龙回顾|电量测试

    电量测试 活动时间:2017年9月19日 斗鱼直播分享 活动介绍:TMQ在线沙龙第三十期分享 本次分享的主题是:电量测试 在线平均人气 70人! 想知道活动分享...

    腾讯移动品质中心TMQ
  • Ubuntu Windows8耗电量简单测试

    最近闲得无事,想起来装一把Ubuntu玩玩。反正对于SSD来说,重装无非是几分钟的事情。正好前段时间笔记本换了主板,于是连同Windows8一起重装了。期间还遇...

    reizhi
  • 鹅厂揭秘——高端大气的App电量测试

    如何评价我们开发出来的应用是耗电还是不耗电,如何测试?这就是我们今天讨论的主题——电量测试,一个在移动应用中新出现的测试类型。 作者简介 袁建发 腾讯智能平...

    腾讯Bugly
  • 腾讯 TMQ 团队10 年巨献: iOS 测试实践

    开始敲这篇“软”文,我觉得颈肩都好硬,转转头抖抖肩,许多事情如开闸水般涌入脑海,整个人顿时放松了下来。也烦请读者朋友耐心读下来,看一看这千千万万测试人的一些共鸣...

    腾讯移动品质中心TMQ
  • 手机发烫是为何:App 电量测试定位方法

    随着移动互联网的快速发展,手机的实用性、娱乐性越来越强。日常使用中发现,安装了应用后,即使不怎么使用,电量也会消耗很快。但如果恢复出场设置充满电后,手机可以待机...

    腾讯移动品质中心TMQ
  • 腾讯电量仪——智能硬件测试工具尝试之路

    随着移动互联网的快速发展,智能手机对电量的消耗也变得越来越大,续航短板一直是用户吐槽的焦点,不管是iOS还是android,每天为手机充电成为一个惯例,甚至一天...

    腾讯移动品质中心TMQ
  • 自研安卓App专项电量测试工具分享

    本文主要介绍自研的安卓专项电量测试工具,工具主要用来竞品及不同版本同一个app的电量对比,不是用来定位电量问题原因的工位,原理是通过adb 无线连接...

    厦门-安仔
  • iOS crash分析实践

    从堆栈可以看出是indexPath无效,通常是indexPath的section或者row超过了数据的大小;

    落影
  • iOS runtime(实践篇)

    大壮
  • 腾讯视频国际版(Android)电量测试方法研究与总结

    在2017年Google I/O大会上,Google发布了Google Play管理中心的新功能:Android vitals。当app在大量设备上运行时,An...

    腾讯移动品质中心TMQ

扫码关注腾讯云开发者

领取腾讯云代金券