测试整理SXT-APP性能测试

APP性能指标

App性能问题如 app使用时卡顿严重或者加载页面慢,cpu占用率高,app闪退等,在测试过程中,则需特别关注性能方面的体验,app性能差,通常会导致用户对app的使用率下降,卸载率上升。

响应
软件的响应时间和响应速度直接影响到用户的体验度,如果一个软件,迟迟加载不出来,会直接影响到软件的日活、留存。因此对于一个软件,对响应速度测试是必不可少的。
优秀:0~400ms,标准:400ms~2000ms,轻微隐患: 2000ms~5000ms,严重隐患:5000ms 以上。

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

CPU
主要关注的CPU的占用率。玩手机时,会出现发热发烫,那是因为CPU使用率过高,CPU过于繁忙,会使整个手机无法响应用户,整体性能降低,用户体验就会很差,也容易引起ANR (application not responding,应用程序无响应,主线程(UI线程)如果在规定时内没有处理完相应工作,就会出现ANR)等等一系列问题。FPS应用的使用流畅度,FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。
一般,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms 的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发生了跳帧,因此原本流畅的画面变发生了卡顿。

GPU过度渲染
GPU渲染是指在一个像素点上绘制多次(超过一次):显示一个什么都没有做的activity界面算作画了1层,给activity 加一个背景是第2层,在上面放了一个TextView(有背景的Text View)是第3层,Text View显示文本就是第4层,仅仅只是为了显示一个文本,却在同一个像素点绘制了四次,这一定要优化的。过度绘制对动画性能的影响是极其严重的,如果你想要流畅的动画效果,那么一定不能忽视过度绘制。耗电量测试应用对电量的消耗前需要对手机本身的电量消耗有个大概了解,测试前先看规
定时间内手机正常待机下(重启后待机)电量消耗为多少,然后再启动待测试APP看看消耗的电量增加了多少取差值。

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

流量测试
目前的网络类型包含2G\3G\4Glwifi,其中还有不同运营商的区分,我们在APP的
使用中经常遇到大资源,重复请求,调用响应慢,调用失败等各种情况。在不同的网络类型之下,我们不仅加快请求的响应,还要控制流量使用。
每秒钟平均流量,建议值<5.12kb,每10分钟平均流量,建议值<3MB,不存在 app偷跑流量等行为。

使用adb进行测试

App 响应时间和响应速度测试

主要测试点
冷启动
首次启动 app 的时间间隔(只是启动时间,不包括页面加载)
热启动
非首次启动 app 的时间间隔(只是启动时间,不包括页面加载)

测试方法

冷启动
adb shell am start -W com.tencent.mm/.ui.LauncherUI
绝对路径,首个Activity
am是 shell中集成的一个命令,ActivityManager的简写
-W是指启动完成之后,返回启动耗时。
可能存在app 缓存(提示 Waming: Activity not started,intent has been
delivered to currently running top-most instance),建议重新打开模拟器后,
直接运行命令
Status: ok
Activity: com.tencent.mm/.ui.LauncherUI
ThisTime: 1186
TotalTime: 1186
WaitTime: 1325
Complete
含义
ThisTime:该Activity的启动耗时,单位ms;
TotalTime:应用自身启动耗时,
ThisTime+应用application等资源启动时间;
WaitTime:系统启动应用耗时,TotalTime+系统资源启动时间。
如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用所有界面Activity启动耗时,参考ThisTime。
按返回按键后再启动adb命令
测试标准:冷启动时间不超过1.5s,热启动不超过1s。

内存占用测试

主要测试点
空闲状态
切换至后台或者启动后不做任何操作,消耗内存最少。中强度状态
时间偏长的操作应用。
高强度状态
高强度使用应用,可以跑monkey来测试(通常用来测试内存泄漏)。
内存泄漏
指使用malloc或new申请了一块内存,但是没有通过free 或delete将内存释放,导致这块内存一直处于占用状态。

测试方法

