iOS耗电量测试实践


前言

      常常会听到这样的抱怨 ----
      “你们的app我还没怎么用,我的手机就可以烫的烤红薯了”
      “你们的app我才用10分钟,电量就去了10%”
      ”你们的app还没怎么用,耗电量就排第一了“
      。。。
      面对这样的反馈,我们能做些什么呢?之前我是迷茫的,偶然间看了腾讯移动品质中心发布的一篇文章后,经过这段时间的尝试和实践之后,对与iOS耗电量测试有个一些不同的认识。
  • 在使用sysdiagnose前使用的一些方法
  • 一种粗放的耗电量测试方案
      在之前很长一段时间,都是用这种粗放的方式进行耗电测试的。
      1、选定测试场景及时长
      2、给手机充电,放电,让手机电量达到预设值,每个场景开始前,保持电量都是这一电量,并且手机是室温
      3、手机系统设置,一般关注蓝牙,定位,同志消息,音量,后台应用等等,都设置为预定的状态
      4、记录这个时候的剩余电量,开始执行测试,测试完毕后再记录一次剩余电量,电量差就是这个场景在这个时长内的耗电量。
      这样的测试方法,明显的耗电问题可以发现,比如一次测试一下子掉电10%这种,但是一些不太明显的问题用这个方法却是发现不了的。而且这种测试方法没有具体的数据,实用性不强。
  • 利用xcode进行耗电量测试方案
     xcode自带了耗电量测试工具instruments->Energy Log,可以测试电量,测试方法与粗放的耗电量测试基本类似,不同的是,测试的时候,它需要手机上选择开发者——Logging——Energy,选择Start Recording就可以测试了。一段时间以后再stop,再用手机连接到电脑的instrument上,import记录就可以了。这种方法得到的是一个耗电等级,能一定程度放反应耗电量状况,但是同样的,没有具体的电流电压数据。
  • 利用电流仪进行耗电测试
     MTL实验室之前和我说过,可以利用电流仪进行耗电量测试,但是因为一直没有设备没有进行实践。下面要介绍的方法同样可以获得电流数据,同时还可以获得电压,温度等其他信息,我想应该也达到了电流仪的效果了吧。
  • 利用sysdiagnose进行耗电量测试
     sysdiagnose是苹果的日志系统,苹果经常会询问是否要官方帮忙诊断和定位各种问题,使用的就是sysdiagnose的日志。Sysdiagnose很庞大,记录电池、第三方APP、各种系统功能和应用的所有运行情况。比如,设置->电池里面的电池用量就是使用Sysdiagnose的数据。下面具体介绍如何使用Sysdiagnose进行耗电测试。
首先,Sysdiagnose需要一个开发者账号,在手机上安装所需要的证书,安装证书之后,手机不需要越狱也可以获得数据。
苹果开发者网站上有具体的使用方法:
       总结一下,需要做以下几件事情:

       1、从苹果开发者官网下载证书,证书名字是

            DataAccess.mobileconfig

            BatteryLife.mobileconfig

       2、证书使用邮件发送到手机,并安装到手机上

       3、重启手机

       4、使用itunes同步手机内容到电脑

       5、使用手机进行测试后,再次使用itunes同步内容到电脑

       6、在电脑的 ~/Library/Logs/CrashReporter/MobileDevice/你的iphone名字/

       耗电量数据一般是以powerlog开头,.PLSQL或着.PLSQL.gz结束,下载DB Browser for SQLite可以查看数据,打开数据库可以看到以下结构,一共有380个表。
          
        这个数据库中有许多表,和电量相关的几个重要的表的名字和作用如下:
       
表名 内容
PLBatteryAgent_EventBackward_Battery 整机的电量数据,包含电流,电压,温度,每20s一条数据
PLBatteryAgent_EventBackward_BatteryUI 电量百分比数据,用于曲线绘制,每20s一个数据
PLIOReportAgent_EventBackward_EnergyModel 整机的详细电量数据,有CPU、GPU等详细数据
PLAccountingOperator_EventNone_Nodes APP的节点信息,每个APP对应唯一节点
PLApplicationAgent_EventForward_Application APP运行信息,记录每个APP在那个时间段以什么状态运行
PLAppTimeService_Aggregate_AppRunTime APP的运行时长统计,每小时更新一次
PLAccountingOperator_Aggregate_RootNodeEnergy APP的电量详细数据,记录每个APP的cpu,gpu等耗电信息,1小时更新一次
       其中最重要的表是PLBatteryAgent_EventBackward_Battery整机电量信息,每20s采集一次,在关闭其他app的情况下,可以近似的认为是所测app的耗电,表内容如下:
  
      测试中,可以根据记录的时间戳进行耗电量数据的提取,这个表中记录了对应时间戳的手机剩余电量,电压,电流(正数是在充电,负数是耗电),这个表还有温度数据,可以反映测试期间手机的温度变化。
       1、电流以mA计,iphone工作时候,电流一般在0~700mA之间,超过500mA手机就很容易发热
       2、电压以mV计,iphone工作时候电压在4V左右,当然电量比较充足的时候比低电量时候电压高,但是一般不超过0.2V
       3、剩余电量是以mAh计,他和最大电量是相对值,我们看到的电量百分比是这两个值的比值。
       4、温度可以作为参考值,测试中最高温度是37度左右,能明显感到发烫。
       5、每一个安装到iPhone的应用,在系统级都会有一个ID标注,称作结点ID。
       6、系统中每个应用都有几种状态,分别是不运行、前台活跃、前台不活跃(一般应用间切换时出现)、后台、暂停(在后台但没有运行,程序还在内存中)。
      以上这些状态都可以从数据库表中获得。
使用sysdiagnose进行iOS耗电量测试一般流程如下:
      1、准备测试用例

      2、执行前手机保持80%以上的电量(这个电量手机电压比较稳定),手机降温到室温

      3、测试时候断开电源,手动操作

      4、记录每个用例的开始执行时间,结束时间(时间戳)

      5、执行结束,记录时间,等待5分钟左右

      6、使用ituns同步数据到电脑(可以几次执行结果一起同步),进行后续计算

    数据提取后如下:

    
     另外,在测试中发现,网络类型对耗电测试影响比较大,比如4G情况下比Wi-Fi下音视频耗电增加了0.5倍左右(微信),不同系统以及低电量都会对测试电流产生一定的影响。
  •  总结
       通过sysdiagnose进行ios耗电量测试,可以不使用电流仪但是获取到iphone耗电量的实际数据并可以提取出来进行分析计算,对于iOS耗电测试来说也算是向前迈了一大步。 
本文来自网易实践者社区,经作者 孟志斌 授权发布。