app常见性能测试点_top -m -s-程序员宅基地

技术标签: app测试  FPS  内存  cpu  app性能测试  响应  

普遍的apk性能测试,主要是以下七类

1、响应
2、内存
3、cpu
4、FPS (app使用的流畅度)
5、GPU过度渲染
6、耗电
7、耗流
(app除了这些性能测试,还有:手机版本号兼容性,屏幕分辨率兼容性,稳定性测试,安全测试等,后续会持续更新… 流量测试同这些一起更新,这里就不在说明了 )

一、响应
软件的响应时间和响应速度直接影响到用户的体验度,如果一个软件,迟迟加载不出来,会直接影响到软件的日活、留存。因此对于一个软件,对响应速度测试是必不可少的。

主要测试点:
1、冷启动:首次启动app的时间间隔(只是启动时间,不包括页面加载)
2、热启动:非首次启动app的时间间隔(只是启动时间,不包括页面加载)
3、完全启动:从启动到首页完全加载出来的时间间隔
4、有网启动:从发起跳转,到页面完全加载出来的时间间隔
5、无网启动:从发起跳转,到页面完全加载出来的时间间隔
(在项目中,主要测试关注点是冷启动,热启动)

测试方法:
1、使用adb命令
1) 冷启动
adb shell am start -W packageName/ActivityName(绝对路径,首个Activity)
在这里插入图片描述

含义:
ThisTime: 该Activity的启动耗时;
TotalTime: 应用自身启动耗时, ThisTime+应用application等资源启动时间;
WaitTime: 系统启动应用耗时, TotalTime+系统资源启动时间

2)热启动:按back按键后再启动adb命令
在这里插入图片描述

测试标准:冷启动时间不超过1.5s, 热启动不超过1s.

3)完全启动,无网启动,有网启动都可以通过charles抓包来获取启动的时间

charles是一个很强大的抓包工具,除了截取请求还能进行单接口压测,修改请求参数并发出请求,以及模拟无网,弱网,2G,3G,4G等。能解决app的很多专项测试。
在这里插入图片描述

限制网络情况需要用到charles的一个功能: Throttle Setting
在这里插入图片描述
通过设置网速和抓包,可以获取启动时间,但是有一定的误差。在项目中,一般只需要测试冷启动,热启动便可。

2、使用AndroidStudio的Android Monitor,查看手机日志系统输出
Android Monitor总共有5大模块:logcat, memory, cpu, network,GPU
我们可以通过logcat获取应用的响应时间(如何使用,内存中有介绍)
在这里插入图片描述

3、代码日志输入查看
直接源码打日志,输入各个位置的耗时操作最为有效,需要源码。

4、借用工具,高速相机,但是成本较高。(如下图:目前项目团队使用的测试工具)
原理: 通过压力感应来自动识别起始点,回放图片判断结束点,(一般默认手机界面静止不动为结束点), 键盘按S键为起始点,按F键为结束点。
这里便不介绍用法了。

在这里插入图片描述

在这里插入图片描述

