鹅厂揭秘——高端大气的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的性能測试.压力測试等高端的測试.还是存在着美中 ...
随机推荐
- Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现
上一篇转载的博文里讲到了怎么开启状态栏透明的效果,不过如果在有ActionBar的情况下,会出现状态栏透明而ActionBar横亘在状态栏和内容之间的丑陋情况,如下图: 通过百度之后,发现了GitHu ...
- p2.js物理引擎学习
P2简介 P2是一款基于Javascript编写的HTML5 2D物理引擎,和Box2D.Nape等2D物理引擎一样,P2集成了各种复杂的物理公式和算法,可以帮助我们轻松的实现碰撞.反弹等物理现象的模 ...
- Objective-C浅拷贝和深拷贝
浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间 如: char* str = (char*)malloc(100);char* str2 = str; 浅拷贝只是对对象的简单拷贝 ...
- DMA(STM32)
1.DMA:data memory access //实际的内存存储 注:DMA干活的时候是不须要CPU干涉的 2. ①内存(定义的变量)---外设(寄存器). ②内存---内存 ③外设---外 ...
- android 中文 api (71) —— BluetoothServerSocket[蓝牙]
前言 本章内容是 android.bluetooth.BluetoothServerSocket,为Android蓝牙部分的章节翻译.服务器通讯套接字,与TCP ServerSocket类似.版本为 ...
- 高性能网站优化-创建快速响应的Web
<高性能网站建设进阶指南> 优化原则 优化的目的是希望降低程序的整体开销. 减少开销 通常认为开销就是程序的执行时间.而在进行优化工作时,应该把重点放在对程序开销影响最大的那部分. 假设我 ...
- IOS开发:UIAlertView使用
链接地址:http://www.2cto.com/kf/201307/231841.html UIAlertView是什么就不介绍了 1.基本用法 1 UIAlertView *view = [[UI ...
- Servlet乘法表学习笔记
一.控制台实现乘法表 package com.shanrengo; import java.io.IOException; import java.io.PrintWriter; import jav ...
- ViewFilpper
package com.example.suneyaenews; import java.util.ArrayList; import java.util.HashMap; import java.u ...
- 启动(Startup)
Startup Chrome是一个单一的可执行程序.它清楚如何运行其它进程. 下面是chrome启动的概述: 1. 首先,chrome有一个平台相关的入口点:在windows上是wWinMain(): ...