如何测试Android APP的耗电量?

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/57337.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

app耗电量测试

目录 目录 1. 引言 2. 测试方法 2.1. 直接观察 2.2. 使用adb命令进行统计 3. 典型的耗电场景 3.1. 定位 3.2. 网络传输 3.3. 音视频播放 4. app电量分析工具 4.1. Batterystats 4.2. Battery Historian 5. 环境安装 5.1. adb命令 5.2. 安装go 5.3. 安装git 5.4…

盘点COVID-19新冠药物和疫苗研发进展

COVID-19是由严重急性呼吸系统综合症冠状病毒2(SARS-CoV-2)引起的一种传染病,这是一种单股正链RNAβ冠状病毒,它是Beta-CoV谱系B( Sarbecovirus亚属)。 COVID-19代表着全球健康威胁,并且是可能引…

药物临床试验数据递交FDA的规定

信息来源: https://www.fda.gov/industry/fda-data-standards-advisory-board/study-data-standards-resources STUDY DATA TECHNICAL CONFORMANCE GUIDE v4.9 (March 2022) (研究数据技术一致性指南) 仅提取该文档中的部分内容加以翻译,以下中文都是…

姜敬哲/孙燕妮/原丽红合作开发可用于病毒快速分类的工具PhaGCN2

南海水产研究所姜敬哲团队、香港城市大学孙燕妮团队、广东药科大学原丽红合作开发的可用于病毒快速分类生信工具 使用PhaGCN2对病毒基因组片段分类 Virus classification for viral genomic fragments using PhaGCN2 文章链接:https://www.researchsquare.com/artic…

多组学在药物机制解析和诊断标志物开发中的应用

链接:多组学在药物机制解析和诊断标志物开发中的应用_哔哩哔哩_bilibili 药物研发流程和多组学前沿技术 药物研发流程遇到的挑战 流程:新药的发现——临床前研究——临床研究 挑战: 诊断是否清晰、机制是否明确、靶点是否可靠、药物是否有…

药物研发早期预测细胞毒性的解决方案

药物从设计到上市的整个研究阶段,毒性通常是导致研发失败的最主要原因。即使上市以后还有许多药物由于出现研发阶段未能发现的毒性而被撤市或严格限制使用。因此,如何及时、准确、快速地评价药物毒性便成为药物开发中的一个重要问题。 在体外快速的、高…

针对新冠病毒,盛普始终坚持多靶标协同的防治病毒药物研发

全球范围内的新冠确诊人数仍旧在增加,“特效治疗药”依然没有找到。凛冬已至,更适于病毒传播的寒冷高湿天气已经笼罩了半个地球。在一片阴霾的疫情当中,“希望之光”开始浮现,新冠疫苗和单一靶标的小分子药物开始被世界各国政府应急准入市场。这些疫苗和小分子药物依靠海量…

3CLpro蛋白酶抑制剂,如何靠实力进入新冠病毒诊疗方案

3月15日,国家卫健委发布《新型冠状病毒肺炎诊疗方案(试行第九版)》,在抗病毒治疗中,抗新冠病毒药物PF-07321332/利托那韦片(Paxlovid)被写入诊疗方案。Paxlovid是由两种抗病毒药物组成&#xff…

关于CV算法岗就业相关问题,精华回答分享

粉丝提问: 你好,看星球上做前端,后端,java 的人比较多,好像没有看到有多少人做算法,我现在已经毕业了,是一名 cv 算法工程师,但是我现在很苦恼,感觉自己代码能力很弱&am…

chatgpt赋能python:Python自动打开软件:实现轻松便捷的操作

Python自动打开软件:实现轻松便捷的操作 在许多工作场所,我们可能需要反复打开某个软件,费时费力。那么有没有一种方式能够轻松地自动打开特定软件呢?此时Python便是一个好帮手。PythonとWINDOWS关联性较强,可以方便地…

Golang/Python 调用 openAI 的API 详解

学习目标: OpenAI API介绍 学习如何通过 Golang 使用 OpenAI 的 API OpenAI 的常用的参数及其说明 了解OpenAI API 中令牌(tokens) OpenAI API 提供了几个不同的终端点(endpoints)和模式(modes) 复杂和…

我改了一行公共代码后,同事说要建个没我的小群

点击上方 前端Q,关注公众号 回复加群,加入前端Q技术交流群 嗨,大家好!这里是道长王jj~ 🎩🧙‍♂️ 今天我想和大家分享一个惨痛的教训,就是当我一意孤行地删掉一个看起来没用的配置文件时&#…

chatgpt赋能python:免费的Python教程:从入门到精通

免费的Python教程:从入门到精通 Python是如今最热门的编程语言之一,在众多编程语言中占据了重要的地位。Python有着简单易学的语法,充足的库支持,高效的执行速度和海量的社区支持,这些使得Python成为最适合初学者的编…

chatgpt赋能python:Python报错Module:从入门到精通

Python报错Module:从入门到精通 在Python编程中,我们经常会遇到各种各样的错误。其中,Module错误是最常见的一种。在这篇文章中,我们将深入探讨Python报错Module的各种原因和解决方法,并希望能够帮助那些遇到这种问题…

chatgpt赋能python:Python词汇大全:从入门到精通

Python词汇大全:从入门到精通 Python作为一门简洁易学的编程语言,已经成为了全球程序员的热门选择。在这篇文章中,我们将介绍Python的词汇大全,包括关键字、数据类型、内建函数、标准库、第三方库等内容,帮助读者更好…

chatgpt赋能python:Python的口头禅:从入门到精通

Python的口头禅:从入门到精通 什么是Python口头禅? Python是一门强大的编程语言,它不仅拥有简洁易读的语法,而且拥有着许多独特的语言特性。其中,Python口头禅是指程序员们在使用Python时最常用的,最经典…

chatgpt赋能python:Python要点:从入门到精通

Python要点:从入门到精通 Python是一门高级编程语言,是一种解释型、面向对象、动态数据类型的语言。它的设计思想是“代码易读易写”,在数据科学、人工智能、自动化测试、Web开发等领域广泛应用。本文将从入门到精通的角度来介绍Python的要点…

chatgpt赋能python:Python构造列表:从入门到精通

Python 构造列表:从入门到精通 Python是一种强大、可扩展、易于学习的编程语言。用Python编写代码的一个重要部分是构建列表,这是Python中最重要的数据结构之一。本文将深入探讨Python列表的构造方法,以帮助您更好地理解它们的概念和用途。 …