现在可以使用google提供的battery-historian来测试,适用条件:5.0及以上手机。
battery-historian链接:google/battery-historian

android吧
所以的android都自带的功能
设置--->电池/电源管理/

MQC在兼容性测试、功能测试、稳定性测试中都提供了耗电量的测量,可以来MQC交流群来讨论。

附上MQC的功能简介:

自上次MQC发布功能测试和安全测试以来,已经过了几个月的时间。MQC的5大功能(兼容性测试、 稳定性测试、H5测试、功能测试、安全测试)从不同的测试维度帮助更多开发者关注并提高了App的质量。在此期间,来自五湖四海的小伙伴给我们提出很多建议与意见,每一个idea都是棒棒哒,也希望更多的小伙伴能给我们多多提建议。MQC的同学们也在此期间加班加点,再次为所有小伙伴们奉上了精心打造的一大波新功能。

1. H5测试

H5测试自上次发布以来,就帮助开发者解决了H5应用最头痛的性能问题。这次,我们对H5测试又进行了重大升级,鸟枪换炮,简直酷炫到没朋友~

新的H5测试增加了更多的性能指标,达到了13项,分别是:HTTP请求数、首资源时间、首次渲染时间、首屏时间、资源加载时间、失败资源数、网页大小、DOM节点数、重定向次数、域名数、CPU占用、内存占用、FPS。

2. 场景测试

场景测试,顾名思义,就是在特定场景下测试。通过MQC的场景测试,您可以轻松创造出不同场景条件,给App制造成分不同的“土壤”,然后看“秧苗”是否能健康成长。场景测试现支持6大场景,包括网络、屏幕、电话呼入、CPU、内存、电量,每一项场景条件您都可以随意控制。

为了使场景测试达到最好的效果,我们将场景测试结合到稳定性测试中。结合场景测试后的稳定性测试,将是您测试App的标杆。不要犹豫了,赶快到稳定性测试测起来。

3. 性能测试

MQC的性能测试可以帮助您测试App的各类性能缺陷,我们会为您绘制一张App使用过程中的性能曲线图,包括CPU、内存、流量、FPS、电量、启动时间在内的6类性能数据尽收眼底。您可以轻轻松松的看到每类性能数据的走势,波峰波谷之间可能就隐藏着您想要找的性能瓶颈。

性能测试现在已经集成到兼容性测试和功能测试中,提交您的App,来MQC体验一下吧。

4. 远程真机租用

远程真机租用,虽然叫租用,其实并不收您一分钱,MQC从来都是如此的傲娇。通过真机租用,您可以在浏览器里轻松连接远端的设备,然后可以安装您的应用,打开日志进行复现了。您在浏览器的所有操作,都会快速、实时的与远端设备同步,仿佛设备在手边一般。

5. 厂商专区

厂商专区是MQC和一些厂商合力推出的一个新功能。厂商会提供一些自己品牌下的设备,这些设备包括还未发布的型号,当然也有热门终端。开发者可以在MQC上使用这些终端进行长达30分钟的兼容性测试。这样,就能保证您的应用能够在更“广阔”的终端平台上任性翱翔。

目前厂商专区入驻一家芯片厂商:intel,一家手机厂商:魅族,后续会有更多的品牌入驻。您可以在X86架构的手机、平板,以及越来越多的魅族手机上进行测试了,行动起来吧!

6. 联系我们

网站地址:MQC 阿里移动质量中心

开发者交流旺旺群:335334143

​ 客服邮箱:mqc_group@service.alibaba.com

欢迎关注我们的微信公众号:alibaba-mqc

腾讯有一个很好用的工具,可以支持云端测试App/手游在运行过程中,实时查看耗电量、流量:

测试结束后,还可以拿到测试报告,报告中会有测试过程中的详细耗电量、流量数据,以及运行日志。

工具链接:http://wetest.qq.com/cloud/phone/step2?test=batt&from=content_zhihu

有免费额度,可以试试

另外,腾讯WeTest上面还有兼容性测试、远程调试、客户端性能测试、服务器性能测试等多种工具。感兴趣可以试一下~

APP耗电,导致电池续航能力不佳,如下图,在小米MIX2和iPhone X机型上后台静默一小时各应用的耗电排行:

基本概念

相对于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、各部件单位时耗电:各部件单位时耗电信息保存在power_profile.xml文件中,如下图(以魅族MX6为例):

2、运行时长

电量(mAh)=各部件单位时耗电量(mA)*各部件运行时长(h)

数据获取

测试环境

1、恢复出厂设置,排除其他APP对耗电的影响,减少干扰因素;

2、测试过程中,不出现充电情况;

3、Android 5.0 以上的设备;

4、通过wifi连接电脑和手机;

adb tcpip 5555
adb connect 192.168.1.101 (Android设备IP地址)

测试步骤

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分钟传感器数据, 然后关闭传感器数据采集。

