鹅厂揭秘——高端大气的App电量測试
作者简单介绍
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" align="middle" width="135" height="135" alt="">袁建发
腾讯智能平台測试组专项測试专家。擅长高精尖的专项測试。喜欢捣腾各种硬件和仪器。移动设备从之前的诺基亚、摩托罗拉等功能机到如今android、iOS等智能机。手机已经越来越普及,功能越来越丰富,但电池技术基本上却停滞不前。逐渐显现出功能机时代没有出现的续航短板,续航待机时间短一直是用户吐槽的焦点,而很多厂商也坦承电池成了制约手机发展的最大障碍之中的一个。手机的其它模块越来越小,而电池的体积越来越大,已经成为了一个不争的事实。早前的功能机电池容量基本都小于1000mAh,而如今手机电池容量3000mAh已经是标配了,但反而待机时间都不及之前功能机的三分之中的一个。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
为了提高电池的续航能力,那么须要硬件厂商减少元器件的单位功耗以及软件系统开发商提高对硬件使用的效率。那么对于APP开发人员来说,是不是就不用关心电量消耗了呢?显然不是,比如在anrdoid系统中。不恰当的使用wakelock锁、GPS定位等功能也将产生大量的电量消耗,那么怎样评价我们开发出来的应用是耗电还是不耗电,怎样測试?这就是我们今天讨论的主题——电量測试,一个在移动应用中新出现的測试类型。
1什么是电量測试
所谓的电量測试,就是測试移动设备电量消耗快慢的一种測试方法。通常是用平均电流(电池生产厂家一般都採用mAh来标记电池容量大小,平均电流越小。说明设备使用时间就越长)来衡量电量消耗速度。但平均电流多大才干说明不耗电?其实业界并没有统一的标准。眼下我们(腾讯智能平台測试团队,下同)通用的做法就是通过场景来定义一个平均电流经验值,比如无网络待机下平均电流要小于10mA。下表给出一个常见场景下參考的平均电流值:
从上表能够得知(因iOS可測性不高,上面数据都是在android平台下測试的数据。下同),待机下平均电流和非待机平均电流区别是很大的,最少一个数量级。
所以在我们实际应用开发过程中因为API的错误使用导致CPU一直工作无法休眠。将消耗大量的电量,电量測试的目的就是要測试出这样的可能出现的场景,解决因错误使用API、网络操作处理不合理或者代码编写不规范等导致异常耗电的情况。
2电量測试的方法
上面了解电量測试的一些基本知识概念后,可能有同学要问。怎么測试电量呢?眼下有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部分,一部分是系统总体耗电信息,例如以下图所看到的:
另外一部分是各个进程的耗电信息。例如以下图所看到的:
依据上面介绍后。再进行电量測试就easy得多了。
首先明白被測场景,然后使用硬件仪器測试被測硬件(比如手机)的平均电流,统计数据并分析该场景下是否耗电,然后使用软件工具统计具体信息,比如CPU使用情况、WIFI/蜂窝网络数据传输、GPS、蓝牙使用情况等,推断可能耗电的地方,优化,再測试,再分析,直到被測对象平均电流低于预期值。那么本篇文章大致内容介绍完成,下一篇文章将具体介绍电量測试的硬件和软件測试的细节、实战解说等内容。敬请期待。
本文系腾讯Bugly特邀文章,转载请注明作者和出处“腾讯Bugly(http://bugly.qq.com)”
鹅厂揭秘——高端大气的App电量測试的更多相关文章
- Android特效专辑(十一)——仿水波纹流量球进度条控制器,实现高端大气的主流特效
Android特效专辑(十一)--仿水波纹流球进度条控制器,实现高端大气的主流特效 今天看到一个效果挺不错的,就模仿了下来,加上了一些自己想要的效果,感觉还不错的样子,所以就分享出来了,话不多说,上图 ...
- 【干货】教你如何利用fullPage.js以及move.js插件打造高端大气的网站效果!
前言: 如今我们经常能见到全屏网站,尤其是国外网站.这些网站用几幅很大的图片或色块做背景,再添加一些简单的内容,显得格外的高端大气上档次. 在学习过jQuery插件之后,才发现之前的很多网站特效完全可 ...
- APP 打包測试流程 从零開始
前言: 苹果应用打包測试一直是件令人头疼的事.尤其是第一次打包的时候,因为苹果官网是全英文性且缺少仔细的步骤指引.刚開始学习的人往往要花费非常多时间去干一件三分钟就能搞定的事. 今天我们来透彻的解说一 ...
- APP压力測试新手教程
Daniel Knott 用过各种不同编程语言和软件质量保证工具.他在软件开发和測试方面干了七年,自2010年,他一直在德国汉堡的XING AG公司就职,几个项目里,比方XING调查和XING建议,他 ...
- HTML5动画图片播放器 高端大气
我们见过很多图片播放插件(焦点图),很多都基于jQuery.今天介绍的HTML5图片播放器很特别,它不仅在图片间切换有过渡动画效果,而且在切换时图片中的元素也将出现动画效果,比如图中的文字移动.打散. ...
- Android App性能測试
一.内存 1.查看单个应用App最大内存限制 Command:adb shell "getprop|grep heapgrowthlimit" C:\Users\hujiachun ...
- 用python做自己主动化測试--对server端的自己主动化測试(3)-很多其它http client实例
上一篇中仅仅是实现了一个非常easy的http client功能,request还提供了keep alive, SSL, 多文件上传,cookie 管理功能,http requests头管理等丰富的功 ...
- 移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践
这篇是计算机类的优质预售推荐>>>><移动App測试实战:顶级互联网企业软件測试和质量提升最佳实践> 国内顶级互联网公司測试实战经验总结.阿里.腾讯.京东.携程.百 ...
- Android測试APP工具(一)
近期面试APP开发者的时候,遇到了技术总监问 APP測试的概念性问题.后面感觉主要的项目流程.项目逻辑.屏幕适配. 測试是全然没有问题的.可是对于APP的性能測试.压力測试等高端的測试.还是存在着美中 ...
随机推荐
- elk 分布式数据同步
zjtest7-redis:/elk/elasticsearch/data/es_cluster/nodes/0/indices/library# strings ./1/index/_3.cfs | ...
- POJ-1006 Biorhythms
[题目描述] 三个周期时间分别为:23,28和33.分别给定三个周期的某一天(不一定是第一天),和开始计算的日期,输出下一个triple peak. [思路分析] 如果不了解中国剩余定理,可以通过模拟 ...
- File,FileInputStream,FileReader,InputStreamReader,BufferedReader 的使用和区别
1 ) File 类介绍 File 类封装了对用户机器的文件系统进行操作的功能.例如,可以用 File 类获得文件上次修改的时间移动, 或者对文件进行删除.重命名.换句话说,流类关注的是文件内容,而 ...
- 【解答】关于内核中没开MMU之前的虚拟地址物理地址转换问题
1. 内核没开MMU之前有虚拟地址吗?没有MMU哪来的虚拟地址? 答:有,由于载入时地址和执行时地址不同导致的没打开MMU之前也会有虚实地址问题. 2. 载入时地址和执行时地址什么差别.为什么有这样的 ...
- JavaSript模块化 && AMD CMD 详解.....
模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理.模块化是一种处理复杂系统分解为代码结构更合理,可维护性更高的可管理的模块的方式.可以想象一个巨大 ...
- js动画学习(三)
五.多物体变宽 这里面要注意由于物体变多了,需要给每个物体各配备一个定时器,否则如果只有一个定时器的话,当鼠标在不同物体之间快速滑动时,不同的物体就会出现争抢的现象.所以timer前要加obj. fu ...
- JS 排列组合
function $CL(arr, n, noLC, arrDan) { //从arr中取n个组合,然后 var r = [], sum = 0; n = n - arrDan.length; (fu ...
- Enze fifth day(循环语句2)
又是新的一周开始了,我还在云和学院继续学习.因为想要急切的想学会更多的知识,所以我有些急.可是我越急就越容易出错,这应该就是所谓的欲速则不达吧.这一周,我要重新把控好自己的一切,尽我最大的努力来学习! ...
- Informatica 9.5.1 安装配置
Informatica 结构 1个或多个资源库(Respository) PowerCenter数据整合引擎是基于元数据驱动的,提供了基于数据驱动的元数据知识库(Repository),该元数据知识 ...
- iOS开发针对SQL语句的封装
1.使用依赖关系 a.需要添加libsqlite3.tbd 静态库. b.需要添加第三方框架 FMBD.MJExtension. 2. SQL语句类封装名DataBaseSqlTool 类方法介绍 ...