二、内存
在Android系统中,每个APP进程除了同其他进程共享内存(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(私有内存+比例分配共享内存)来衡量一个APP的内存开销。由于一个移动设备的内存是固定的,如果内存消耗过大就会造成应用卡顿或者闪退,需要对内存进行测试。正常情况下,应用不应占用过多的内存资源,且能够及时释放内存,保证整个应用内的稳定性和流畅性。

测试点:
1、空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少。
2、中强度状态:时间偏长的操作应用。
3、高强度状态:高强度使用应用,可以跑monkey来测试(通常用来测试内存泄漏)。
** 内存泄漏:指应用里的内存一直没有释放,内存一直增加 ,系统内存一直减少 **

测试方法:
1、使用adb命令: adb shell dumpsys meminfo packageName

获取应用包名和Actively:
adb shell dumpsys window | findstr mCurrentFocus
在这里插入图片描述
测试关注点:
1、Native heap alloc
2、Dalvik heap alloc
3、PSS
在这里插入图片描述

2、使用性能测试工具:Emmagee(只支持Android)
Emmagee是网易开发的一款测安卓应用性能的测试apk
1、安装Emmagee.apk,打开。
2、选择需要测试性能的应用启动
3、被测应用界面会展示内存、CPU、电流、流量等数据
4、stop Test之后,在本地SD卡中保存一份性能测试数据,可以从里面获取内存信息。
5、可以通过execl将数据转化成图表,更直观的查看各性能指标的数据。
(保存地址:/sdcard/Emmagee/******* .csv文件)
在这里插入图片描述

生成的csv文件:
在这里插入图片描述
原理:Emmagee是使用Android自身提供的ActivityManager.MemoryInfo()方法获得
可查看: cpu 内存 流量 电量 FPS(流畅度)是一个相对比较好的选择
但是只支持安卓6.0及以下的版本

除了Emmagee,还有腾讯提供的一个同样测试性能的app, GT。使用与Emmagee大体一致,但是GT除了支持Android,同样支持ios。GT相对于Emmagee功能也更强大:性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计。

3、使用AndroidStudio 自带 CPU 和内存检测功能 – Android Monitor
(首先要下载并安装好Android Studio)
Android Monitor 可以检测CPU 和内存,能够绘制出变化图,可以直观明了的看出内存和cpu的变化曲线。
在这里插入图片描述

Android Monitor ,有5个模块 :logcat、Memory、CPU、Network、GPU。
在这里插入图片描述

关注点:
1、退出某个页面后,内存是否有回落。
如果没有及时回落,且程序自动GC或者手动GC,那便可确认有问题。
2、进行某个操作后,内存是否增长过快。
如果增长过快,也有可能存在风险,需重复操作确认。

三、CPU
CPU测试,主要关注的是cpu的占用率。很多时候,我们玩手机时,会出现发热发烫,那是因为CPU使用率过高,CPU过于繁忙,会使整个手机无法响应用户,整体性能降低,用户体验就会很差,也容易引起ANR(application not responding, 主线程(UI线程)如果在规定时内没有处理完相应工作,就会出现ANR)等等一系列问题。

测试点:
1).在空闲时间(切换至后台)的消耗,基本没大应用使用cpu
2).在运行一些应用的情况下,cpu已占50%的情况下,观察应用程序占用cpu的情况
3).在高负荷的情况下看CPU的表现(cpu占用应是在80%以上)

具体场景:
1、应用空闲状态运行监测CPU占用率
空闲状态:应用按Home键退到后台,不再占用系统的状态(通常是灭屏半分钟后)
CPU占用率=0%

2、应用中等规格运行监测CPU占用率
中等规格:模拟用户最常见的使用场景
CPU占用率≤30%

3、应用满规格长时间正常运行监测CPU占用率
Monkey测试
CPU占用率≤30%

4、应用正常运行期间监测CPU占用率峰值
应用正常运行:打开应用进行基本操作
CPU占用率≤50%

测试方法:
1、使用adb命令:
1) top -m -s cpu |grep packageName
在这里插入图片描述

top cpu 参数:
-m 显示最大数
-s 按指定行排序
-t 显示进程名称
-n 在退出前刷新几次
-d 刷新间隔

如果反复进行某个操作,cpu占用过高且一直无法释放,那便可能存在风险。

2)dumpsys cpuinfo |grep packageName
在这里插入图片描述

2、使用第三方测试工具:Emmagee、GT等。
3、使用AndroidStudio自带的检测工具Android Monitor。

四、FPS (应用的使用流畅度)

FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。
´一般来说,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发生了跳帧,因此原本流畅的画面变发生了卡顿。

测试方法:
1、adb命令
1)打开手机:开发者选项—>profile GPU rendering —> in adb shell dumpsys gfxinfo
2) 操作要测试的apk
3) cmd窗口输入命令: adb shell dumpsys gfxinfo packageName
4) 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比
在这里插入图片描述

在这里插入图片描述
含义:
Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧。

5)通过execl进行表格处理可以直观的查看软件的流畅度
在这里插入图片描述

2、除了使用adb shell, 还可以直接使用开发者选项自带的图表
1)打开手机:开发者选项—>profile GPU rendering —> on screen as bars
2) 操作被测的软件
3)界面会显示如下的一个统计数据表
在这里插入图片描述

2、使用第三方测试工具:Emmagee、GT等。
3、使用AndroidStudio自带的检测工具Android Monitor。

五、GPU渲染

GPU渲染是指在一个像素点上绘制多次(超过一次):显示一个什么都没有做的activity界面算作画了1层,给activity加一个背景是第2层,在上面放了一个Text View(有背景的Text View)是第3层,Text View显示文本就是第4层仅仅只是为了显示一个文本,却在同一个像素点绘制了四次,这是一定要优化的。过度绘制对动画性能的影响是极其严重的,如果你想要流畅的动画效果,那么一定不能忽视过度绘制。

测试方法:
1、手机自动的Debug GPU overdraw
1)打开手机—>设置—>开发者选项—>Debug GPU overdraw—>show overdraw areas
2)打开被测的应用
在这里插入图片描述

GPU过渡渲染不同的颜色代表不同的绘制程度
1)、原色:无过渡绘制
2)、蓝色:绘制一次 (理想状态)
3)、绿色:绘制二次
4)、浅红:绘制三次 (可以优化)
5)、深红:绘制四次 (必须优化)

测试指标:
1、控制过渡绘制为2x
2、不允许存在4x过渡绘制
3、不允许存在面积超过屏幕1/4的3x过渡绘制

六、耗电量
测试应用对电量的消耗前需要对手机本身的电量消耗有个大概了解,测试前先看规定时间内手机正常待机下(重启后待机)电量消耗为多少。然后再启动待测试APP看看消耗的电量增加了多少取差值。

测试点:
  测试手机安装目标APK前后待机功耗无明显差异;
  常见使用场景中能够正常进入待机,待机电流在正常范围内;
  长时间连续使用应用无异常耗电现象。

测试方法 :(先关闭所有的应用,再打开被测app)
1、使用第三方测试工具:Emmagee、GT等,只需要测试的电流静置一晚,待机电流在正常范围内即可。一般是被测应用对比待机电流<=2mA。
2、使用adb命令
adb shell dumpsys batterystats |grep packageName

*****转载文章时务必注明原作者及原始链接,并不得对作品进行修改。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xiaomaoxiao336368/article/details/83547318

智能推荐

分布式系统理论学习总结_分布式系统及其理论-程序员宅基地

文章浏览阅读3.7k次。分布式理论CAPCAP定理讲的是三个性。consistency数据一致性,availability可用性,partition tolerance分区容错性。三者只能选其中两者。为什么呢,看看这三个性质意味着什么吧。首先看看分区容错性,分区容错性指的是网络出现分区(丢包,断网,超时等情况都属于网络分区)时,整个服务仍然可用。由于网络分区在实际环境下一定存在,所以必须首先被考虑..._分布式系统及其理论

qt 登陆界面账号和密码的验证_qt ui 设计 怎么做槽 密码认证-程序员宅基地

文章浏览阅读1.6w次。这几天一直研究怎么让界面账号和密码验证的问题特别想用数据库,一直有QSQLlitdatabase cant find 的问题 找了很多方法没成功 要交课设 所以放弃用其他方法 用文件存吧 比较省事但是有个更简单的办法 哈哈   先看 转到槽函数user那是显示的信息 头文件加上QMessageBox  最后那行 获得焦点 倒数第二行清楚输入 结合我之前发的登陆界面到主界_qt ui 设计 怎么做槽 密码认证

串口通讯以及MPAndroidchart画图的使用(kotlin)_int count=linedatasets.get(0).getentrycount();-程序员宅基地

文章浏览阅读3.9k次,点赞3次,收藏9次。目录一.Kotlin串口通讯实现... 21.1导入基础库... 21.2 效果展示... 31.3布局界面... 412.1 代码... 41.4 Activity实现代码... 913.1 实列化... 91.3.2 适配波特率以及获取本机串口号,进行串口监听... 9二.MPAndroidChart图表使用... 132.1导入基础库... 132.1.1.引入开源库... 132.1.2在app根目录的buil.gradle文件中加入依赖... 1.._int count=linedatasets.get(0).getentrycount();

【Kubernetes】Pod调度到指定Node_双实例pod 调度到不同node-程序员宅基地

文章浏览阅读2.4w次。问题描述   Kubernetes有着自己特定的调度算法与策略,有Master中的Scheduler组件来实现,根据Node资源使用情况自动调度Pod的创建,通常可以满足我们大部分的需求。但是有时我们希望可以将某些Pod调度到特定硬件节点上,这里采用目前最为简单的nodeName和nodeSelector来实现Pod调度。  假设以下场景:有三个Node,分别为107、108、109,创建De_双实例pod 调度到不同node

angular6使用ngx-bootstrap/modal_ngx-bootstrap modal-程序员宅基地

文章浏览阅读6.4k次。首先下载ngx-bootstrap:npm install ngx-bootstrap --save下载后,在module.ts中导入ngx-bootstrap/modal类:import { ModalModule } from 'ngx-bootstrap'; imports: [ ... ModelModule, ModalModule.forRoot(..._ngx-bootstrap modal

Centos7利用rpm升级OpenSSH到openssh-8.1p1版本_openssh8.1升级使用rpm-程序员宅基地

文章浏览阅读3.4k次。参考:https://www.cnblogs.com/fsckzy/p/10834550.html Centos 升级至 OpenSSH 8 rpm包制作RPM打包使用的是rpmbuild命令,这个命令来自rpm-build软件包,这个是必装的。yum install rpm-build -y #安装rpm-build软件,以提供rpmbuild命令 69 ssh -V 70 rpm -qa openssh 71 yum install rpm-..._openssh8.1升级使用rpm

随便推点

训练网络报错device-side assert triggered_device-site-程序员宅基地

文章浏览阅读225次。出现以下:​Assertion 'indexValue>=0 && indexValue < src.sizes[dim]​应该是分类数和路径所指向的类别数不匹配。_device-site

关于Unity中的UGUI优化,你可能遇到这些问题-程序员宅基地

文章浏览阅读181次。https://blog.uwa4d.com/archives/QA_UGUI-1.html关于Unity中的UGUI优化,你可能遇到这些问题作者:admin/时间:2016年11月08日/浏览:23818 次/分类:厚积薄发关键字界面制作网格重建界面切换加载相关字体一、界面制作Q1:UGUI里的这个选项 ,应该是ET..._ugui 文字过多 很卡

一看就会(废)的最小二乘法推导_最小二乘拟合流程图-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏9次。一、预备知识:方程组解的存在性及引入  最小二乘法可以用来做函数的拟合或者求函数极值。在机器学习的回归模型中,我们经常使用最小二乘法。我们先举一个小例子来走进最小二乘法。  某次实验得到了四个数据点(x,y):(1,6)、(2,5)、(3,7)、(4,10)(x,y):(1,6)、(2,5)、(3,7)、(4,10)(x,y):(1,6)、(2,5)、(3,7)、(4,10) (下图中红色的点)。我们希望找出一条与这四个点最匹配的直线 y=θ1+θ2xy = \theta_{1} + \theta_{_最小二乘拟合流程图

nodejs 控制台美化 console-color-mr_node控制台打印美化-程序员宅基地

文章浏览阅读4.1k次。console-color-mr插件可以让node控制台输出带有颜色,是一个不错的插件,通过颜色可以更直观的分析程序bug一、使用npm install -D console-color-mr// 方法一import 'console-color-mr'console.log(`.....`.red);// 方法二import _console from 'consol..._node控制台打印美化

WIN10删除微软拼音输入法,设置默认输入法为英文_微软拼音输入法删除后没有纯英文输入怎么办-程序员宅基地

文章浏览阅读1k次。WIN10删除微软拼音输入法,设置默认输入法为英文删除微软拼音输入法设置英文为默认输入方式删除微软拼音输入法在安装好自己熟悉的输入法后,我通常会将系统自带的微软拼音输入法删除,但系统又总是会自动重装上去。解决的办法很简单,删除以后,再手动添加一次微软拼音输入法,然后再一次删除,以后系统就不会再次自动重装了。设置英文为默认输入方式然后点高级键盘设置,选择默认输入法..._微软拼音输入法删除后没有纯英文输入怎么办

java打印一个三角形_java使用float函数打印三角形-程序员宅基地

文章浏览阅读192次。java打印一个三角形public class Day1 { //打印一个5行三角形 public static void main(String[] args) { for (int i = 1; i <= 5; i++) { //设置好需要打印的行数 for (int i1 = 5; i1 >=i; i1--) { //嵌套的第一个for循环,作用从5到1打印空格,打印5个空格后, _java使用float函数打印三角形