使用 adb 命令
adb shell dumpsys meminfo com.tencent.mm
主要指标
Native heap alloc、Dalvik heap alloc
在这里插入图片描述
若这两个值一直增长,说明可能出现内存泄漏
PSS
在这里插入图片描述
App 实际占用的内存大小
主要关注
退出某个页面后,内存是否有回落。
如果没有及时回落,且程序自动 GC(Garbage Collection,垃圾回收)或者手动 GC,那便可确认有问题。
进行某个操作后,内存是否增长过快。
如果增长过快,也有可能存在风险,需重复操作确认

CPU繁忙测试

主要测试点

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

具体场景

应用空闲状态运行监测CPU占用率
应用按Home键退到后台,不再占用系统的状态(通常是灭屏半分钟后)CPU占用率=0%
应用中等规格运行监测CPU占用率
模拟用户最常见的使用场景CPU占用率≤30%
应用满规格长时间正常运行监测CPU占用率
应用正常运行,打开应用进行基本操作CPU占用率≤50%

测试方法

adb shell dumpsys cpuinfo apk 包名
在这里插入图片描述
adb shell top -m -s | findstr packageName
-m 数字
显示指定数目的最大值,一般后面不再接 findstr
使用-m 会导致隐藏列名
-s 数字
按指定列号进行倒序排列
从 1 开始,最大 11
9 代表 CPU,10 代表内存
-n 数字
刷新几次后退出
-d 秒数
刷新间隔
q 回车
退出
在这里插入图片描述
如果反复进行某个操作,CPU 占用过高且一直无法释放,那便可能存在风险

FPS 应用流畅度测试

开启 Profile GPU rendering
Settings→System→Advanced→Developer options→查找 profile→找到并单击 Profile
GPU rendering→In adb shell dumpsys gfxinfo
打开要测试的 app
adb shell dumpsys gfxinfo 包名
在这里插入图片描述
Graphics info for pid 1331 [com.tencent.mm]:表明当前 dump 的为 com.tencent.mm
的帧信息,pid 为 1331。
Total frames rendered: 2218:本次 dump 搜集了 2218 帧的信息。
Janky frames: 26 (1.17%):帧中有 26 帧的耗时超过了 16ms,卡顿概率为 1.17%。
Number Missed Vsync: 3:垂直同步失败的帧
Number High input latency:2213:处理 input 时间超时的帧
Number Slow UI thread: 1:因为 ui 线程导致 slow 的帧
Number Slow bitmap uploads: 0:因为 bitmap 加载 slow 的帧
Number Slow issue draw commands: 3:因为绘制导致 slow 的帧
在这里插入图片描述
Draw: 表示在 Java 中创建显示列表部分中的 OnDraw()方法占用的时间。
Prepare:表示渲染引擎准备时间,不关注此项。
Process:表示渲染引擎执行显示列表所花的时间,view 越多,时间就越长。
Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
Draw + Process + Execute = 完整显示一帧 ,这个时间要小于 16ms 才能保存每秒60 帧。
通过 execl 进行表格处理可以直观的查看软件的流畅度
只保留 Process、Draw、Execute
将三列加和
绘制线图
16ms 以上的卡顿,需要优化
Settings→System→Advanced→Developer options→查找 profile→on screen as bars
结果以图形形式显示在设备中
开启此功能后,随着屏幕刷新,界面上会滚动显示垂直的柱状图来表示每帧画面所需要渲染的时间,柱状图越高表示花费的渲染时间越长。
每个直方条代表一帧,每个直方条的高度表示该帧渲染所用的时间(以毫秒为单位)
界面中间一根绿色水平线代表 16ms,每一帧的柱状线都在这条绿线以下,才能避免出现由丢帧引起的卡顿。
颜色含义(Android 6.0 及更高版本中的竖条区段)
在这里插入图片描述
在这里插入图片描述

GPU 过度渲染测试

开启 GPU 过度渲染
设置→开发者选项→单击 Debug GPU overdraw→选择 show overdraw areas
使用 genymoton 可能会导致模拟器无响应,建议使用 AVD 模拟器。
显示开发者选项
打开手机的“设置”,进入到“设置”页面;
滑到“设置”页面的最下端,进入“系统”;
找到“关于手机”,进入到“关于手机”页面;
找到“版本号”,连续点击。
会弹出一段文字提醒,直到提醒次数为 0 后结束点击。
重新进入“系统”,进入“开发者选项”。
打开被测的应用
在这里插入图片描述
GPU 过渡渲染不同的颜色代表不同的绘制程度
原色:无过渡绘制
蓝色:绘制一次 (理想状态)
绿色:绘制二次
浅红:绘制三次 (可以优化)
深红:绘制四次 (必须优化)
测试指标
控制过渡绘制为 2x
不允许存在 4x 过渡绘制
不允许存在面积超过屏幕 1/4 的 3x 过渡绘制

