APP功耗测试

如今的移动设备早已无处不在,待机时间成为影响设备最终销量的一个重要因素。类似的,电量消耗也是决定某个应用是否会被安装的重要因素之一。
本文将从基础概念介绍,到数据获取,再到测试场景设计和结果分析和问题定位,带你上手APP应用功耗测试。

一、功耗是什么?

功耗,通俗的理解即电流通过导体是设备运行,导体本身的电阻将电能转换为热能的过程,因此,通常功耗测试也叫电量测试。
那么APP的耗电量是如何计算的?我们先来看看根据Android官方电量统计接口文档得出APP功耗的计算公式如下:
APP功耗=CPU消耗+WakeLock消耗+数据传输消耗(移动网络&WiFi)+WiFi运行+GPS+other sensors。
从公式中我们可以大致看出,一个APP的耗电主要包含CPU消耗、WakeLock消耗、数据传输消耗、GPS定位消耗以及其他传感器的消耗,iOS应用类似。
以下是Android耗电计算的源码,里边定义了每个耗电项的具体计算单位:


这个文件在每部手机出厂时由厂商给出的在Android系统层的文件,因此不同的手机型号相同的指标对应的值未必一样。

二、数据获取

常见的APP电量数据获取有如下方法:

  • 系统自带工具
  • 硬件测试
  • 第三方工具
  • 应用集成SDK
  • 命令行
  • Xcode、Android Studio

1.系统自带工具

1.1 Android

Android系统进入设置-电池和性能-耗电排行,点击具体应用可以看到如下效果:


1.2 iOS

iOS系统进入设置-电池中查看:



使用系统自带工具查看应用耗电情况非常方便直观,缺点是无法对耗电异常与否做出判断、无法进一步分析耗电的原因。

2.硬件测试

如安捷伦、功耗仪,它的优点是无权限要求、测量精确,缺点是测试环境干扰因素多、需拆装手机、结果为整机电量消耗。
具体测试步骤如下:
1.假电池装进待测手机
2.假电池链接稳压电源
3.稳压电源链接已安装电流软件的电脑
4.启动电压和电脑软件,执行测试用例

3.第三方工具

3.1 Android

Android系统第三方测试工具使用如Powerstat(从GT官网下载)、Emmagee,它的优点是展示直观、使用方便,缺点是数据颗粒度大、无法分析定位、部分功能可能需要root。
具体的使用方法这里就不展开了,非常简单。
GT官网
Emmagee下载

Powerstat使用效果如下:


3.2 iOS

iOS系统第三方工具使用DetailedBatteryUsage,它仅支持越狱设备,可以到Cydia中进行下载,该插件支持iOS8-iOS10系统版本。


image.png

4.集成SDK

如GT、DoraemonKit,它的优点是展示直观、可获取应用相关线程栈,缺点是对源码有一定侵入、需要一定的开发基础。
这里补充说明一下,GT自动3.0版本之后已经不是以APK的形式使用,而是以SDK的形式集成在应用源码中,详细的集成步骤请参考官方文档。
DoraemonKit
GT

5.命令行

5.1 Android

使用命令行获取电量数据在Android系统应用测试上使用得更广泛。

  • adb shell dumpsys batterystats(Android 4.4及以上)

  • adb shell dumpsys batterysinfo(Android 4.1-4.3)

  • 以上命令版本不同结果内容也会有差异

  • 使用方法
    1.adb shell dumpsys batterystats --reset 。
    2.拔掉手机,操作你的App,操作完成后,重新连接手机,执行下面的命令。
    3.adb shell dumpsys batterystats > com.example.android.sunshine.app > batterystats.txt。

  • 文件结果分析(部分关键内容)
    Battery History 电量相关数据的时间序列
    Per-PID Stats 每一个进程执行了多长的时间
    Statistics since last charge
    Estimated power use (mAh) 电量消耗估算
    Per-app mobile ms per packet
    All partial wake locks 所有程序中wakelock,关注持续时间和数量

6.开发工具

要使用开发工具直接获取电量数据,一般情况下必须要有源码,而iOS可以通过导入应用电量日志,借助Xcode开发工具进行解读。

6.1 Android

首先介绍Android Studio,将工程编译到测试机上后使用Profile获取app性能数据,点击ENERGY图表,即可查看详细的耗电信息如下:


6.2 iOS有源码

iOS系统开发工具使用的是Xcode自带的iOS电量测试工具Energy log。
操作步骤如下:
1.点击开始按钮,录制 APP 运行情况。
2.看左边的 Energy Log 的指标有 Energy,CPU,Network等等应有尽有。
3.从图中可以看出整个 APP 的能量消耗情况,但是存在一个问题,这个问题就是我们已经知道了APP 的这些能量消耗情况,但是怎么知道要去修改哪里的代码呢?这个时候我们需要 Time Profiler 工具。
点击右上角的Time Profiler +按钮,来记录 APP 在某个时间段的代码运行情况。
4.按照代码执行时间的权重比,逐步找到了 panImage(with yRotation: CGFloat) 方法被频繁调用的地方。


