前言

App运行在设备上的性能表现也是质量保障的一个重要环节。因此,当我们确保了基本功能的准确之后,还需要有一定的方法评测App在不同设备上的性能表现。本文将从性能指标,评测方法,自动化体系建设等三个方面,介绍Android App的性能测试方法。

性能指标

传统Android App的性能测试都是通过测试工具获取App运行过程中的各项指标数据,然后取平均值,最大值,最小值等统计值作为结果分析。主要采集的指标有:

  1. CPU,CPU使用率过高,会使整个手机无法响应用户,整体性能降低,影响用户体验,也容易引起ANR等问题
  2. 内存,内存占用偏高,尤其是内存泄露是Android开发者十分关心的问题,因为内存泄露可能导致的后果是应用进程直接被kill掉。
  3. 流量,对于APP用户来说,流量=钱,通过流量的实时监测,帮开发者分析应用的资源加载大小、网络请求是否合理
  4. 启动时间,App启动到首页加载完成的耗时,如果太慢,直接导致用户卸载App
  5. 包大小,安装包中资源冗余、文件未做压缩,都将导致APK包偏大,增加下载流量和安装时间
  6. 流畅度,应用的帧率和流畅度是最直接影响用户体验的。通过帧率和流畅度曲线,帮开发者分析是否存在UI问题。
指标

当指标确定之后,我们就是需要根据这些指标来一一评测App的性能,我们将从基础性能和深度性能两个维度分别介绍评测方法。

基础评测体系

基础性能评测是指我们通过工具获取App运行过程中的性能数据,然后对性能数据进行统计分析,从而得到性能好坏的结论。下面我们将介绍基础性能评测的整体流程。

1. 制定性能基线

性能基线有两种形式:前后版本对比,新版本的数据原则上不能高于旧版本数据的5%;行业竞品库,通过大量竞品分析得到行业竞品基线库,从而确定产品的性能在行业内的竞争力。

2. 确立测试场景

测试场景的选取一般根据用户行为分析得到,选取20-30个核心场景,每个场景的路径不要超过5个步长。

3. 测试方法

我们可以直接通过Android自带的adb工具获取,也可以通过系统API获取,下面介绍几种常用的adb命令获取性能数据方法。

  1. CPU:adb shell top
  2. 内存:adb dumpsys meminfo
  3. 流量:cat /proc/net/xt_qtaguid/stats
  4. FPS:adb dumpsys gfxinfo
  5. 启动时间:adb logcat -s ActivityManager

4. 生成测试报告

根据操作具体场景获取到的性能数据,我们可以进行统计分析,从而生成测试报告。报告的样板如下:

深度性能评测体系

我们知道,基础性能评测只是从统计学的角度来评测App的性能,但具体影响性能的问题点并没有挖掘出来,力度太粗。因此,我们需要进一步深化我们的性能评测。下面将介绍深度性能评测的方法。
深度性能评测主要从以下三个维度进行:

1. 内存泄漏分析

对LeakCanary进行二次开发,并引入到App代码中,从而生成可自动检测内存泄漏的安装包,结合UI自动化测试,Monkey测试进行页面的跳转,同时上报泄漏信息。

内存泄漏报告

2.卡顿分析

在App代码中引入BlockCanary工具,使用UI自动化,Monkey工具进行页面遍历,收集卡顿信息,并上报到管理平台,生成报告。

卡顿报告

3. 安装包瘦身分析

对Android Apk包的资源文件进行解析,分析冗余资源文件,可压缩资源文件,并计算可压缩的比例。

瘦身报告

性能自动化测试体系建设

有了前面基础性能评测和深度性能评测的方案,我们将整个流程通过自动化串联,报告聚合,就可以形成一套性能自动化测试系统。
流程如下:首先从打包平台自动下载最新安装包,然后启动Apk分析线程,并保存结果,然后启动UI自动化测试对App进行操作,同时采集基础性能数据和深度性能数据,同时将测试结果保存到数据库,最后从数据库中汇总所有的测试数据,聚合生成测试报告。

性能自动化流程

该系统有三个核心功能点:

1.UI自动化驱动测试场景

通过自动化测试遍历App功能模块,主要采用UI自动化和Monkey遍历相结合,即可覆盖核心场景,也具有一定随机性。

2. 多线程数据采集

