这篇文章主要介绍一下不同平台下APP的耗电量测试。借鉴于: http://www.51testing.com/html/28/n-4456728.html / https://www.jianshu.com/p/d68ae67c9227
相对于PC来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。另外,Android的很多特性都比较耗电(如屏幕、GPS、sensor传感器、唤醒机制、CPU、连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。
主要的耗电场景有:
cpu:复杂的运算逻辑、死循环等会直接导致CPU负载过高,会导致耗电;
wakelock:只要有应用拿到wakelock这个锁,系统就无法进入睡眠状态。频繁wakelock或者申请了wakelock没有释放,会导致耗电;
wifiscan和wifilock:wifiscan和wifilock也会导致手机的wifi模块处于激活状态,频繁的wifiscan或者wifilock不释放,会导致耗电;
sensor:传感器打开后会导致系统持续监听设备外围环境的数据变化,使用后不及时关闭,会导致耗电;
network:大量的数据传输,或者长时间的移动网络数据传输导致radio长期处于活跃状态,会导致耗电;
gps:gps也是一种传感器,定位中没有及时关闭,会导致耗电;
业务层面,用户最核心基础的模块:
新增的基础逻辑,倘若入口明显,潜在较大访问,必须保证性能;
活动需要,因为活动上新的逻辑,存在较大的用户访问,需尽力提升用户体验;
反馈体验不好的模块;
测试环境
1、恢复出厂设置,排除其他APP对耗电的影响,减少干扰因素;
2、测试过程中,不出现充电情况;
1. iOS下APP的耗电量测试
1.1系统接口
iOS 10系统内置的Setting里可以查看各个APP的电池消耗,系统接口能获取到整体的电池利用率,以及充电状态。
该方案不能检测固定某一时间段内的电池精准消耗。
1.2、硬件检测
通过硬件PowerMonitor可以精准地获得应用的电量消耗。
步骤如下:
a. 拆开iOS设备的外壳,找到电池后面的电源针脚
b. 连接电源监控器的设备针脚
c. 运行应用
d. 测量电量消耗
该方案成本太高并不适合我们的测试工作。
1.3、软件工具检测
由于iOS系统的封闭性,获取功耗数据只能通过Xcode自带的Instruments工具实现,步骤如下:
1. 断开iOS设备与Mac的连接(充电时测试功耗会导致数值不准确)
2. iOS设置选项->开发者选项->Logging->Start Recording
3. 进入需要测试电量的场景操作
4. 操作完成后进入开发者选项点击Stop Recording
5. 将iOS设备和Mac连接
6. 打开Instruments,选择Energy Log
7. 选择File->Import Logged Data from Device
8. 保存的数据以时间轴输出到Instrument面板
该方案作为性能测试的补充方案具有较高的权威性,但输出的数据不直观,用于功耗测试的效果并不理想。
1.4、使用Battery Life进行功耗测试
该APP无需额外费用,输出结果直观(可得到毫安数及百分比)准确,可以尝试使用。
2. Android下APP的耗电量测试
2.1 普通安卓机
测试环境
1、恢复出厂设置,排除其他APP对耗电的影响,减少干扰因素;
2、测试过程中,不出现充电情况;
3、Android 5.0 以上的设备;
4、通过wifi连接电脑和手机;
测试步骤
1、首先,电脑用数据线连接手机设备,开启设备的开发者模式后,使用adb devices命令,能够看到设备在线
2、然后,默认情况下,android系统不会
记录特定应用的wakelock变化,为了依照时间顺序,展示各个 wakelock的详细信息,需要先执行命令:
adb shell dumpsys batterystats --enable full-wake-history |
3、接着需要重置batterystats数据:
adb shell dumpsys batterystats --reset |
4、接下来可以拔掉数据线,在手机上对被测试app执行相应的用例进入测试场景
5、操作完成后,电脑再次连接设备,执行命令:
adb shell dumpsys batterystats > xxx.txt
# 因为bugreport时间比较长,我们放到后面执行来减少与前面dumpsys的数据的偏差
Android 7.0及以上:
adb bugreport bugreport.zip
Android 6.0及以下:
adb bugreport > bugreport.txt
|
6、打开Battery Historian平台将bugreport.txt导入, 并点击submit进行分析
Case1:应用后台静默,wakelock长时间未释放
如上图,在一次版本的耗电量测试中发现耗电量显著增加,通过进一步定位发现是应用中引入的某个SDK为了在后台维持心跳使用了wakelock,而在用户将应用切入后台后一直持有没有释放,随后经过跟对应的开发同学沟通进行了优化更改了实现方式去掉了wakelock,耗电量恢复正常。
Case2:应用后台静默,各种sensor持续工作
在做另外一个版本的专项测试中发现耗电量数据异常,如下图,通过测试结果分析发现是应用在后台驻留了51分钟,各种传感器也同样工作了51分钟导致耗电量显著增加,后经过排查确定是引入的推送SDK导致的,经过修改调用方式解决。
Case3:应用前台静默,各种sensor持续工作
通过前台静默(无任何操作)15分钟,发现耗电量比上个版本高了一倍,如下图: 应用前台静默期间加速度、重力、陀螺仪这三个传感器一直被使用。
跟开发沟通后确定是由于另外一个部门提供的SDK导致的,该SDK采集传感器数据的策略有问题导致会在应用启动后一直采集造成耗电,解决方案是按照时间窗口来采集数据, 比如每次打开APP采集5分钟传感器数据, 然后关闭传感器数据采集。
通过标准
最佳实践
2.2 谷歌手机
PowerTutor是一款适用于Google手机的应用程序,可显示主要系统组件(如CPU,网络接口,显示器和GPS接收器以及不同应用程序)所消耗的功率。该应用程序允许软件开发人员了解设计变更对电源效率的影响。应用程序用户还可以使用它来确定其操作如何影响电池寿命。PowerTutor使用在仔细控制设备电源管理状态期间通过直接测量构建的功耗模型。该模型通常在实际值的5%内提供功耗估计。提供了用于功耗历史的可配置显示器。它还为用户提供包含详细结果的基于文本文件的输出。您可以使用PowerTutor监控任何应用程序的功耗。
PowerTutor的功率模型建立在HTC G1,HTC G2和Nexus之上。它将在其他版本的GPhone上运行,但是当与上述手机型号以外的手机一起使用时,功耗估算将会非常粗略。我们计划在未来为其他手机提供功率模型。
PowerTutor下载地址: http://ziyang.eecs.umich.edu/projects/powertutor/