6.3 iOS无源码

1.iOS 设置选项 ->开发者选项->logging ->start recording



2.进行需要测试电量的场景操作后进入开发者选项点击stop recording
3.将iOS设备和Mac连接
4.打开Instrument,选择Energy Diagnostics
5.选择 File > Import Logged Data from Device


6.保存的数据以时间轴输出到Instrument面板,完成


6.4 iOS无源码

sysdiagnose,是获取系统日志的证书,这里要介绍的就是通过系统电量日志分析应用耗电。
操作步骤:
1.通过开发者账号,在苹果官网下载sysdiagnose证书
2.将证书安装在目标手机上,同时按住声音‘+’和‘-’,再按一下锁屏键,手机震动表示sysdiagnose启动成功
3.执行测试用例,在不重启手机的情况下,等待10到30分钟,在手机的设置-通用-隐私-分析-分析数据中有一份命名为sysdiagnose-data的文件
4.将文件通过AIrDrop或其它方式传至电脑
5.使用DB Browser For Sqlit打开文件中以PLSQL为后缀的文件,查看其中的表数据



6.找到如下两张表,先找进程ID,再统计电量表中的所有该进程ID的所有耗电明细




这里PLAccountingOperator_Aggregate_RootNodeEnergy表中字段RootNodeID含义:

node 6 isp图像处理器
node 52 apsocbase除cpu外芯片层耗电
node 10 display 显示
node 11 wifidata
node 8 GPU
node 4 venc视频编码器
node 2 cpu
node 7 restofsoc

三、测试场景

从功耗的计算公式我们可以总结出通常需要覆盖的测试场景:

  • 核心流程用例
  • 新功能主流程
  • 后台运行
  • 涉及传感器、GPS、大数据计算、上传、网络扫描的场景

用例设计如下:


四、分析定位

测试分析通常无法通过数据直观的判断是否存在异常,必须借助历史版本数据、竞品数据来作为参考,当某个场景下的耗电量相比竞品或者历史版本有较大的上升时,视为异常,这时我们需要借助以下手段来定位问题所在。

Android

Android应用耗电分析定位推荐使用google开源工具Battery Historian,项目地址.

使用步骤:
1.adb shell dumpsys batterystats --enable full-wake-history //开启日志
2.adb shell dumpsys batterystats --disable full-wake-history //关闭日志
3.adb shell dumpsys batterystats --reset
4.adb bugreport > bugreport.txt //7.0以下 adb bugreport bugreport.zip
5.执行测试用例
6.python historian.py -a bugreport.txt > battery.html

battery.html如下图:



注:报告结果为整机电量消耗详情,测试时请排除其它因素

横坐标:时间线

battery_level:电量,可以看出电量的变化。
plugged:充电状态
screen:屏幕是否点亮
top app:该栏显示当前时刻哪个app处于最上层
Userspace wakelock:该属性是记录wake_lock模块的工作时间
health:电池健康状态的信息
plug:充电方式,usb或者插座,以及显示连接的时间。
Fg:前台进程

iOS

参考6.2、6.3章节。

总结

一个APP的耗电主要包含CPU消耗、WakeLock消耗、数据传输消耗、GPS定位消耗以及其他传感器的消耗,iOS应用类似。
当我们进行APP应用功耗测试时,我们首先可以使用GT测试各个场景中APP电量消耗是否有异常。
当我们确认或者怀疑该场景下存在异常时,如果是Android APP,我们可以采用battery historian分析工具对手机里获取的bugreport文件进行分析,统计app中持有超过一小时的wack_lock和一小时内发生的wackup数。
如果是iOS APP,我们可以直接使用苹果手机里开发者工具记录系统电量日志,测试结束后,将电量日志导入Xcode开发工具中的查看具体是哪些耗电项导致的耗电异常。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 一、电量消耗理论与分析 写出耗电量低的应用的关键是要透彻理解它的理论以及全部过程。下面将对电量消耗的相关理论知识进...
    香沙小熊阅读 4,588评论 4 4
  • 《冒牌心理医生》目录<冒医的所有文章都在这里 第4章 我有一所房子 几乎可以确诊了,第二种推断,她得上了精神分裂,...
    原鹿阅读 302评论 0 0
  • 你可知道对我做过什么最残忍,就是把我狠狠一夜之间,变成了大人。 ——林宥嘉 高洁,一个猥琐又帅气...
    Mr莫等生阅读 5,727评论 22 118
  • 受了委屈还去道歉,很可能是我们太害怕,害怕连最坏的关系都没有了,没有了关系,也就无法证明自己的存在。道歉是为了让自...
    月自空明阅读 84评论 0 0
  • 如果有如果,我一定会抓住想抓住的人的手 可世界上哪来的如果,我想要的人也早就不需要我,忘了吧。 169,新时间段,...
    梦幻泡影皆如是阅读 213评论 0 0