本文5266字,阅读约需7分钟
Hi,大家好。随着应用市场不断推陈出新,用户在使用APP时更加关注电量问题。如果自己的App不小心出现在耗电量排行榜Top10,用户卸载的概率就会很高,针对APP耗电量
测试,在此与大家分享。
一
耗电量测试分析
相对于PC端来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。Android的很多特性都比较耗电(如屏幕、GPS、sensor传感器、唤醒机制、CPU、连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。
1
耗电场景
主要的耗电场景有:
业务层面,用户最核心基础的模块:
2
耗电量测试
获取测试结果时我们要注意数据的有效性,避免数据误差,让数据更有效的说明问题,下面提供两种方法,来提高获取数据的有效性。
这两种方法在测试上有一定的差异,很多应用软件都是需要移动网络的支持,而手机接收的网络信号是会随时间变化的。
二
IOS端耗电量测试
1
常规测试法
(1) 测试方法
①选定测试场景及时长;
②手机充电,放电,手机电量达到预设值,每个场景开始前,保持电量都是这一电量,并且手机是室温;
③手机系统设置,一般关注蓝牙、定位、通知消息、音量、后台应用等等,都设置为预定的状态;
④记录剩余电量,开始执行测试,测试完毕后再记录一次剩余电量,电量差就是这个时长内的耗电量。
(2) 测试结果准确性
这样的测试方法,明显的耗电问题可以发现,比如一次测试掉电10%,但是一些不太明显的问题用这个方法无法发现。另外这种测试方法没有具体的数据,实用性不强。
2
Energy Impact
(1) 测试方法
开发过程中,运行调试模式就可以在Xcode里直接查看Energy Impact。电量仪表盘上有3个区域,如果经常跑到红色区域那就该检讨下自己代码。下面的柱状图会告诉你耗电的组成部分:CPU,Network,Location,GPU,其中Overhead表示不是由App引起的耗电。如果有问题,可以进一步通过快捷入口打开Time Profile,Network Profile,Location Profile做进一步细致排查问题点。
(2) 测试结果准确性
利用Energy Impact测电量很简单,缺点就是必须连上真机,只适合开发人员;而且对于耗电只能给出定性,没有定量的显示。
3
Sysdiagnose耗电量测试
Sysdiagnose是苹果的日志系统,Sysdiagnose很庞大,记录电池、第三方APP、各种系统功能和应用的所有运行情况。通过Sysdiagnose我们可以获取电量消耗,电压,电流,温度,甚至系统的 CPU、GPU 等等耗电都有详细的数据。而且不单单是自己的 App,手机内安装的其它的 APP 同样可以获取到数据,这样大大方便了我们做出详细的对比测试数据。
(1) 测试方法
①Sysdiagnose需要一个开发者账号,在苹果开发者官网Profiles and Logs下载证书BatteryLife.mobileconfig。
传送门:https://developer.apple.com/bug-reporting/profiles-and-logs/
复制
如下所示:
②将证书发送到手机(如airdrop方式),在手机上安装该证书,安装之后,手机不需要越狱也可以获得数据。
③手机端执行测试
测试前,手机端先充电到80%以上,充电完毕后拔出充电线,不做任何操作静置10min后开始执行场景;测试时需将屏幕亮度最低、蓝牙关闭、推送消息关闭、定位开启(在系统设置-隐私里开启)、音量最低、个人热点关闭、后台进程全关闭;
进入APP,根据测试用例设计的测试场景进行测试;
⚠️注意事项:
上一步操作完所有场景,测试完成后,手机静置约半小时(因为数据库写入会有延迟),然后手机连接电脑,同步数据;
同步完成后,导出需要的电量日志,导入日志地址方法如下:
Mac:
打开Finder,按 CMD+SHIFT+G,并输入:
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的差值,即可计算出该测试场景的耗电量精确数据。
三
Android端耗电量测试
1
Battery Historian耗电量消耗
(1) battery-historian服务搭建
①克隆安装包
git clone https://github.com/google/battery-historian.git
复制
②下载battery-historian的代码和依赖
③修改setup.go文件的参数
值修改为:
因为版本不一样,编译会失败,所以升级到稳定版本。
④切换到setup.go所在的目录,进行编译
⑤启动battery-historian服务
go run cmd/battery-historian/battery-historian.go
复制
如下所示:
⑥验证是否安装成功
http://localhost:9999/,出现如下,则ok!
(2) 耗电量数据收集
①清理耗电量数据
②运行测试用例/手工操作
使用monkey或appium来操作想要被测试的Android应用,最好就持续测试。
③收集数据
Android 7.0以上版本使用的命令 :
Android 6.0 或以下使用的命令:
如下所示:
(3) 上传测试数据,分析测试结果
各参数意义:
(4) 测试结果特性
优点:结果直观,有详细的耗电数据;
缺点:不支持5.0以下的android系统;
2
耗电量测试
①重启adb;
②使用adb devices查看手机是否连接上电脑;
③重置电池数据
④拔掉数据线,开始测试;
⑤测试完成后使用数据线连接电脑;
⑥收集电量数据;
⑦根据测试的包名找到对应的UID;
⑧根据uid查询电量消耗;
以上
That‘s all
更多系列文章
敬请期待