如何测试Android APP的耗电量?

2023-11-16

现在可以使用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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何测试Android APP的耗电量? 的相关文章

  • 春秋云镜 CVE-2022-0410

    春秋云镜 CVE 2022 0410 WordPress plugin The WP Visitor Statistics SQLI 靶标介绍 WordPress plugin The WP Visitor Statistics Real

随机推荐

  • Mysql精华总结01——架构、存储引擎和数据类型

    一 Mysql架构 和其它数据库相比 MySQL有点与众不同 它的架构可以在多种不同场景中应用并发挥良好作用 主要体现在存储引擎的架构上 插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离 这种架构可以根据业务的需求和实
  • 显卡RTX2080 + CUDA10 + win10 + tensorflow配置安装探坑记

    步骤主要参考该博客https blog csdn net mayunhe cs article details 87216299 结合自己探坑经历记录了具体过程 1 安装显卡驱动 先是在微星官网上下载对应显卡的驱动 不知道为啥给的是nvid
  • 前端学习--常用PS方法

    本文使用的软件为ps CC 2019 1 切图 1 打开一张psd文件 2 取消背景色 3 选择切片工具 4 按住 CTRL 键进行切图 切完后自行调整切图宽高 当切好第一张图后同时按住 CTRL 和 ALT 可按照的第一张切图的宽高进行第
  • Redis主从复制失败(master_link_status:down)

    Redis配置主从复制时遇到这个问题 先确认配置文件没有不对后开始苦恼 在网上查这个问题发现说的都一样 根据网上的再排查配置文件还是没有问题 又确认了不是防火墙的问题 陷入了更大的苦恼 后来看到了stackoverflow上一个评论 意识到
  • 数据库设计-简化字典表

    在进行数据库设计时 我们经常会遇到各种各样的业务需求 从而设计出各种各样的表 而想要做好一个数据库 不但需要前期对各种业务需求的深度理解 还需要在后期项目完善的过程中对数据库更新修改从而使得数据库设计的越发完美 对于那些涉及到业务的表或许不
  • 我希望在 25 岁时知道的14件事(现在我已经 38 岁了)

    我在 38 岁生日后不久写作 是反思的时候了 我不得不把我现在所知道的一点点传递出去 1 专注于变得有用 所有这些关于寻找快乐和做你热衷的事情都是一种分心 专注于建立你对世界的价值 当然 首先要尝试很多东西 然后逐渐开始专注于在更少的事情上
  • Dubbo架构整体设计

    一 Dubbo调用关系说明 1 1 组成部分 在这里主要由四部分组成 Provider 暴露服务的服务提供方 Protocol 负责提供者和消费者之间的协议交互数据 Service 真实的业务服务信息 可以理解成接口和实现 Containe
  • 神经网络综述

    本文指在介绍机器学习中的神经网络的多种变种 包括简单的代码实现及优缺点并尽量不涉及到公式 希望能给阅读者建立起一个关于神经网络的综合概念 因此 本文会涉及到一点神经网络的原理但不会太深入以致于读者迷失在其中而无法得到一个全局性的概念 另外
  • SQLServer2019安装教程

    可以去官网下载 我百度网盘也有都一样 https pan baidu com s 1i3umqHXSUMbxJ9rRi6mU4A 提取码 5g9q 打开应用程序 点击安装 点第一个全新得SQL server独立安装 下一步 在这一步可能有需
  • TCP-IP详解:超时重传机制

    参考教材 TCP IP Guide 超时重传是TCP保证数据传输可靠性的又一大措施 本文主要介绍重传TCP报文的两大举措 超时重传和快速重传 超时重传机制 超时重传指的是 发送数据包在一定的时间周期内没有收到相应的ACK 等待一定的时间 超
  • 几款好用的指纹识别工具

    几款好用的指纹识别工具 在web渗透过程中 对站点进行指纹探测识别非常重要 了解网站所用的web框架或者cms可以为后续的渗透提供思路和突破口 这篇文章主要用于总结几款我平时工作中经常使用的指纹识别工具 一 whatweb whatweb是
  • Python Requests使用Cookie的几种方式

    本文主要给大家介绍了关于Python Requests使用Cookie的几种方式 Python中的requests库可以使用cookie来维持会话状态 实现登录等操作 需要的朋友可以参考下 一 通过headers参数使用 通过headers
  • c语言实现字符串的指定位置删除

    要求 任意输入一串字符串 指定要删除的位置 并输入要删除指定位置后字符的个数 实现代码如下 include
  • el-table绑定的数组里面的对象值进行修改时,视图没有更新

    在Vue js中 如果您在对绑定到el table的数组里面的对象值进行修改后发现视图没有更新 可能是因为Vue js无法检测到数据的变化 解决这个问题的方法有以下几种 使用Vue set 方法显式地告诉Vue js数据已经发生了变化 例如
  • GNN等优缺点总结及解决方案

    https www zhihu com question 338051122 https www zhihu com question 346942899 https zhuanlan zhihu com p 291230435 GCN的缺
  • STM32实现MLX90614非接触测温串口显示(标准库与HAL库实现)

    目录 模块选择 编程环境 MLX90614基本原理 通信协议 SMBus通信 类IIC通信 代码实现 STM32与模块之间接线表 1 标准库实现温度采集 2 HAL库实现温度采集 模块选择 STM32F103C8T6 MLX90614 非接
  • 多目标跟踪问题

    A Baseline for 3D Multi Object Tracking 三维多目标跟踪 原文地址 https arxiv org pdf 1907 03961v4 pdf 用到的基础知识 卡尔曼滤波 和 匈牙利算法 匈牙利算法用来求
  • weex<==>nvue书写样式需要注意的点(全部)

    weex书写步骤 全局样式规划 将整个页面分割成合适的模块 flex 布局 排列和对齐页面模块 定位盒子 定位并设置偏移量 细节样式处理 增加特定的具体样式 1 通用样式 除此通用样式之外的属性 均不被支持 1 单位只支持px和wx 不受屏
  • 风起云涌,拓世法宝破茧而出!免费使用无限时长,领航数字人全新时代,你还在等什么?

    随着元宇宙概念的不断推进 数字化转型已经成为了时代的主流趋势 在这个背景下 虚拟数字人的发展迅速崭露头角 为各个行业带来了前所未有的应用机会 尤其是在短视频领域 由于短视频的流量和人力成本持续上升 数字人逐渐被企业视为一个新的探索方向 希望
  • 如何测试Android APP的耗电量?

    现在可以使用google提供的battery historian来测试 适用条件 5 0及以上手机 battery historian链接 google battery historian android吧 所以的android都自带的功能