专栏首页搜狗测试iOS耗电量测试方法-Sysdiagnose

iOS耗电量测试方法-Sysdiagnose

随着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

本文分享自微信公众号 - 搜狗测试(SogouQA),作者:zhonglv

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-03-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS 电量测试实践

    整个项目组经常收到这样的一种反馈:你看,你们开发的 APP,我还没怎么用呢,耗电量就排第一了。对于这样的反馈,我们能做些什么呢?经过一段时间的尝试和努力之后,事...

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

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

    ITester软件测试小栈
  • 2019-11-20-app专项测试【Android电量】Battery Historian耗电分析

    原因:本质是web某些资源没有加载出来,其中的一些资源需要访问google服务器,但是这些资源被墙了,无法访问。只要解决了墙的问题,submit的问题也就迎刃而...

    斑马
  • 移动端性能测试必备工具PerfDog性能狗

    在项目研发支持过程中,经历如上障碍和痛苦。我们决定做一个完全独立、简单易用,与APP版本、系统版本、系统平台无任何关系的性能平台。

    WeTest质量开放平台团队
  • PerfDog使用说明书

    English User's Guide:https://bbs.perfdog.qq.com/article-detail.html?id=7

    WeTest质量开放平台团队
  • 腾讯TMQ在线沙龙回顾|iOS电量测试

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

    腾讯移动品质中心TMQ
  • Xcode自带iOS测试方法

    #1. BSS段, 存放未初始化的全局变量. BSS是英文Block Started by Symbol的简称。BSS段属于静态内存分配。

    周希
  • WeTest明星工具-移动端性能测试PerfDog初探

    在十一月初,腾讯就官宣了一则消息,腾讯WeTest明星工具-PerfDog面向全球发布。官宣介绍如下:https://wetest.qq.com/lab/vie...

    WeTest质量开放平台团队
  • 【版本升级】PerfDog新增多维度测试报告对比功能、iOS电量测试功能升级

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

    腾讯Bugly

扫码关注云+社区

领取腾讯云代金券