专栏首页QA一隅APP性能测试—功耗测试

APP性能测试—功耗测试

功耗

功耗,通俗的理解即电流通过导体使设备运行,导体本身的电阻将电能转换为热能的过程,因此,通常功耗测试也叫电量测试。

耗电量测试是指测试App在运行过程中消耗的能量。设备运行期间消耗能量公式:W = w * t = U * I * t

  • w表示单位时间耗电量
  • U为电池供电电压
  • I为电流值
  • t为测试时间 通常来说U可以认为不变,对于平稳的测试过程,耗电量与测试时间成正比。

移动设备功耗

由于移动设备的电池容量限制,所以对于App的功耗也是需要考虑的一个方面。Android的很多特性都比较耗电(如屏幕、GPSsensor传感器、唤醒机制wakelockCPU、连网等等),我们必须要慎重检查APP的电量使用,以免导致用户手机过度耗电发热,带来不良体验。

主要的耗电场景有:

  • screen:屏幕显示画面会耗电。
  • cpu:复杂的运算逻辑、死循环等会直接导致CPU负载过高,会导致耗电;
  • wakelock:唤醒锁,只要有应用拿到wakelock这个锁,系统就无法进入睡眠状态。频繁wakelock或者申请了wakelock没有释放,会导致耗电;
  • wifiscanwifilockwifiscanwifilock也会导致手机的wifi模块处于激活状态,频繁的wifiscan或者wifilock不释放,会导致耗电;
  • sensor:传感器打开后会导致系统持续监听设备外围环境的数据变化,使用后不及时关闭,会导致耗电;
  • network:大量的数据传输,或者长时间的移动网络数据传输会导致耗电;
  • gpsgps也是一种传感器,定位中完成后没有及时关闭,会导致耗电。

Android功耗

目前很多定制Android 系统支持查看App耗电量查看,如下图所示是魅族Flyme系统的应用电量消耗图。

Android 电量测试

API

按照Android 系统规则,设备制造商必须在/frameworks/base/core/res/res/xml/power_profile.xml中提供组件的电源配置文件,该配置文件定义了每个耗电项的具体计算单位,内容样例可以点击查看 power_profile.xml

但是从Android 4.4开始系统电量权限做了严格的限制,随着现在系统版本越来越高,使用API获取电量不太现实。

硬件工具

基于基于硬件的测试方案,使用用电量表来测试手机耗电量。该方法优点是测试比较精准,同样缺点也很明显缺点:采购成本高,测试的是整个手机,不是被测APP,测试时要减少系统本身和其他app的干扰。得到数值无法直接参考,不知道合理还是偏高。不能给出进一步参考,比如具体哪个app方面消耗电量比较多。

batterystats

使用dumpsys batterystats 命令可用来生成关于设备电池使用情况的统计数据,这些数据按唯一用户 ID (UID) 进行整理。统计信息包括以下内容:

  • 电池相关事件的历史记录
  • 设备的全局统计信息
  • 每个UID 和系统组件的大致用电量
  • 单个应用的每个数据包占用的移动网络毫秒数
  • 系统 UID汇总统计信息
  • 应用 UID 汇总统计信息

bugreport

Android为了方便开发人员分析整个系统平台和某个App在运行一段时间之内的所有信息,专门开发了bugreport工具。输入命令adb bugreport [filepath]/即可执行信息采集,并生成zip或者txt文件格式的数据文件。

Battery Historian

Batterystats 是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用 adb 将收集的电池数据转储到PC,并创建一份可使用分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的 HTML报告。

注意:要使用 BatterystatsBattery Historian,您需要一台搭载 Android 5.0 或更高版本且启用了 USB 调试功能的移动设备。

电量数据收集

  1. 收集电池的历史数据
λ adb shell dumpsys batterystats --enable full-wake-history
Enabled: full-wake-history
  1. 重置电池数据
adb shell dumpsys batterystats --reset
Battery stats reset.
  1. 断开设备与电脑的连接,以便只从设备的电池中消耗电流,然后执行指定的App进行相关操作。
  2. 使用命令adb bugreport导出电量信息结果,这里需要注意的是Android 7.0以上系统版本和Android 7.0以下命令不同。
  • Android 7.0以上系统版本:
