为什么要做电量测试

随着移动互联网的快速发展,手机的实用性、娱乐性越来越强。日常使用中发现,安装了应用后,即使不怎么使用,电量也会消耗很快。但如果恢复出场设置充满电后,手机可以待机很长时间。真相只有一个:手机耗电的最终元凶是软件。

在各大应用市场中搜索“电量管理”相关应用,每个应用都有几万到几十万次的下载量。这说明,越来越多的用户开始关注应用电量问题。所以,在研发阶段,有效的检测和定位电量问题,是十分重要的工作。

如何能够有效的检测和定位应用的电量问题呢?可以从两个方面入手:一方面,从手机系统入手,了解ROM对应用电量消耗的统计原理,进而从代码层规避不必要的电量消耗。另一方面,从应用本身入手,在保证用户体验的前提下,尽可能减少不必要的操作。

下面分享下,在对应用电量优化过程中所做的专项测试工作。

业界通用的电量测试方法

小结:可以看出,目前业界现有的电量测试方法很多。除了借助于其他设备监测整机电量消耗的硬件测试方案外,android系统也提供了各种获取应用电量消耗的方法。

方法各有优势。但,都是定位于获取整体电量消耗(整机、应用)。对于开发和测试人员最关注的问题:有效定位导致应用电量消耗的具体原因,仍然无法解决。

我们需要的电量测试

在产品研发阶段,能够快速获取应用电量消耗,准确定位问题原因的测试方法,是开发和测试人员最需要的方法。所以,从2016年初开始,我们确定了电量测试工作的开展方向:

1、理清原理:Android系统电量统计原理;

2、调整策略:关注整机的硬件测试方案替换为关注APP的软件测试方案;

3、准确定位:获取更详细的数据;

4、提升效率:自动化电量测试方案建设。

Step1理清原理

在对业界现有测试工具的了解中,我们发现Android提供了对应用电量统计的系统工具“耗电排行”。
通过解包ROM源码并反编译Settings.apk,找到了Android系统对应用电量消耗统计的接口:com.android.internal.os.BatteryStatsHelper(5.0之后类名)中的方法processAppUsage。该方法中统计了系统对应用各部分的电量消耗:

在解读源码的过程中,发现了一个有意思的文件power_profiler.xml。该文件中列出了手机厂商针对机型硬件定义的单位时间元器件电量消耗值。由于文件内容的差异,从而导致了,同样的应用、同样的操作场景、同样的外界环境,在不同手机上电量消耗不同。

不同手机power_profiler.xml文件

小结:通过解读源码,掌握到系统对应用电量消耗的统计方法。如果可以在测试过程中获取到组成应用整体消耗的各部分的消耗值,就可以大体定位到问题方向。

Step2调整策略

硬件测试采集的是整机的电流值,由于外接干扰因素的影响其他应用、手机环境、网络环境、人为因素等,经常导致的测试结果是:数据波动大、无法定位原因。并且,随着手机硬件、外观的调整,越来越多的机器无法自主拆卸电池,而厂商对内置版本的电量要求却越来越严格。目前现有的硬件测试方案,无法继续满足在研发阶段对应用电量的有效保障。

既然Android系统已经提供了对单个应用的电量统计应用,我们就可以利用源码并结合实际的需求,对已有的系统工具进行二次开发,通过软件的方式完成对单个应用耗电量的测试。

Step3准确定位

理清了系统对应用的电量统计原理后,我们发现“耗电排行工具”并没有详细输出组成应用总体电量消耗的每一部分的消耗值。所以,在解决“准确定位”的问题上,首先能够做的工作就是进一步细化数据。

“工欲善其事必先利其器”。

我们开发了以下两个工具,支持获取更详细的数据。

【工具一:PowerStat2.0】

该工具是对系统“耗电排行工具”的二次开发。使用系统计算公式和API进行计算。
相比较原工具,完善以下几个特性:

1、数据展示:除了展示组成应用总体电量消耗的每一部分的消耗值,同时显示使用时长、次数及数据传输量信息;

2、传感器细分;

3、展示power_profiler.xml

4、提供定时测试功能。

【工具二:CPUMonitor】

通过日常监控和用户反馈发现,导致应用电量消耗升高的最常见问题是CPU问题:

华为手机用户反馈电量问题

日常监控电量异常升高问题

依据操作系统的概念—进程是由一个或多个线程组成,可以将“准确定位”问题进一步细化到获取线程的CPU时间片消耗。

