问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

移动端APP性能测试完整指南:从响应到耗电全方位解析

创作时间:
作者:
@小白创作中心

移动端APP性能测试完整指南:从响应到耗电全方位解析

引用
CSDN
1.
https://m.blog.csdn.net/m0_58082414/article/details/138533236

移动端APP性能测试是确保应用质量和用户体验的关键环节。本文详细介绍了7类主要的性能测试内容,包括响应、内存、CPU、FPS、GPU过度渲染、耗电和耗流等,并提供了具体的测试方法和工具使用说明,特别是对adb命令的使用有详细的解释和示例。

响应测试

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

主要测试点:

  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

    通过设置网速和抓包,可以获取启动时间,但是有一定的误差。在项目中,一般只需要测试冷启动,热启动便可。

  1. 使用AndroidStudio的Android Monitor,查看手机日志系统输出

    Android Monitor总共有5大模块:logcat, memory, cpu, network,GPU

    我们可以通过logcat获取应用的响应时间(如何使用,内存中有介绍)

  2. 代码日志输入查看

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

  3. 借用工具,高速相机,但是成本较高。(如下图:目前项目团队使用的测试工具)

    原理:通过压力感应来自动识别起始点,回放图片判断结束点,(一般默认手机界面静止不动为结束点), 键盘按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,那便可确认有问题。

    1. 进行某个操作后,内存是否增长过快。

    如果增长过快,也有可能存在风险,需重复操作确认。

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

  1. 使用第三方测试工具:Emmagee、GT等。

  2. 使用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

    1. 操作要测试的apk

    2. cmd窗口输入命令:adb shell dumpsys gfxinfo packageName

    3. 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比

    含义:

  • Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。

  • Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。

  • Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。

  • Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧。

    5)通过execl进行表格处理可以直观的查看软件的流畅度

  1. 除了使用adb shell, 还可以直接使用开发者选项自带的图表

    1)打开手机:开发者选项—>profile GPU rendering —> on screen as bars

    1. 操作被测的软件

    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
    

本文原文来自CSDN

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号