通过标准

最佳实践

附:iOS耗电量测试

上面主要是讲的关于Android的耗电量测试方法及分析,当然思路是一样的,关于iOS的耗电量测试由于还没有具体的数据,这里给出一些我调研尝试过的一些方法:

1、系统接口

iOS 10系统内置的Setting里可以查看各个APP的电池消耗,系统接口能获取到整体的电池利用率,以及充电状态。

该方案不能检测固定某一时间段内的电池精准消耗。

2、硬件检测

通过硬件PowerMonitor可以精准地获得应用的电量消耗。

步骤如下:

a. 拆开iOS设备的外壳,找到电池后面的电源针脚

b. 连接电源监控器的设备针脚

c. 运行应用

d. 测量电量消耗

该方案成本太高并不适合我们的测试工作。

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面板

该方案作为性能测试的补充方案具有较高的权威性,但输出的数据不直观,用于功耗测试的效果并不理想。

4、使用Battery Life进行功耗测试

Android耗电量采集及简单分析

耗电数据采集

Android系统提供dumsys工具用于数据采集,该采集行为是机器单方面的行为,不需要依赖第三方的辅助。
采集步骤如下:

Setup1.

打开开发者模式,手机通过usb接入电脑,并在终端执行如下命令

adb shell dumpsys batterystats --enable full-wake-history

该命令行的作用是打开全量采集wakelock(唤醒锁)数据开关,有利于全面观测分析数据;默认情况下该开关为关闭,不采集wakelock数据。

Setup2.

清空历史采集数据,在终端输入如下命令

adb shell dumpsys batterystats --reset

Setup3.

拔出USB。主要有如下两个原因:
1.手机连接USB接口处于充电状态,不能真实反应app耗电量
2.batterystats是系统级别指令,会一直记录数据,且只记录最后一次充满电后的记录,因此一直连接USB采集的数据可能被覆盖

Setup4.

执行电量测试用例,业务强相关。建议测试过程中关闭其他手机app,测试时间为30分钟,时间过长导出的日志文件过大(20M以上)

Setup5.

导出电量采集数据,在终端输入如下命令:

adb bugreport > filename.txt

Setup6.

关闭全量记录wakelock数据,终端输入如下命令:

adb shell dumpsys batterystats --disable full-wake-history

保持全量记录wakelock数据,会影响手机性能,建议关闭。
至此完成了电量数据采集。

耗电数据展示

耗电数据展示采用Battery Historian,及处理导出的 filename.txt电量采集数据。
git地址如下:https://github.com/google/battery-historian
Battery Historian是由Google提供的查看电量相关信息及事件的工具,适用与android5.0(API level 21)及以上系统。该工具能够让程序开发者在时间轴上可视化系统和app级别事件,具体包括查看设备上次充满电后的各种统计信息,选择应用程序并检查影响电池的指标等。

在第一代Battery Historian中,Google使用的python作为解析工具,将日志文件转化为可视化的html文件。由于是第一代产品不论是在功能性,还是使用便捷度都存在一定的问题。因此在第二代Battery Historian,google 选择了使用 docker 容器。本文使用第二代的Battery Historian。

下文将介绍如何搭建第二代的Battery Historian环境。

Setup1.

下载安装docker,Mac环境下载地址如下
https://store.docker.com/editions/community/docker-ce-desktop-mac
下载并启动docker。

Setup2.

终端输入下列命令:

docker run -p 9998:9999 gcr.io/android-battery-historian:2.1 --port 9999

第一次安装需要花一定时间安装相关的依赖,如果成功,将输出如下信息:

2017/06/20 02:51:46 Listening on port:  9999

Setup3.

访问127.0.0.1:9998,如下图

1.jpg

Setup4.

倒入耗电采集文件,展示如下:

2.jpg

耗电采集分析

使用Battery Historian展示耗电数据日志,接下来就是如何分析数据。
1.选择目标app及相关数据展示,在App Selection中通过name选择测试app

1.jpg

2.选择测试app,可以过滤掉其他app的相关数据,如下图:

1.jpg

我们能得到那些有用的数据呢?
1.app的耗电基本信息,如下图:

1.jpg

Device estimated power use:app的在测试时间内耗电量
Foreground:app在前台的运行时间

2.app的流量信息,如下图:

1.jpg

Wifi data transferred:Wi-Fi的流量
Mobile packets transferred:手机流量
Wifi packets transferred:Wi-Fi的数据包个数
Mobile active time:手机的数据包个数

3.wakelock唤醒锁信息

1.jpg

这块和业务强相关,一般指的是后台运行的任务。如阅读屏幕常亮,后台下载等场景。

4.服务信息

1.jpg

服务信息,可以查看app开启的services信息。

5.进程信息

1.jpg

经常信息,如图app有三个进程,分别是应用本身的进程,私信进程,push进程

