APP专项测试之耗电量测试

一、耗电量测试分析

相对于PC端来说,移动设备的电池电量是非常有限的,保持持久的续航能力尤为重要。Android的很多特性都比较耗电(如屏幕、GPS、sensor传感器、唤醒机制、CPU、连网等的使用),我们必须要慎重检查APP的电量使用,以免导致用户手机耗电发热,带来不良体验。

1、耗电场景

主要的耗电场景有:

  • cpu:复杂的运算逻辑、死循环等会直接导致CPU负载过高,会导致耗电;

  • wakelock:只要有应用拿到wakelock这个锁,系统就无法进入睡眠状态。频繁wakelock或者申请了wakelock没有释放,会导致耗电;

  • wifiscan和wifilock:wifiscan和wifilock也会导致手机的wifi模块处于激活状态,频繁的wifiscan或者wifilock不释放,会导致耗电;

  • sensor:传感器打开后会导致系统持续监听设备外围环境的数据变化,使用后不及时关闭,会导致耗电;

  • network:大量的数据传输,或者长时间的移动网络数据传输导致radio长期处于活跃状态,会导致耗电;

  • gps:gps也是一种传感器,定位中没有及时关闭,会导致耗电;

业务层面,用户最核心基础的模块:

  • 新增的基础逻辑,倘若入口明显,潜在较大访问,必须保证性能;

  • 活动需要,因为活动上新的逻辑,存在较大的用户访问,需尽力提升用户体验;

  • 反馈体验不好的模块。

2、耗电量测试

获取测试结果时我们要注意数据的有效性,避免数据误差,让数据更有效的说明问题,下面提供两种方法,来提高获取数据的有效性。

  • 横向对比法:分两步测试,第一步测量手机硬件运行消耗的电量;第二步测试手机硬件和软件运行综合的耗电量。最后将两次的耗电进行对比,得出软件消耗的电量大小;

  • 纵向对比法:同时进行两台手机,其中一台手机不运行软件,另一台手机运行软件;分别获得两台手机的耗电量,对比两台手机耗电量差异,得出软件消耗的电量大小。

这两种方法在测试上有一定的差异,很多应用软件都是需要移动网络的支持,而手机接收的网络信号是会随时间变化的。

  • 第一种方法的误差主要来源于手机在不同的基站网络下工作状态的变化。

  • 第二种方法的差异则体现在两台手机本身硬件消耗的电量可能存在差异,所以需要尽可能使用同一型号,同一批次的手机。

二、IOS端耗电量测试

1、常规测试法

(1)  测试方法

①选定测试场景及时长;

②手机充电,放电,手机电量达到预设值,每个场景开始前,保持电量都是这一电量,并且手机是室温;

③手机系统设置,一般关注蓝牙、定位、通知消息、音量、后台应用等等,都设置为预定的状态;

④记录剩余电量,开始执行测试,测试完毕后再记录一次剩余电量,电量差就是这个时长内的耗电量。

(2)  测试结果准确性

这样的测试方法,明显的耗电问题可以发现,比如一次测试掉电10%,但是一些不太明显的问题用这个方法无法发现。另外这种测试方法没有具体的数据,实用性不强。

 2、Energy Impact

(1)  测试方法

开发过程中,运行调试模式就可以在Xcode里直接查看Energy Impact。电量仪表盘上有3个区域,如果经常跑到红色区域那就该检讨下自己代码。下面的柱状图会告诉你耗电的组成部分:CPU,Network,Location,GPU,其中Overhead表示不是由App引起的耗电。如果有问题,可以进一步通过快捷入口打开Time Profile,Network Profile,Location Profile做进一步细致排查问题点。

(2)  测试结果准确性

利用Energy Impact测电量很简单,缺点就是必须连上真机,只适合开发人员;而且对于耗电只能给出定性,没有定量的显示。

 3、Sysdiagnose耗电量测试

Sysdiagnose是苹果的日志系统,Sysdiagnose很庞大,记录电池、第三方APP、各种系统功能和应用的所有运行情况。通过Sysdiagnose我们可以获取电量消耗,电压,电流,温度,甚至系统的 CPU、GPU 等等耗电都有详细的数据。而且不单单是自己的 App,手机内安装的其它的 APP 同样可以获取到数据,这样大大方便了我们做出详细的对比测试数据。

(1)  测试方法

①Sysdiagnose需要一个开发者账号,在苹果开发者官网Profiles and Logs下载证书BatteryLife.mobileconfig。

传送门:https://developer.apple.com/bug-reporting/profiles-and-logs/

 如下所示:

②将证书发送到手机(如airdrop方式),在手机上安装该证书,安装之后,手机不需要越狱也可以获得数据。

③手机端执行测试

测试前,手机端先充电到80%以上,充电完毕后拔出充电线,不做任何操作静置10min后开始执行场景;测试时需将屏幕亮度最低、蓝牙关闭、推送消息关闭、定位开启(在系统设置-隐私里开启)、音量最低、个人热点关闭、后台进程全关闭;

进入APP,根据测试用例设计的测试场景进行测试;

⚠️注意事项:

  • 电量测试如果是对比测试,两个版本的初始电量尽量保持一致;

  • 每个场景开始执行和结束时,记录开始和结束的时间,每个场景之间间隔1min(目前是一个场景操作10min); 

  • 测试时不能中途充电;

  • 同步数据,并导出电量数据文件

上一步操作完所有场景,测试完成后,手机静置约半小时(因为数据库写入会有延迟),然后手机连接电脑,同步数据;

