前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS耗电量测试方法-Sysdiagnose

iOS耗电量测试方法-Sysdiagnose

作者头像
用户5521279
发布2021-04-14 10:25:39
5.6K0
发布2021-04-14 10:25:39
举报
文章被收录于专栏:搜狗测试

随着iOS系统的更新,APP耗电排行榜的推出,用户开始更加关注电量问题。如果自己的App不小心出现在电量排行榜Top10里,用户卸载的概率就会很高,这也使得我们必须认真对待电量问题。最近小编在项目的性能测试中,对SDK的耗电量进行了测试,期间学习并实践了iOS耗电量测试的方法sysdiagnose,针对iOS的APP和SDK耗电量测试都适用,在此与大家分享。

常用电量测试方法

在sysdiagnose之前,关于电量的测试方法常用的有几种,大多定性但不定量,在此先简单介绍一下常用的方法: 方法1:简单粗暴的耗电量测试方案 1)选定测试场景及时长; 2)给手机充电,放电,让手机电量达到预设值,每个场景开始前,保持电量都是这一电量,并且手机是室温; 3)手机系统设置,一般关注蓝牙,定位,通知消息,音量,后台应用等等,都设置为预定的状态; 4)记录这个时候的剩余电量,开始执行测试,测试完毕后再记录一次剩余电量,电量差就是这个场景在这个时长内的耗电量。 这样的测试方法,明显的耗电问题可以发现,比如一次测试一下子掉电10%这种,但是一些不太明显的问题用这个方法却是发现不了的。而且这种测试方法没有具体的数据,实用性不强。 方法2:Energy Impact 开发过程中,运行调试模式就可以在Xcode里直接查看Energy Impact。电量仪表盘上有3个区域,如果经常跑到红色区域那你就该检讨下自己代码了。下面的柱状图会告诉你耗电的组成部分:CPU,Network,Location,GPU。其中Overhead表示不是由你的App引起的耗电。

如果有问题,可以进一步通过快捷入口打开Time Profile,Network Profile,Location Profile做进一步细致排查问题点。 这个很简单,缺点就是必须连上真机,只适合开发人员;而且对于耗电只能给出定性,没有定量的显示。 方法3:api接口调用的方式 1)最初使用的是UIDevice类batteryLevel接口。这个接口只能获取到剩余电量百分比,它和系统界面上展示的值几乎没有区别,唯一不同的是,它是以mAh为单位计的,以这个值计算的剩余电量百分比,就是系统上显示的那个值。这样看来,这个接口也没有什么多大的意义。还得继续尝试。 2)接着我们使用到的是IOKit中的IOPMPowerSource接口,私有接口,调用方式如下:

在iOS 10及以上的系统上,能获取到的信息如下:

关键信息: CurrentCapacity是当前的剩余电量; FullyCharged是否满电量; IsCharging是否正在充电; MaxCapacity最大电池容量; Voltage当前电压。 先科普一点电量信息的小知识: 首先,某一设备的电压,基本是在一定范围之内变动的,相对稳定的一个值。就像iPhone6P的电压,基本是在4V上下。当电池剩余电量越少时,电压值会变得越小,但波动不大。电压过小时,可能会引起手机直接关机,这也是为什么有时还有20%电量,但手机却开不了机了。新的电池,电压波动会小一些,越是老化,电压波动可能越大。所以电压这个值能用来判断当前电池的健康度。 然后是剩余电量CurrentCapacity=2548,单位是mAh。手机电池常用类似1000mAh这样的标识,也就是以1000mA的电流来放电,能放1小时。或者说,以200mA的稳定电流放电,能放5小时。但明显这样意义并不大。因为我们还不知道电池在工作时,会以多少mA的电流工作,所以也就不知道能用多久,我们想知道的是,电池到底还有多少电,这个才是一个具体的值。上面提过,电压是相对固定的,我们可以算出具体剩余多少电,以1000mAh,粗略计电压稳定为4V,根据公式计算得出W=U*I*t=4v*1000mAh=4000mWh。这个就是当前电池剩余的电量。当计算剩余电量的百分比的时候,用哪个值去算都一样了。 以上是IOPMPowerSource接口在iOS10及以上系统上获取的信息。但事实上,在iOS 9及以前的系统上,能获取到更多更详细的信息,大部分是一些硬件的固定信息,对我们测试没有帮助。但也有一些其他有用的信息,比如说当前的温度,电流,都是很有用的信息。这个接口拿到的数据,仍然是不够具体,全是整机的电池情况,没有具体到某一个应用或是其他维度的电量统计。所以,还得继续摸索。 3)这次应用到的是BatteryUsageUI.bundle中PLBatteryUsageUIQuery,也是个私有接口。它能拿到每一个APP的CPU\GPU\显示\网络\存储等前后台所有详细信息,一个巨大的表。