为了能够在电量测试的同时进行CPU时间片数据的采集,并尽可能减少其他消耗的引入,我们开发了一个手机端的数据采集工具:CPUMonitor。原理如下:

工具具备以下几个特性:

1、广播作为工具驱动方式,方便应用于自动化脚本控制;

2、数据源取自系统:权威、详细;

3、多样的采集模式:频繁模式(freq)、触发模式(lazy)。

优势:

1、安装使用无权限要求;

2、可与电量测试同时进行;

3、数据取自系统保证准确性;

4、触发模式保证了最小性能消耗。

小结:目前,工具已经应用于多个移动端应用的电量测试中。除了可以高效定位电量问题外,还可以在功能开发前预估电量消耗,从产品层协助策略制定。通过自研工具的开发,有效的将原有的硬件测试方案替换成关注应用电量消耗的软件测试方案。自研工具获取的数据,全部来自于系统提供的接口,保证了数据的准确有效性。

Step4 提升效率

通过测试工具的开发,在一次电量测试过程中,已经能收集到帮助定位问题的足够详细的测试数据。所以,我们下一步需要思考的就是,如何能够更加高效更加精准的获取测试数据?
原有的电量测试流程:

存在的问题:

1、人工操作:设备连接、环境清理、应用安装、工具设置、初始数据采集;

2、人工操作:设备断开、场景操作执行、计时;

3、人工操作:设备连接、数据采集&保存。

人工干预每个环节导致:数据准确性低、执行效率低。

各环节的优化方案:

数据采集:脚本驱动+测试工具 替代 手动执行命令行;

操作执行:自动化脚本 替代 手工操作;

流程控制:PC控制 替代 人工控制。

优化后的电量测试流程:

解决需人工连接设备的问题:将传统的USB线中间增加硬件控制模块后,可由PC端的脚本控制硬件的断开连接。

解决USB连接断开后场景操作的执行问题:传统的解决方案:将自动化脚本放到手机端执行。

存在的问题:手机必须要有root权限。

解决的方案:adb无线控制,下发指令。

小结:通过全流程的自动化处理,减少人工干预,除了提高数据的准确性外,有效的提升了测试效率。以1小时待机电量测试为例,原测试流程和自动化测试流程相比较:

我们的收益

总结下我们在电量测试方面所做的工作:

1、通过对Android系统电量统计原理的分析,清晰的掌握到组成APP整体电量消耗的每一部分的消耗值,从而可以直接定位导致电量问题的大体方向。

2、通过测试工具的开发,获取到更加详细的功耗数据,从而可以直接定位到具体代码逻辑。

3、通过电量测试的自动化建设,有效提升测试效率,除了缩短测试时长、减少人力投入外,还提高了测试数据的准确性。

电量测试方案应用于移动终端产品,除了能快速检测定位电量问题外,还可以协助开发及产品评估新增功能带来的额外消耗。

通过一年多的工作,我们总结出一套理论与实践相结合的电量优化检测方法:

理论:在了解系统对应用电量统计原理的过程中,发现对wake lock消耗的计算在方法processAppUsage()中是没有进行条件判断的。也就是说,如果在亮屏时,代码逻辑中仍然注册了wake lock(测试的wake lock是没有任何意义的),在对应用进行电量统计时,就会计算上这部分的消耗:

在写代码时,可以注意下,在进行wake lock注册时,首先要判断手机的状态。

实践:在对多个应用进行电量测试的过程中,发现不同产品根据产品特性不同,除了共性导致电量异常的问题外,还会存在产品特性相关的操作场景。

我们抛开产品,抽离出共性问题,整理成下面这个表格:

在用例设计部分,我们将待机列为需要关注的场景,是因为用户对待机时应用的电量消耗更为敏感。而在这个场景下,经常会出现由于代码逻辑问题、产品策略问题导致应用电量消耗异常。在操作过程中的电量消耗,是用户预知的消耗。但如果使用不当,也会造成异常消耗。

想知道更多测试相关干货 请关注我们的微信公众号:腾讯移动品质中心TMQ。