adb bugreport C:\Users\Shuqing\Desktop\bugreport.zip
/data/user_de/0/com.android.shell/files/bugreports/bugreport-meizu_M1822_...-01-44.zip: 1 file pulled, 0 skipped. 15.4 MB/s (3393069 bytes in 0.210s)
  • Android 7.0以下系统版本

获取bugreport信息(记录了从开机之后详细的dumpsys,dumpstatelogcat信息)

adb bugreport > [path]bugreport.txt
    

获取dumpsys信息(获取系统信息:比如内存CPU,accounts,activities,wifi等信息)

adb shell dumpsys batterystats > 存放的电脑地址/batterystats.txt

或者获取指定的应用程序的dumpsys信息:

adb shell dumpsys batterystats > 包名 > 存放的电脑地址/batterystats.txt

电量数据解析

Battery Historian 一款由Google提供的Android系统电量分析工具,从手机中导出bugreport文件上传至页面,在网页中生成详细的图表数据来展示手机上各模块电量消耗过程,最后通过App数据的分析制定出相关的电量优化的方法。

  1. 使用Battery Historian需要在本地安装,最简单的方法使用docker安装,然后执行如下命令。
docker run -d -p 9999:9999 bhaavan/battery-historian

执行完成后使用浏览器打开链接:http://localhost(IP):9999 即可看到Battery Historian界面。

注意

上传生成的报告文件然后点击submit提交即可。原因是因为web某些资源没有加载出来,其中的一些资源需要访问Google服务器,但是这些资源被墙了,无法访问。只要解决了墙的问题,submit的问题也就迎刃而解了。

如果不想在本地搭建环境,那么可以访问在线的解析平台:https://bathist.ef.lc/ (网站可能打不开,原因你懂的)

查看整体电量数据

上传数据解析之后如下图所示,可以查看到详细数据展示。

  • 横坐标是一个时间范围。以重置为起点,获取bugreport内容时刻为终点。坐标的间隔,会随着时间的长度发生改变。
  • 纵坐标是消耗电量的具体内属性。
  • 黑色曲线是测试过程中整体的电量信息。将Show bars的勾选去掉可以只展示该曲线。

重点参数说明:

  • battery_level:剩余电量,可以看出电量的变化。
  • plugged:充电状态,这一栏显示是否进行充电,以及充电的时间范围。
  • Longwakelock:该属性记录了长时间使设备保持唤醒的进程。
  • screen:屏幕是否点亮。可以用于考虑睡眠状态和点亮状态下电量的使用信息。
  • top app:该栏显示当前时刻哪个app处于最上层,就是当前手机运行的app。用来判断某个app对手机电量的影响。
  • Coulomb charge电量消耗值,单位毫安时mAh
  • Temperature 电池温度。
  • discharge rate 放电率,是表示电池放电快慢的一种度量。

查看单个进程电量消耗数据

在App Selection中选择指定的App进程,即可查看该进程的耗电数据。

iOS功耗测试

Energy Log

启动Instruments,选择你的设备和要检测的app,打开Energy Log,如下图所示:(充电然后进行电量测试不合理)

选择设备和应用进行执行之后可以查看到电量消耗情况

iOS电量测试

1.打开设置-开发者-Logging

  1. 打开Energy,然后点击开始录制。
  1. 执行应用操作
  2. 完成后,返回“设置”>“开发者”>“Logging”,然后点击“stop recording”。
  1. 连接设备,打开instrument,启动Energy Log,从设备导入数据。
  1. 导入完成后即可查看数据信息。