可是这个接口早在iOS9的第一个版本,就完全被封了,只能在iOS 8上的机子上拿到数据。而且这个数据是每个小时才会更新一次,并不是实时的。 经过之前的同学研究确认,电量排行榜数据来自于这个接口,而且系统一直在调用这个接口在统计电量相关的信息,只是对用户而言不可见,而且接口也不可见,只能在越狱环境下才能拿到这些数据。

Sysdiagnose耗电量测试方法

除了以上介绍的常用耗电量测试方法,在之前研究探索的基础上,有同学发现了更好的方法Sysdiagnose。 Sysdiagnose是苹果的日志系统,苹果经常会询问是否要官方帮忙诊断和定位各种问题,使用的就是Sysdiagnose的日志。Sysdiagnose很庞大,记录电池、第三方APP、各种系统功能和应用的所有运行情况。通过Sysdiagnose我们可以获取电量消耗,电压,电流,温度,甚至系统的 CPU、GPU 等等耗电都有详细的数据。而且不单单是自己的 App,手机内安装的其它的 APP 同样可以获取到数据,这样大大方便了我们做出详细的对比测试数据。由于这些都是苹果系统的数据,可靠性还是比较有保障的。 下面具体介绍如何使用Sysdiagnose进行耗电测试。 苹果开发者网站上有具体的使用方法:

具体介绍一下: 1)Sysdiagnose需要一个开发者账号,在苹果开发者官网Profiles and Logs下载证书BatteryLife.mobileconfig。

2)将证书发送到手机(如airdrop方式),在手机上安装该证书,安装之后,手机不需要越狱也可以获得数据。

3)手机端执行测试 测试前,手机端先充电到80%以上,充电完毕后拔出充电线,不做任何操作静置10min后开始执行场景; 测试时需将屏幕亮度最低、蓝牙关闭、推送消息关闭、定位开启(在系统设置-隐私里开启)、音量最低、个人热点关闭、后台进程全关闭; 进入APP,根据测试用例设计的测试场景进行测试; PS: 1. 电量测试如果是对比测试,两个版本的初始电量尽量保持一致; 2. 每个场景开始执行和结束时,记录开始和结束的时间,每个场景之间间隔1min(目前是一个场景操作10min); 3. 测试时不能中途充电; 4)同步数据,并导出电量数据文件 上一步操作完所有场景,测试完成后,手机静置约半小时(因为数据库写入会有延迟),然后手机连接电脑,同步数据;

同步完成后,导出需要的电量日志 导入日志地址方法如下: Mac:/Library/Logs/CrashReporter/MobileDevice/[Your_Device_Name]/ (打开Finder,按 CMD+SHIFT+G,并输入~/Library/Logs/CrashReporter/MobileDevice/) Win:C:\Users[Your_User_Name]\AppData\Roaming\Apple Computer\Logs\CrashReporter\MobileDevice\[Your_Device_Name]\

在指定路径的文件夹内找到对应耗电量数据,耗电量数据一般是以powerlog开头,.PLSQL或着.PLSQL.gz结束,如下图所示:

使用DB Browser for SQLite可以查看数据,打开powerlog数据库,切换到“浏览数据”tab,可以看到这个数据库中有许多表,如下所示:

这些表中,和电量相关的几个重要的表的名字和作用如下:

其中最重要的表是PLBatteryAgent_EventBackward_Battery整机电量信息,每20s采集一次,在关闭其他app的情况下,可以近似的认为是所测app的耗电,表内容如下:

PLBatteryAgent_EventBackward_Battery 表中每一行最前面都有个 timestamp,这是用来记录每行电池状况记录的时间点(为 UnixTime格式,可以通过时间转换工具进行转换获取具体时间),因此可以根据记录的时间戳进行耗电量数据的提取,表中记录了对应时间戳的手机剩余电量,电压,电流(正数是在充电,负数是耗电),表中还有温度数据,可以反映测试期间手机的温度变化。 表中第二列是时间戳timestamp,第四列Rawlevel是对应时间点的电量值,统计电量时,通过测试场景开始和结束的具体时间点,找到对应Rawlevel的差值,即可计算出该测试场景的耗电量精确数据。

结束语

以上是小编对iOS端耗电量测试的方法分享,适用于iOS端APP和SDK的耗电量测试,如有问题欢迎大家留言~

文章参考: 1. iOS电量测试实践https://cloud.tencent.com/developer/article/1006222 2. iOS 电量测试方案新大陆https://www.jianshu.com/p/e488ef221e51

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 搜狗测试 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 常用电量测试方法
  • 结束语
相关产品与服务
GPU 云服务器
GPU 云服务器(Cloud GPU Service,GPU)是提供 GPU 算力的弹性计算服务,具有超强的并行计算能力,作为 IaaS 层的尖兵利器,服务于生成式AI,自动驾驶,深度学习训练、科学计算、图形图像处理、视频编解码等场景。腾讯云随时提供触手可得的算力,有效缓解您的计算压力,提升业务效率与竞争力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档