手机发烫是为何—— App 电量测试定位方法的更多相关文章

  1. app电量测试

    一.测试前准备 样本A:商家端2.6.4版本为基准样本(即旧版本): 样本B:商家端2.6.5版本(未正式上线,可找RD协助打包): 推荐Android 5.0及以上手机2台或多台(根据RD本次测试需 ...

  2. APP非功能测试

    1.移动APP启动时间测试 问题:如何获取启动时间? 答:通过adb的logcat来获取Activity启动时间.用户体验时间=Activity启动时间+启动中异步UI绘制的时间. 启动时间的测试主要 ...

  3. Android手机app耗电量测试工具 - Gsam Battery Monitor

    这段时间需要测试一个Android手机app的耗电量,在网上找了一个工具,Gsam Battery Monitor,觉得挺好用,和大家分享一下. 安装app后打开,可以看到主界面是这样的 点击一下上图 ...

  4. 手机App安全性测试初探

    目前手机App测试还是以发现bug为主,主要测试流程就是服务器接口测试,客户端功能性覆盖,以及自动化配合的性能,适配,压测等,对于App安全性测试貌似没有系统全面统一的标准和流程,其实安全性bug也可 ...

  5. Loadrunner&Jemeter进行手机APP压力测试

    一.loadrunner通过代理录制app脚本 随着手机APP的广泛应用,手机应用的使用已占据了大量的市场份额,尤其是优秀的手机APP,动辄用户过千万过亿,对于如此庞大的用户量,我们在开发APP时,也 ...

  6. 06- 移动端APP兼容性测试以及APP兼容性测试手机选择与云测试技术

    在开始测试APP之前,应该考虑什么问题?或者如何选择设备?多少部手机测试兼容性最佳? 兼容性测试手机数量:主测手机 1 ,2(根据人员),辅助测试手机:用于兼容性测试.(50-60台最佳,至少5-20 ...

  7. 安卓手机APP兼容性测试如何有效进行?

    Android App兼容性测试是一个比较重要的App评价内容,实际上兼容性测试不仅仅和测试人员相关,在开发阶段就应当着重考虑,因为兼容性问题是除了实现App本身要求的功能后,必须要关注.而且至关重要 ...

  8. 移动app传统测试流程优化

    [本文出自天外归云的博客园] 概述 在传统的软件测试流程中,每一期需求从开发到上线都要经历从需求分析与评审.测试用例评审.开发.测试.发布的流程.其中测试包含了后台测试.前端web测试.客户端测试.后 ...

  9. 移动APP云测试平台测评分析

    随着智能手机的普及率和渗透率越来越高,App开发软件也越来越多.有专家预测,2017年的App应用下载量将会突破2500亿,整个移动科技市场规模将会达到770亿美元.身处在这个"移动&quo ...

随机推荐

  1. memcache笔记

    服务端: 通过printf配合nc向memcached中写入数据[root@yz6245 ~]# printf "set key1 0 0 6\r\noldboy\r\n" |nc ...

  2. MongoCola使用教程 1 - MongoDB的基本操作和聚合功能---Mongdb客户端软件操作说明

    前言 在开始正文之前,感谢博客园的Nosql爱好者对于MongoCola工具的试用(使用).特别感谢 呆呆 这位朋友的Bug报告,让我纠正了一个很严重的Bug.同时也感谢以前的多个网友在博客留言中给我 ...

  3. 敏捷开发之scrum模型

    什么是敏捷开发? 敏捷开发(Agile Development)是一种以人为核心.迭代.循序渐进的开发方法. 怎么理解呢?首先,我们要理解它不是一门技术,它是一种开发方法,也就是一种软件开发的流程,它 ...

  4. 转: Photon 3.4 Changed Logs ..

    最新版了.修了很多bug. Photon 3.4 http://doc.exitgames.com/en/onpremise/current/reference/version-history/pho ...

  5. notebook查找文件

  6. linux中磁盘分区以及如何将磁盘挂载到系统中

    fdisk 分区 fdisk /dev/sdb -p查看当前分区-t 改分区号-w将分区表写进磁盘-n创建分区 -p主分区 -e拓展分区 partprobe 让内核更新分区信息cat /proc/pa ...

  7. Java 开发手册之编程规约

    一.编程规约 (一) 命名规约 1.[强制] 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束.(代码规范,易读) 反例: name / __name / $Object / n ...

  8. 接口测试基础——第一篇smtplib发送文字邮件

    现在我们就开始进入接口测试框架的知识准备阶段,今天是第一篇,很简单的,就是发送纯文字的电子邮件,会的童鞋可以忽略,不会的就多敲几遍,直到自己能敲出来为止~~ # coding: utf-8 impor ...

  9. openfaas 私有镜像配置

    备注: 此项目是使用nodejs  生成唯一id 的\ 预备环境 docker harbor faas-cli openfaas k8s 1. 项目初始化 faas-cli new node --la ...

  10. bzoj 1000 A+B Problem (And also my first experience of Emacs)

    problem:https://www.lydsy.com/JudgeOnline/problem.php?id=1000 This is my first code under Emacs! #in ...