此文已由做者杨晓受权网易云社区发布。
前端
欢迎访问网易云社区,了解更多网易技术产品运营经验。web
本文从做者所在项目进行的耗电量测试入手,介绍了移动端App耗电量测试的一些基本概念和方法,重点介绍了iOS应用的耗电量测试的一些实战经验。
算法
耗电量测试是指测试App在运行过程当中消耗的能量。设备运行期间消耗能量公式:
安全
W = w * t = U * I * t
网络
其中U为电池供电电压,I为电流值,t为测试时间。一般来讲U能够认为不变,所以Q = I * t(mAh)能够做为消耗能量的值。对于平稳的测试过程,耗电量与测试时间成正比,所以能够经过平均电流 I = Q / t来评价耗电量水平。
前端性能
电池电量几乎是移动设备最受限的资源,对于长期运行的App来讲,耗电量会直接决定电池的续航时间。所以App的耗电量也是移动端App性能的一个评价标准。
工具
尽管App的耗电量对移动设备影响巨大,可是并不是全部的App都须要进行耗电量测试。一般来讲,须要持续开启或后台运行的App,耗电量对设备续航时间的影响更为显著,才须要启动耗电量专项测试。
性能
一般而言,有需求进行耗电量测试的App都会有性能热点,如CPU或GPU计算量大,网络通讯频繁,长期调用摄像头等系统硬件,等等,也有可能兼而有之。
测试
一般电量测试的方法有以下几种:
优化
调用系统提供的Api对电量进行记录
在代码中插入获取电量信息的代码,记录结果
经过电力计量芯片来记录耗电量信息
Android系统已经提供了电量的Api,由杭研QA开发的Emmagee工具也能够对单个Android的应用进行实时耗电量的记录,十分好用。
iOS系统没有开放的Api接口能够直接获取电量使用信息,只能经过开发者模式记录测试过程当中的耗电量信息,并在Instruments中查看。这种方法和在Xcode中调试App获取到的电量信息同样,只能精确到5%,精度较低。具体方法将在本文稍后给出。
第二种方法是在代码中注入获取电量信息的代码,以后能够经过统计数据来对App的耗电量进行分析。这种方法的优势在于,能够在获取电量信息的同时获取到App的运行状况等信息,便于判断性能热点。可是缺点也是显而易见的,须要将测试代码注入到开发代码中,通用性很差,影响开发代码。
第三种方法须要将设备的电池拆卸下来,在电池和设备之间接入电力计量测试单元(芯片),经过串口对芯片数据进行实时采样,进行记录。
这种方法获得的数据较为准确,经过稳压电源供电还能够进一步去除电池剩余电量引发电池电压变化对耗电量产生的影响,使得测试条件更稳定。优势是不须要对App作任何处理,能够充分还原App的实际使用状况。不过缺点也是显而易见的,如今的移动设备大部分都是不可拆卸电池,接入电量测试单元也就意味着会对设备进行拆解,成本较高;限于成本,没法对大量不一样型号的设备进行电量测试。
iOS系统能够经过设置->开发者->Logging对耗电量信息进行记录。执行完毕后,可将设备连入电脑,经过Xcode的Instruments工具中的Energy Diagnostics查看。步骤以下:
开启Logging
因为此方法记录的是整机的耗电状况,所以须要关闭其余后台的应用和后台刷新数据开关等可能影响结果的设置。
点击设置->开发者->Logging,打开电量记录开关。(如图)点击Start Recording按钮,开始记录。
执行测试步骤
关闭Logging
执行完测试步骤后,一样在设置->开发者->Logging下,点击Stop Recording按钮,结束记录。
在Instruments中查看
将设备链接至Mac,打开Xcode->Instruments,选择Energy Diagnostics模板,选择File -> Import Logged Data From Device就能够看到耗电量、CPU、Wifi、网络流量等多种数据了(如图)。
电量(Energy Usage Level)的数据相似于15/20,能够解读为以此耗电水平持续工做1小时,能够耗尽设备电量的15/20。20/20意味着启动此耗电水平的App能够在满电量设备上工做1小时,1/20意味着能够工做20小时,以此类推。
耗电量的硬件测试方法须要对设备进行必定的改造,其原理图以下所示:
将设备的电池拆除,或断开电池与机身的链接后,采用稳压电源为设备供电,并在供电线上接入电力计量芯片。电力计量芯片上有接口能够获取实时的电流数值,连入PC的USB串口后,能够经过脚本对实时电流进行采样。
在本项目的耗电量测试中,采用的是上文所述的第三种方法。公司的互娱MTL实验室和雷火MTL实验室均提供了相应的硬件和软件支持,能够实时展现电量数据,手动开启和关闭数据记录过程,经过脚本处理原始数据自动造成Excel报告。
我所在的洞见项目是一款AR展现的iOS App,启动系统相机后,对实物进行扫描定位,成功后在屏幕中央展现3D模型并播放动画。持续调用系统相机、定位算法、模型渲染展现和播放动画均是耗电热点。
在测试过程当中也发现设备发热很是严重,电池消耗速度快。因为算法对硬件有依赖,设备发热后可能致使其余问题,所以与产品和开发沟通后,确认须要对App的耗电状况进行测试和分析。
在进行测试前,咱们要与产品和开发充分沟通,明确电量测试的需求。并不是全部场景都须要进行电量测试,要对耗电量性能的瓶颈进行分析,肯定耗电量测试的需求之后再执行测试。
以我所在的洞见项目举例来讲,会有用户登陆、下载、扫描和播放动画过程。其中,用户会在较长一段时间处于渲染模型和播放动画阶段,所以,这两个阶段的耗电量会对设备续航产生决定性的影响。所以,咱们决定首先对这两个阶段的耗电量进行测试。
一般来讲,相机、GPU渲染、网络通讯等会产生较高的耗电,须要对这些过程引发重视。也能够经过一些软件测试的方法肯定耗电量热点之后再明确测试需求。
明确了测试需求之后,咱们须要设计合理的测试步骤,并准备相应的App包和资料。测试步骤的设计与正常的测试用例并无区别,还能够设计一些对照实验来辅助进行分析。
例如对于使用相机进行输入的App,拍摄不一样类型的场景,进行测试。对于网络通讯比较频繁的应用,在不一样丢包和延迟的网络环境下进行测试。还有一些特殊的条件,例如我所在的项目,因为算法性能受到手机温度的影响,还须要在不一样的手机发热状况下进行测试。
执行测试用例时,按照用例设计完成准备工做后,点击PC上电量数据采样软件的“开始记录”按钮,开始记录数据。执行完测试步骤后点击结束记录,结束这次数据记录。
一样的,这个方法也是记录的整机耗电量,所以须要关闭后台应用,调整设置,使得结果更加接近单个应用的耗电状况。
完成全部测试内容之后,执行MLT提供的数据处理脚本就会生成一个Excel文件,提供了每一个测试用例的统计数据(最大/最小/平均电流)和全部源数据。
对于每次测试记录的原始数据,均可以经过脚本生成Excel报告,以下图所示
其中左侧4列分别为:t(s)采样时间点,i(mA)实时电流,Q(mAh)为累积消耗电量,I_average(mA)为当前平均电流。图标为以相对采样时间点为横轴,i、Q、I_average分别为纵轴生成的曲线图。
经过设计的对照测试用例,分析耗电量数据是否符合预期,定位耗电性能热点。
基于上述几种方法,除了iOS自带的电量记录精度较低之外,其余方法均可以获取到精确的耗电量数值。那么,怎么来看这些数值,是否是能够直接就由数值的大小来判断App的性能呢?
对于大部分App来讲,耗电量的绝对数值没有特别重大的价值。其一,耗电量数据与硬件配置、机器工艺、系统版本等有着密切的关系,同一App在不一样的机器上表现可能迥异。其二,开发对于App实现方式的耗电数值没有直观的预期,没法经过绝对数值来评价App性能。所以经过对比数据来评估测试数据、挖掘优化点是更加可行的方法。
数据的对比包括App内部的对比和与竞品的对比两类,比较常见的是与竞品进行对比。选择与竞品相似的场景,对比平均电流值,来分析App的耗电水平。对于一些前沿技术,没有竞品相似场景能够对比的,能够经过对技术复杂度的预估,和技术相似的产品进行对比。
另外一种对比方式是与自身的其余测试用例结果进行对比。例如我所在的项目,经过对比首次执行测试用例持续60s时长,和执行完上述用例后,再次执行测试用例,持续60s时长的耗电量数据,发现第二种状况的耗电量有必定程度的提高,进而分析出机身温度对算法计算量的影响程度。
耗电量测试是移动App特有的专项测试,App的耗电状况决定了手机的续航时间。QA能够根据项目需求决定是否进行耗电量测试,与开发充分沟通后,设计合理的测试用例和对照组,并对数据进行分析后造成报告,反馈给开发进行优化。
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 网易蜂巢(云计算基础服务)MongoDB服务重磅来袭
【推荐】 初步探索前端性能测试
【推荐】 如何玩转基于风险的测试