性能测试
1. 性能测试指标
- 内存
- CPU
- 流量
- 电量
- 启动速度
- 流畅度等
2. 测试的关注点
- APP的启动时间是否过长
- APP使用时对CPU、内存的占用情况
- APP使用时,电量流量的消耗情况
- APP使用是否流畅等
- 反复长期的操作情况下,系统资源的使用情况
3. 性能测试工具GT
GT(随身调),安卓版是腾讯MIG专项测试组自行研发的APP随身调测平台,是直接运行在手机上的“集成调测环境“,可以使用GT完成以下测试工作:
- 基础性能测试:手机整机或手机上安装的任何APP的CPU、内存、网络流量、流畅度/帧率、电量等基础性能指标的实时展示、历史数据采集、excel格式存储、曲线绘制等
- 查看日志
- 抓包:直接用手机抓包保存成pcap文件,在PC端用Wireshark查看
(1)GT安装方法:
- 像普通APP一样独立安装(只有APK版本)
- GT SDK:将GT SDK嵌入到被调测的应用程序工程中
- 下载地址:https://github.com/Tencent/GT/releases/tag/v3.1.0
(2)GT工具的使用(部分功能需要root权限):
- step1:进入AUT界面,选择被测程序和测试指标
- 内存指标:
- PSS:实际使用内存;
- private dirty:私有内存
- 其他指标:
- CPU
- jiffies:CPU的时间片
- Net:网络相关指标
- 内存指标:
- step2:设置参数,点击右上角的编辑按钮,选择想测试的参数,将其拖入已关注区域,点击完成按钮,勾选已关注的参数,点击右上角红点开始监控
- step3:测试前可打开日志抓取,方便问题定位
- step4:开始监控后,打开被测APP,悬浮窗会出现在被测APP上方
- step5:查看数据采集结果
- step6:查看运行日志
4. CPU测试
(1)GT 的两个CPU性能监控指标:CPU 和 jiffies
1)CPU:
-
整机的CPU使用水平,即当前手机的CPU整体使用率。
-
计算公式:
- android系统基于Linux系统,在Linux系统下,CPU利用率分为用户态、系统态和空闲态
- 用户态:表示CPU处于应用程序执行的时间(手机上安装的程序使用CPU的时间)
- 系统态:表示系统内核执行的时间(手机系统在控制电池消耗、屏幕显示、数据读写时使用CPU的时间)
- 空闲态:表示空闲系统进程执行的时间(没有任何程序运行,启动idle进程,idle进程占用CPU,不执行任何操作,若有应用程序启动或操作系统任务即将执行,idle进程将释放CPU给用户进程或系统进程)
- CPU使用率 = CPU执行非系统空闲进程 / CPU总的执行时间
- 即 CPU使用率 = (用户态 + 系统态) / (用户态 + 系统态 + 空闲态)
2)jiffies:
- 表示自开机以来,应用程序消耗的CPU时间片总数(CPU在工作的时候会划分为若干个时间片,每个时间片的时间间隔以微秒记)
- android系统基于Linux系统,在Linux系统下,CPU利用率分为用户态、系统态和空闲态
(2)CPU问题产生的现象:
- CPU使用长时间处于90%以上
- 手机发热,耗电量增加
- 反应变慢,引起ANR(应用程序没有响应)
(3)CPU测试方法:
- step1:打开GT,配置CPU监控指标(可配置告警阈值)
- step2:进入待测APP进行业务操作
- step3:进入GT,观察待测APP运行时CPU指标变化:
- CPU是否有快速飙升
- CPU使用率是否长时间90%以上
- step4: 保存CPU详细数据并分析
5. 内存
(1)GT的两个内存监控指标:PSS 和 Private dirty:
- PSS(实际使用内存):私有内存 与 共享内存之和;有一块内存空间是供所有程序一起使用的,即共享内存。进程占用的共享内存在进程销毁时,不会回收内存容量,会分配给其他进程
- Private dirty(私有内存):进程独占内存,即进程销毁时可以回收的内存容量
(2)常见的内存问题
- 内存溢出(out of memory),指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory
- 内存泄漏(memory leak),指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后会导致内存被占光;内存泄漏最终将导致内存溢出。
(3)内存问题产生的现象
- 程序实际使用内存PSS持续增长
- 程序出现crash(内存溢出通常导致程序crash)
(4)内存测试方法:
- step1:打开GT,配置内存监控指标(可配置告警阈值)
- step2:进入待测APP进行业务操作
- step3:进入GT,观察待测APP运行时内存指标变化:
- 程序实际使用内存PSS是否持续增长
- 程序是否出现crash
- step4: 保存CPU详细数据并分析
6. 流畅度
(1)GT的流畅度指标:FPS:
- FPS,即每秒的帧率,GPU在一秒内绘制的帧数
- 动画片由一张张图片连贯执行产生动画效果,当每张图片间切换速度足够快的时候,会欺骗人眼,形成动画。图片切换不够快的时候,反馈给用户的就是卡顿现象
(2)流畅度问题产生的现象:
- 要达到至少每秒10-12帧的速度,大脑才会将觉得动作是连续的
- 至少每秒24帧的速度,才能达到流畅的效果
- 最佳的流畅度是每秒60帧
- 通常要求FPS在24帧/s以上,最低不能低于10帧/s,最高不超过10帧/s
(3)流畅度测试方法:
- step1:打开GT,配置流畅度监控指标
- step2:进入待测APP进行业务操作(主要针对上下滑动等)
- step3:进入GT,观察待测APP运行时流畅度运行结果
- step4: 保存流畅度详细数据,计算平均值(FPS是否在24帧/s—60帧/s)
7. 流量
(1)GT的流量监控指标:NET:
- 手机通过运营商网络访问Internet,运营商替我们的手机转发数据报文,数据报文包含手机上下行报文,数据报文的总大小(字节数)即流量。
- 上行消息:APP发往应用服务器的消息
- 上行流量:上行消息总大小
- 下行消息:服务器发给APP的消息
- 下行流量:下行消息总大小
(2)常用的流量测试方法:
- 统计测试法:获取应用程序收发数据的报文,统计出对应的流量
- 抓包测试法:利用工具抓包,如fiddler 或 Tcpdump,导出pcap文件后在Wireshark中打开
(3)流量测试方法:
- step1:打开GT,配置流量监控指标NET
- step2:进入tab,选择抓包以获取业务测试报文(抓包参数配置为:-p -s 0 -vv -w)
- step2: 进入待测APP进行业务操作
- step4:查看流量统计结果
- step5: 操作结束后进入抓包插件,停止报文获取
- step6: 保存流量详细数据并分析
(4) 流量优化方法(主要优化服务器下发数据):
- 压缩数据
- 采用不同数据格式(使用普通图片而非高清图)
- 控制访问频次(控制向服务器请求数据的次数)
- 只获取必要的数据(比如访问知乎,不获取知乎详情页的数据)
- 利用缓存
- 针对不同的网络设置不同的访问策略(WI-FI:高清图;4G:缩略图)
8. 电量
(1)GT的流量监控指标:电流、电压、电量、温度:
- 电量测试:移动设备电量消耗快慢的一种测试方法。一般用平均电流衡量电量消耗速度;平均电流越小,说明设备使用时间越长。
(2)常见耗电场景:
- 定位(尤其调用GPS定位)
- 网络传输(尤其非WI-FI环境)
- 屏幕亮度
- CPU频率
- 内存调度频率(内存调度频繁时,CPU消耗一般较高)
- wake_locker(锁屏和重新解锁屏幕)时间和次数
(3)电量测试方法:
- step1: 打开GT,进入插件tab,点击耗电数据采集
- step2: 选择采样频率、屏幕亮度和采集参数
- step3: 进入待测APP进行业务操作
- step4: 测试完成后,回到参数页面,点击停止录制
- step5: 保存电量数据并分析
(4)电量测试结果分析
- 与基准数据对比(基准数据来自于产品经理或历史数据积累)
- 横向对比,与竞品电量消耗数据对比分析(目前采用最多);在同样的网络、手机,相似的测试场景下对竞品进行测试,对比自有产品和竞品在耗电量方面的差距,给出优化建议
9. 启动速度
(1)冷启动和热启动
- 冷启动:app被后台杀死后,在这个状态打开app
- 热启动:app仍在后台运行,再次打开app
(2)测试方法
- 使用命令:abd shell am start -W -n 包名/Activity名
- 包名:应用程序包名具有唯一性
- Activity名:页面名
- 上述命令获取3个指标:
- thistime:表示一连串启动Activity的最后一个Activity启动耗时,一般<=Total Time时间(当前Activity页面的时间)
- Total Time:应用的启动时间,包括创建进程、APP初始化、Activity初始化到页面显示
- Wait Time:前一个应用Activity pause的时间+Total Time
(3)启动时间测试结果分析
- 与基准数据对比(基准数据来自于产品经理或历史数据积累)
- 横向对比,与竞品启动时间数据对比分析(目前采用最多);在同样的网络、手机,相似的测试场景下对竞品进行测试,对比自有产品和竞品在启动时间方面的差距,给出优化建议