6.网络信息

1.jpg

如图红色区域,反应了测试过程中的网络变化,绿色表示网络优,橘黄色表示网络弱

7.手机温度

1.jpg

反应测试阶段手机的温度,颜色约深温度越高

8.电量变化趋势

1.jpg

如红色区域,蓝色点越密集,表明该时间阶段耗电较大

作者:龙猫六六
链接:https://www.jianshu.com/p/6b2c1110accb
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

如何测试Android APP的耗电量?相关推荐

  1. 利用Android adb命令来测试手机App的耗电量

    使用Android adb命令实现wifi方式连接手机 因为要通过adb命令来监控手机的耗电量,所以建议通过wifi的方式来连接手机,而不是用usb线来连接手机设备.usb方式连接手机会自动给手机充电 ...

  2. 教你如何在Android Studio中使用DDMS工具查看logcat——移动测试Android app(app的性能监控与测试)

    DDMS 一.什么是DDMS 二.在Android Studio如何打开DDMS 三.生成测试报告 https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢 ...

  3. android app 渗透测试,android app渗透测试方法大全.pdf

    Android APP 渗透测试方法大全 by backlion 一.Android APP 渗透测试方法 1.测试环境 SDK : J a JDK , Android SDK. 工具: 7zip, ...

  4. android 的弱网测试,Android APP弱网测试问题和解决分析

    最近做了一次移动APP的弱网和中断测试,接下来分享一下遇到的一些问题: 1.现象:用户登录应用时下载初始化数据,下载过程中因网速太慢点击取消并重新登录,数据初始化完成后出现重复,造成数据不一致. 原因 ...

  5. android app电量分析,如何计算android app的耗电量?

    使用adb工具,您可以查看每个正在运行的应用的功耗 adb shell dumpsys cpuinfo 样本输出 Load: 1.12 / 1.07 / 1.01 CPU usage from 113 ...

  6. Android APP性能及专项测试(个人整理)

    Android性能测试分为两类: 1.一类为rom版本(系统)的性能测试 2.一类为应用app的性能测试 Android的app性能测试包括的测试项比如: 1.资源消耗 2.内存泄露 3.电量功耗 4 ...

  7. Android APP性能及专项测试(学习笔记)

    1. 性能测试 Android性能测试分为两类: 1.一类为rom版本(系统)的性能测试 2.一类为应用app的性能测试 Android的app性能测试包括的测试项比如: 1.资源消耗 2.内存泄露 ...

  8. Android app 性能测试以及专项测试

    1. 性能测试 Android性能测试分为两类: 1.一类为rom版本(系统)的性能测试 2.一类为应用app的性能测试 Android的app性能测试包括的测试项比如: 1.资源消耗 2.内存泄露 ...

  9. Android APP性能及专项测试

    Android篇 1. 性能测试 Android性能测试分为两类: 1.一类为rom版本(系统)的性能测试 2.一类为应用app的性能测试 Android的app性能测试包括的测试项比如: 1.资源消 ...

最新文章

  1. Windows7无法访问共享文件夹(0x800704cf,0x80070035)解决方法
  2. [云炬创业管理笔记]第九章为创业成败而准备测试5
  3. Windows消息机制详解-5
  4. 使用C和汇编实现一个加法操作
  5. windows7正版验证_Windows7 寿终正寝:那些一并消逝的软件你知多少?
  6. python数字位数重排_Python面试题:给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数...
  7. centos中安装、升级git
  8. Myeclipse8.6安装freemarker插件
  9. 使用brew安装composer
  10. cocos2dx 3.x(移动修改精灵坐标MoveTo与MoveBy)
  11. python编写agent_python实现Agent守护进程
  12. [Python]更改图片底色
  13. (OK) 国内常用NTP服务器地址及IP
  14. 小米 13 系列新品发布会将延期举行;马斯克:和苹果的误解得到了解决;IntelliJ IDEA 2022.3 发布|极客头条
  15. 如何解决在线医疗语音问诊的技术难题 | 以眩晕问诊为例
  16. XTUOJ-1271-color
  17. ~杂记(3):los_dispatch.s和startup.s的作用分析
  18. 常见实用网站集合(行业研究/政策研究/学习/办公/设计/编程)
  19. Java Exception最佳实践
  20. 几种能量及能量平衡方程

热门文章

  1. jquery 文字无缝滚动
  2. c++ primer 第3章 思维导图 一边看书一边写
  3. 路由和远程访问服务(RRAS)的事件ID列表
  4. Pyhton中用pandas解决excel中身份证号不全问题
  5. Python计算机视觉——照相机标定
  6. 5款用起来超级顺手的十六进制编辑器
  7. 丝路英雄批量辅助更新记录
  8. 外贸中常见的十三种交货方式
  9. JavaScript 中的内置对象——0606、0607笔记整理
  10. XenServer假死状态