作者简介
移动设备从之前的诺基亚、摩托罗拉等功能机到现在android、iOS等智能机,手机已经越来越普及,功能越来越丰富,但电池技术基本上却停滞不前,逐渐显现出功能机时代没有出现的续航短板,续航待机时间短一直是用户吐槽的焦点,而许多厂商也坦承电池成了制约手机发展的最大障碍之一。手机的其他模块越来越小,而电池的体积越来越大,已经成为了一个不争的事实。早前的功能机电池容量基本都小于1000mAh,而现在手机电池容量3000mAh已经是标配了,但反而待机时间都不及之前功能机的三分之一。
为了提高电池的续航能力,那么需要硬件厂商降低元器件的单位功耗以及软件系统开发商提高对硬件使用的效率。那么对于APP开发者来说,是不是就不用关心电量消耗了呢?显然不是,例如在anrdoid系统中,不恰当的使用wakelock锁、GPS定位等功能也将产生大量的电量消耗,那么如何评价我们开发出来的应用是耗电还是不耗电,如何测试?这就是我们今天讨论的主题——电量测试,一个在移动应用中新出现的测试类型。
所谓的电量测试,就是测试移动设备电量消耗快慢的一种测试方法。一般是用平均电流(电池生产厂家一般都采用mAh来标记电池容量大小,平均电流越小,说明设备使用时间就越长)来衡量电量消耗速度。但平均电流多大才能说明不耗电?事实上业界并没有统一的标准,目前我们(腾讯智能平台测试团队,下同)通用的做法就是通过场景来定义一个平均电流经验值,例如无网络待机下平均电流要小于10mA。下表给出一个常见场景下参考的平均电流值:
从上表可以得知(因iOS可测性不高,上面数据都是在android平台下测试的数据,下同),待机下平均电流和非待机平均电流差别是非常大的,最少一个数量级。所以在我们实际应用开发过程中由于API的错误使用导致CPU一直工作无法休眠,将消耗大量的电量,电量测试的目的就是要测试出这种可能出现的场景,解决因错误使用API、网络操作处理不合理或者代码编写不规范等导致异常耗电的情况。
上面了解电量测试的一些基本知识概念后,可能有同学要问,怎么测试电量呢?目前有2种方法可以测试电量,硬件测试法和软件测试法。硬件测试法就是利用硬件设备测试被测设备(例如可拆卸电池的android手机)的电流,统计一段时间内的平均电流值。硬件测试仪器包括稳压电源,可以实时读取电流的电流仪器以及个人PC电脑(也有稳压电源和电流仪器为一体的电流仪设备,这种设备较贵),如下图所示:
目前我们采取的电流仪为自己制作的仪器“电量宝”(考虑成本低的因素,且实时处理数据可控),逻辑电路接线图如下所示:
“电量宝”主要功能实现被测对象电流实时读取,并输出实时曲线图,记录原始电流和电压数据。如下实物图所示(实物图比较丑陋,芯片、电池处理等比较原始,但比较实用,各位看官不要嘲笑哈,我们不是富二代):
实物图说明:
1)电源:电源是通过原始的电池作为电源供电,也可以选择稳压电源(原始电池省钱,更接近用户场景,缺陷是不稳定,没有稳压电源稳定);
2)电量宝芯片:USB线5V电压作为芯片工作的电压,同时通过串口通讯来读取数据;
3)被测对象手机:手机需要取下电池,通过导线正负极和“电量宝”相连。
各个硬件模块功能了解清楚后,在硬件测试过程中还有一些事项需要特别注意,第一个就是电压的问题,如果使用电池供电,尽量保证电池满电下开始测试(因有外部接线干扰,会分压,导致手机实际电压不足);如果使用稳压电源,因不同手机对电压敏感程度不同,所以会导致手机开机需要的电压不同(,可以根据实际调整,一般在4.0V~4.5V左右,电压值选择不正确,会导致手机无法开机或者开机后不稳定,循环重启等问题,严重情况会损坏手机),第二个就是连接的导线问题,纯铜导线和劣质的非纯铜导线或者铝导线,电阻有明显差异(电流波动较大),这样会对被测手机有较大影响,因手机对电流是非常敏感的,电流忽大忽小将导致手机不稳定,非常影响测试效率,第三个就是接线正负极的问题,手机端正负极和电源端正负极一定要对应上,接反有可能损坏手机。手机端正负极触片较小,需要购买特殊夹子才能使用,图下图所示:
准备工作搞定了之后,就可以通过串口实时读取电流数据了,记录原始数据,就可以计算平均电流值了。如下图就是实时采集手机(GT-I9500)开机过程中实时电流曲线图,平均电流值为480mA:
另外一种方法就是软件测试法,例如android4.1以上版本系统设置中提供了电量消耗的统计(也有第三方的统计软件例如电池医生等类似应用),模拟计算应用APP的耗电,这种方法一般用来分析APP耗电,不作为平均电流值的基准值,可以具体到APP进程级别,能分别统计到APP的CPU使用时间、wakelock锁时间、网络传输的数据、GPS时间等(其中部分选项需要扩展android源码settings App才能获取到,默认情况下部分信息无法获取)。下图为我们自己编译android源码实现的电量统计APP耗电的信息:
也可以通过android系统本身自带的adb调试命令来获取电量信息,命令如下:
adb shell dumpsys batterystats/batteryinfo
android4.4及以上为电池统计服务为batterystats,4.4以下为batteryinfo。命令获取的结果分2部分,一部分是系统整体耗电信息,如下图所示:
另外一部分是各个进程的耗电信息,如下图所示:
根据上面介绍后,再进行电量测试就容易得多了。首先明确被测场景,然后使用硬件仪器测试被测硬件(例如手机)的平均电流,统计数据并分析该场景下是否耗电,然后使用软件工具统计详细信息,例如CPU使用情况、WIFI/蜂窝网络传输数据、GPS、蓝牙使用情况等,判断可能耗电的地方,优化,再测试,再分析,直到被测对象平均电流低于预期值。那么本篇文章大致内容介绍完毕,下一篇文章将详细介绍电量测试的硬件和软件测试的细节、实战讲解等内容,敬请期待。
本文系腾讯Bugly特邀文章,转载请注明作者和出处“腾讯Bugly(http://bugly.qq.com)”