同步完成后,导出需要的电量日志,导入日志地址方法如下:

Mac:

 打开Finder,按 CMD+SHIFT+G,并输入:

 Win:

C:\Users[Your_User_Name]\AppData\Roaming\Apple Computer\Logs\CrashReporter\MobileDevice\[Your_Device_Name]\

 ④在指定路径的文件夹内找到对应耗电量数据,耗电量数据一般是以powerlog开头,.PLSQL或着.PLSQL.gz结束,如下图所示:

⑤使用DB Browser for SQLite可以查看数据,打开powerlog数据库,切换到“浏览数据”tab,可以看到这个数据库中有许多表,如下所示: 

⑥测试结果分析

这些表中,和电量相关的几个重要的表的名字和作用如下:

其中最重要的表是PLBatteryAgent_EventBackward_Battery整机电量信息,每20s采集一次,在关闭其他app的情况下,可以近似的认为是所测app的耗电,表内容如下:

PLBatteryAgent_EventBackward_Battery 表中每一行最前面都有个 timestamp,这是用来记录每行电池状况记录的时间点(为 UnixTime格式,可以通过时间转换工具进行转换获取具体时间),因此可以根据记录的时间戳进行耗电量数据的提取,表中记录了对应时间戳的手机剩余电量,电压,电流(正数是在充电,负数是耗电),表中还有温度数据,可以反映测试期间手机的温度变化。

表中第二列是时间戳timestamp,第四列Rawlevel是对应时间点的电量值,统计电量时,通过测试场景开始和结束的具体时间点,找到对应Rawlevel的差值,即可计算出该测试场景的耗电量精确数据。

 三、Android端耗电量测试

1、 Battery Historian耗电量消耗

(1)  battery-historian服务搭建

①克隆安装包

git clone https://github.com/google/battery-historian.git

②下载battery-historian的代码和依赖

③修改setup.go文件的参数

值修改为:

因为版本不一样,编译会失败,所以升级到稳定版本。  

 ④切换到setup.go所在的目录,进行编译

⑤启动battery-historian服务 

go run cmd/battery-historian/battery-historian.go

 如下所示:

⑥验证是否安装成功

http://localhost:9999/,出现如下,则ok!

(2) 耗电量数据收集

①清理耗电量数据

②运行测试用例/手工操作

使用monkey或appium来操作想要被测试的Android应用,最好就持续测试。

③收集数据

Android 7.0以上版本使用的命令 :

Android 6.0 或以下使用的命令:

如下所示:

(3) 上传测试数据,分析测试结果

各参数意义:

  • battery_level: 电量,可以看出电量的变化

  • plugged: 充电状态,这一栏显示是否进行了充电,以及充电的时间范围。

  • Screen: 屏幕是否点亮,这一点可以考虑到睡眠状态和点亮状态下电量的使用信息。

  • Top: 该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app,用来判断某个app对手机电量的影响,这样也能判断出该app的耗电量信息。该栏记录了应用在某一个时刻启动,以及运行的时间,这对我们比对不同应用对性能的影响有很大的帮助。

  • wake_lock*: wake_lock该属性是记录wake_lock模块的工作时间。是否有停止的时候等。

  • running: 界面的状态,主要判断是否处于idle的状态。用来判断无操作状态下电量的消耗。

  • wake_lock_in: wake_lock有不同的组件,这个地方记录在某一个时刻,有哪些部件开始工作,以及工作的时间。

  • Gps: gps是否开启。

  • phone_in_call: 是否进行通话。

  • Sync: 是否跟后台同步。可以把鼠标停在某一项上面。可以看到何时sync同步启动的,持续时间Duration多久。电池容量不会显示单一行为消耗的具体电量,这里只能显示使用电池的频率和时长,你可以看分时段的剩余电量来了解具体消耗了多少电量。

  • Job: 后台的工作,比如服务service的运行。

  • data_conn: 数据连接方式的改变,上面的edge是说明采用的gprs的方式连接网络的。此数据可以看出手机是使用2g,3g,4g还是wifi进行数据交换的。这一栏可以看出不同的连接方式对电量使用的影响。

  • Status: 电池状态信息,有充电,放电,未充电,已充满,未知等不同状态。这一栏记录了电池状态的改变信息。

  • phone_signal_strength: 手机信号状态的改变。这一栏记录手机信号的强弱变化图,依次来判断手机信号对电量的影响。

  • Health: 电池健康状态的信息,这个信息一定程度上反映了这块电池使用了多长时间。这一栏记录电池状态在何时发生改变,上面的图中电池状态一直处于good状态。

  • Plug: 充电方式,usb或者插座,以及显示连接的时间。这一栏显示了不同的充电方式对电量使用的影响。

(4) 测试结果特性

优点:结果直观,有详细的耗电数据;

缺点:不支持5.0以下的android系统;

2、耗电量测试

 ①重启adb;

②使用adb devices查看手机是否连接上电脑;

③重置电池数据

④拔掉数据线,开始测试;

⑤测试完成后使用数据线连接电脑;

⑥收集电量数据;

 

⑦根据测试的包名找到对应的UID;

⑧根据uid查询电量消耗;

 

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

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

相关文章

如何测试Android APP的耗电量?

现在可以使用google提供的battery-historian来测试,适用条件:5.0及以上手机。 battery-historian链接:google/battery-historian android吧 所以的android都自带的功能 设置--->电池/电源管理/ MQC在兼容性测试、功能测试、稳定性测试中都…

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的要点…