自动化线程负责UI的遍历,另外启动多个线程采集基础性能和进行深度性能分析,数据实时同步到数据库。

3.报告聚合分析

对测试数据进行统计和分析,与制定的基线指标结合给出测试结论或者评分,最后通过报告形式展示在Web端。

总结

性能评测的最终目的还是为了发现App在不同设备上的性能问题,同时协助开发解决问题。因此,我们做性能测试的时候,不仅要发现问题,也要定位问题,深入挖掘性能问题的根源才是我们需要持续努力的方向。

作者:海波笔记
链接:https://www.jianshu.com/p/3691d0e28931
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

Android App性能自动化评测方法的更多相关文章

  1. Android APP性能分析方法及工具

    近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...

  2. 十大技巧优化Android App性能

    无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的. 那么,如何能开发出更高性能的Android App?相信是软 ...

  3. 优化Android App性能?十大技巧必知!

    无论锤子还是茄子手机的不断冒出,Android系统的手机市场占有率目前来说还是最大的,因此基于Android开发的App数量也是很庞大的.那么,如何能开发出更高性能的Android App?相信是软件 ...

  4. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  5. 包建强的培训课程(9):Android App性能优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  6. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  7. android app性能优化大汇总

    这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度:  图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...

  8. Android App性能测试之adb命令

    本篇文章总结了Android App性能测试过程中常用的adb命令.通过这些adb命令,可以查看App的性能数据,为评判性能好坏作参考. CPU相关 显示占用CPU最大的5个应用 adb shell ...

  9. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

随机推荐

  1. 操作messageBox类

    我们经常操作messagebox类,有时候我们又分不清一些参数,下面是一些操作messageBox的常用方法: public static class ClsMsg { public static v ...

  2. 一步步实现自己的ORM(一)

    最近在研究ORM,尝试着自己开发了一个简单的ORM.我个人不喜欢EF因为跟不上EF升级太快了,再说公司里还停留在c# 3.5时代,对于NHibernate配置太复杂看到就头晕,就心生自己做一个ORM的 ...

  3. 使用 Visual Studio 2017 部署 Azure 应用服务的 Web 应用

    本快速入门介绍了如何使用 Visual Studio 2017 创建并部署 Azure Web 应用.在本教程中完成的所有操作均符合1元试用条件. 本快速入门介绍了如何使用 Visual Studio ...

  4. C#语言基础 Main 函数中变量 整型

    在我们每次上网或者用电脑的时候,请输入你的xxx 或者你的名字(年龄/身高/学校/籍贯)是 在这里我们就要学到一些变量,就是不确定的东西 string a:   //赋予变量 a ="内容& ...

  5. 查看Windows激活信息

    使用 Windows + R组合快捷键打开运行命令框 1.运行: slmgr.vbs -dlv 可以查询到Win10的激活信息,包括:激活ID.安装ID.激活截止日期等信息. 2.运行: slmgr. ...

  6. java里面byte数组和String字符串怎么转换

    //string 转 byte[] String str = "Hello"; byte[] srtbyte = str.getBytes(); // byte[] 转 strin ...

  7. 7.逻辑运算 and or not

    1)优先级 ()> not  > and > o r and:真真为真,真假为假 ,假假为假 or:真真为真,真假为真,假假为假 print(2 > 1 and 1 < ...

  8. Java常见对象Object类中的个别方法

    Java常见对象Object类 public int hashCode() : 返回该对象的哈希码值. 注意:哈希值是根据哈希算法计算出来的一个值,这个值和地址值有关,但是不是实际地址值.你可以理解成 ...

  9. iOS dateformatter设置GMT格式时间--iOS开发系列---项目中成长的知识四

    今天在项目中开始接手客户端的签名这个模块,签名这个会在项目结束过后再单独写一下自己的心得! 今天讲讲在签名的过程中我们需要向服务器传送一个Date值,格式要求是格林威治时间,也就是GMT时间! 格式要 ...

  10. iOS开发遇到的坑之三--使用asi框架在xcode下正常运行,但是打包时却不能进行网络访问

    前言: 前两篇博客遇到的问题是前几天在实验室开发的时候遇到的,花了两三天时间在上面,今天突然心血来潮,想把这些”坑”写下来,所以才有了这两篇写的很丑的博客随笔 今天在开发时又遇到一个问题,那就是标题所 ...