App 性能测试工具的使用

使用 monkey 对 App 进行压力测试

monkey 是做什么的
monkey 是 Android 中的一个命令行工具,由 java 编写,可以运行在模拟器里或实际设备中。
它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对 APP 进行压力测试。
monkey 测试是一种为了测试软件的稳定性、健壮性的快速有效的方法
在这里插入图片描述

monkey 的优劣

优势
脱离Case的依赖
可封装自动化执行
可封装后作为客户端性能测试的驱动
缺陷
完全随机,不可控

monkey 命令

adb shell monkey -p 包名 1 -p 包名 2 … 事件数
-p
如果用此参数指定了一个或几个包,monkey 将只允许系统启动这些包里的 Activity。如果你的应用程序还需要访问其它包里的 Activity,那些包也需要在此同时指定。如果不指定任何包,monkey 将允许系统启动全部包里的 Activity。要指定多个包,需要使用多个 -p 选项,每个-p 选项只能用于一个包。
-v
指定打印信息的详细级别,一个 -v 增加一个级别。
日志级别 Level 0,缺省值,仅提供启动提示、测试完成和最终结果等少量信息,-v;
日志级别 Level 1,提供较为详细的日志,包括每个发送到 Activity 的事件信息,-v -v;
日志级别 Level 2,最详细的日志,包括了测试中选中/未选中的 Activity信息,-v -v -v。

monkey 结果分析

adb shell monkey -p –v -v –v > log.txt
可以将结果存储起来
正常情况,如果 monkey 测试顺利执行完成,在 log 最后,会打印出当前执行事件的次数和所花费的时间
Monkey finished
打开 LOG,查看 log 的最下端,是否有类似以下字段:
Network stats: elapsed time=5123ms (5123ms mobile, 0ms wifi, 0ms notconnected)
Monkey finished
这个字段表明本次的 Monkey 没有异常,测试通过。
CRASH
如果搜索到有结果,则表明有进程出现问题,测试不通过。
CRASH: com.onekchi.downloadmanager (pid 12919)
ANR
如果有搜索结果,则表示测试过程中,测试对象出现了无响应的现象,因此测试不通过

使用 GT 测试 App 性能

什么是 GT
GT(随身调)是腾讯研发的开源 APP 随身调测平台,它是直接运行在手机上的“集成调测环境”(IDTE, Integrated Debug Environment)。
GT 仅凭一部手机,无需连接电脑,即可对 APP 进行快速的性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash 日志查看、网络数据包的抓取、APP 内部参数的调试、真机代码耗时统计等。
如果觉得 GT 提供的功能还不够满足需要,还可以利用 GT 提供的基础 API 自行开发有特殊功能的 GT 插件,帮助您解决更加复杂的 APP 调试问题

GT 的使用

选择待测 App、选择测试指标
在这里插入图片描述
AUT:设置被测应用信息
pss:实际使用的物理内存
private dirty:私有内存
jiffies:CPU 时间片,反映进程的 CPU 消耗
net:整个手机产生的流量
选择监控参数
在这里插入图片描述
点参数→编辑→拖动需要监控的参数到“已关注的参数”→不点完成
添加监控耗电量、流量和流畅度的参数
在这里插入图片描述
耗电量
在这里插入图片描述
流量
在这里插入图片描述
流畅度
在这里插入图片描述
点“检测”必须出现 ok,否则点“更改”→检测,提示“select a app first”忽略
选择显示哪些指标
在这里插入图片描述
刷新内存指标
在这里插入图片描述
启动监控
在这里插入图片描述

查看监控图

在这里插入图片描述
双击各项看图
导出结果与分析
导出结果
adb pull 设备中结果文件名 C:…\Desktop
在 Excel 中插入散点图(带平滑线)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值