Android耗电量测试

点击蓝字关注这个神奇的公众号~

背 / 景 / 介 / 绍

目前对于移动设备而言,电量是很重要的一个方面。现在大家使用手机基本每天都需要充电,所以用户也非常关注耗电的问题,如果应用设计不合理导致电量大量消耗,那么对于关注耗电的用户而言,这款应用将会是首要卸载目标。因此,作为测试人员,我们也应该对应用的耗电做一些针对性测试。


Android电量测试

1、使用硬件测试仪

如安捷伦N6705B,这种的硬件功耗测试仪可以比较精确的测试手机的电量消耗。

使用方法:

这个方法需要拆卸手机,将手机电池拿掉,将电量表串接在手机和外部电源之间,这样手机的供电就会经过电量表,可以获取比较准确的电量数据。

优点:获取的电流数据比较精确

缺点:需要硬件投入,需要拆卸手机,只能获得手机整体的电流值,无法判断某一个app在哪些方面消耗电流多少。


2、基于Battery Historian查看电量消耗

Battery-Historian是谷歌推出的一款专门分析Bugreport的工具,是谷歌2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具,是一款对于分析手机状态,历史运行情况很好的可视化分析工具,当设备在使用电池的时候,它可以使开发者们看到系统级和应用级事件图表,在图表时间轴上可以缩放和平移,能够直观的看到自上一次充满电到现在设备电池的统计汇总信息,它可以选中一个应用程序来检查该应用影响电池电量的一些参数。

目前Battery historian有两个版本,Battery Historian 1.0 通过python脚本转换成html文件,而新版本 Battery Historian 2.0 发布了,新版本带来了很多的改进:更清晰的报告,每个应用程序的摘要,更快的执行等等。


一、安装

因为2.0版本的一些优势,建议大家安装2.0版本,安装上可能需要花费一些时间。目前网上安装教程较多,这里不做详细介绍。

二、使用方法

1、先使用adb kill-server断开服务,再使用adb start-server开启adb服务。这一步很重要,因为我们开发时做电量记录会打开很多可能造成冲突的东西。

2、重置电池数据收集数据,我们在开始的时候需要通过以下命令来打开电池数据的获取以及重置:

adb shell dumpsys batterystats --enable full-wake-history

adb shell dumpsys batterystats --reset

执行的效果如下:

以上即为一些初始化操作,避免了干扰数据,之后拔掉数据线。

1)执行一些想要测试的场景。

2)重新连接手机,导出bugreport文件(adb bugreport > bugreport.txt)

3)打开battery historian(localhost:9999),将bugreport导入

4)结果如下


各参数意义

battery_level: 电量,可以看出电量的变化

plugged: 充电状态,这一栏显示是否进行了充电,以及充电的时间范围。

Screen: 屏幕是否点亮,这一点可以考虑到睡眠状态和点亮状态下电量的使用信息。

Top: 该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app,用来判断某个app对手机电量的影响,这样也能判断出该app的耗电量信息。该栏记录了应用在某一个时刻启动,以及运行的时间,这对我们比对不同应用对性能的影响有很大的帮助。

wake_lock*: wake_lock该属性是记录wake_lock模块的工作时间。是否有停止的时候等。

running: 界面的状态,主要判断是否处于idle的状态。用来判断无操作状态下电量的消耗。

wake_lock_in: wake_lock有不同的组件,这个地方记录在某一个时刻,有哪些部件开始工作,以及工作的时间。

Gps: gps是否开启。

phone_in_call: 是否进行通话。

Sync: 是否跟后台同步。可以把鼠标停在某一项上面。可以看到何时sync同步启动的,持续时间Duration多久。电池容量不会显示单一行为消耗的具体电量,这里只能显示使用电池的频率和时长,你可以看分时段的剩余电量来了解具体消耗了多少电量。

Job: 后台的工作,比如服务service的运行。

data_conn: 数据连接方式的改变,上面的edge是说明采用的gprs的方式连接网络的。此数据可以看出手机是使用2g,3g,4g还是wifi进行数据交换的。这一栏可以看出不同的连接方式对电量使用的影响。

Status: 电池状态信息,有充电,放电,未充电,已充满,未知等不同状态。这一栏记录了电池状态的改变信息。

phone_signal_strength: 手机信号状态的改变。这一栏记录手机信号的强弱变化图,依次来判断手机信号对电量的影响。

Health: 电池健康状态的信息,这个信息一定程度上反映了这块电池使用了多长时间。这一栏记录电池状态在何时发生改变,上面的图中电池状态一直处于good状态。

Plug: 充电方式,usb或者插座,以及显示连接的时间。这一栏显示了不同的充电方式对电量使用的影响。

优点:结果直观,有详细的耗电数据

缺点:不支持5.0以下的android系统

耗电模块总结:

获取数据注意事项:

获取测试结果时我们也要注意数据的有效性,避免数据误差,让数据更有效的说明问题,下面提供两种方法,来提高获取数据的有效性。

一、横向对比法:分两步测试,第一步测量手机硬件运行消耗的电量;第二步测试手机硬件和软件运行综合的耗电量。最后将两次的耗电进行对比,得出软件消耗的电量大小;

二、纵向对比法:同时进行两台手机,其中一台手机不运行软件,另一台手机运行软件;分别获得两台手机的耗电量,对比两台手机耗电量差异,得出软件消耗的电量大小。

这两种方法在测试上有一定的差异,很多应用软件都是需要移动网络的支持,而手机接收的网络信号是会随时间变化的。

因此,第一种方法的误差主要来源于手机在不同的基站网络下工作状态的变化。

第二种方法的差异则体现在两台手机本身硬件消耗的电量可能存在差异,所以需要尽可能使用同一型号,同一批次的手机。