本文分享自微信公众号 - QA一隅(sutune2020),作者:Sutune

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-01-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • APP性能测试—启动耗时

    应用启动是整个App工序的第一道流程。对于开发者,一般需要在应用启动过程中进行初始化工作,启动页的UI展示。而对于用户来说,启动速度的快慢则极大地影响了使用体验...

    清风穆云
  • APP性能测试—网络测试

    当前APP网络环境比较复杂,移动运营商网络有2G、3G、4G、5G网络,甚至未来的6G网络,以及越来越多的公共Wi-Fi。不同的网络环境和网络制式的差异,都会对...

    清风穆云
  • APP专项测试之耗电量测试

    Hi,大家好。随着应用市场不断推陈出新,用户在使用APP时更加关注电量问题。如果自己的App不小心出现在耗电量排行榜Top10,用户卸载的概率就会很高,针对AP...

    ITester软件测试小栈
  • APP性能测试—PerfDog

    PerfDog是一个移动全平台Android/iOS性能测试、分析工具。可以快速定位分析性能问题。手机无需ROOT/越狱,手机硬件、游戏及应用APP也无需做任何...

    清风穆云
  • APP功能测试要点

    app测试一般要关注的功能测试、兼容测试、流量测试、耗电量测试、性能测试、安全测试、网络测试、稳定性测试等。

    吾非同
  • 移动APP测试之android性能测试

      当应用实现了新功能后,准备发布版本前,必须进行性能测试以确定没有性能问题,内存使用情况便是其中必须要测试的性能之一。由于内存组成的复杂性,并没有简单通用的方...

    小老鼠
  • app功能测试--需要测试哪些要点

    每个app安装需要测试哪些方面?APP安装除去每个产品和版本不同的业务需求以及功能,针对于大多数APP的共同点和移动设备的特性,本文总结了一些APP功能测试中经...

    迷上了微笑
  • APP性能测试—帧率

    无论是手机端还是PC端,画面的流畅度一直被用户视为衡量应用视觉体验的重要标准。而对开发者来说,帧率(FPS)通常作为衡量应用是否流畅的标准。

    清风穆云
  • 功能测试与非功能测试

    它测试了被测软件的行为。根据客户的需求,称为软件规范或需求规范的文档将用作测试应用程序的指南。

    用户7466307
  • 功能测试与非功能测试

    进行功能测试以确保应用程序的功能符合需求规范。这是黑盒测试,不涉及应用程序源代码的详细信息。在执行功能测试时,重点应放在应用程序主要功能的用户友好性上。要首先执...

    FunTester
  • Android 性能测试之 CPU 耗电性能篇

    现有的耗电性能测试,除了高端深入带着原理去测试的方法,大多数都是读取系统文件或采用工具获取整体手机电流值,这样的方法受影响的因素多,数据波动大,可信度不高,同时...

    陈帅
  • APP性能测试方便了

    可能很多人都不是做APP开发的,但这个工具非常有用,可以推荐给做APP的朋友,一定会帮到他 腾讯开源了一个APP调试平台 - GT GT(简称随身调)是可以直...

    dys
  • 功能测试之app测试要点提取与分析

      根据需求编写测试用例,执行测试。单个功能(等价类、边界值、正常和异常)和交互功能。注意:功能测试点提取和用例设计方法都跟web测试一致,但是APP有-一些自...

    小老鼠
  • APP兼容性测试如何测试?

    随着 APP 应用范围越来越广,用户群体越来越大,终端设备的型号也越来越多,移动终端碎片化加剧,使得 APP兼容性测试成为测试质量保障必须要考虑的环节。

    ITester软件测试小栈
  • 测试面试说之功能测试

    随着IT技术日新月异,各种应用程序、APP层出不穷,软件测试这个行业也在不断发展壮大,这就要求我们不再满足简单的点点点的功能测试,而转向更深层次的测试之路的探索...

    muntainyang
  • Android APP性能及专项测试

    1、运行Monkey进行压力测试: adb shell monkey -p cn.microinvestment.weitou --pct-touch 100 ...

    测试开发社区
  • App性能测试—CPU使用率

    CPU使用率是性能测试是一项重要指标,CPU占用过高会使得设备运行程序出现卡顿与发热,甚至出现应用程序Crash,影响用户体验。在排除硬件环境的限制下,应用程序...

    清风穆云
  • APP性能测试—过度绘制

    过度绘制就是在同一个区域中叠加了多个控件,也就是说一个像素点上会出现多个像素的叠加,实际上呈现在我们眼前的只是最上面的一个。

    清风穆云
  • 性能测试篇:入门性能测试

    性能测试一直是测试行业中比较难的一块,含金量比较高,工作经验越多工资越高,而且最近很多招聘中初级测试都要求会性能测试,要求越来越高了,那我们就一起学习性能测试吧...

    小雯子打豆豆

扫码关注云+社区

领取腾讯云代金券