1.性能测试目的
优化应用程序,提高用户使用体验
2.性能测试指标
CPU
主要关注CPU使用率,CPU使用率过高会导致ANR、Crash、设备发热等问题
长时间情况下,CPU占有率应≤85%
GPU
主要关注GPU是否过度绘制,通常有如下情况:
一个像素点绘制了多次,过度绘制会影响动画性能,使其不流畅
主线程中执行了太多任务,UI渲染跟不上Sync信号而导致掉帧、卡顿
App响应时间
常见指标如下:
优秀:0~0.4s
标准:0.4~2s
隐患:2~5s
严重:≥ 5s
或者业界流行的2-5-8s原则
优化注意点:减少cookie 大小、使用更少的URL重定向、消除Flash等组件
流畅度FPS
指的是画面每秒传输帧数,每秒帧数越多,所显示的动作就会越流畅,由于功耗与显示设备的限制
一般Android设备的屏幕刷新率为60帧/s,若要保特面面流畅不卡顿,应保证每帧的渲染时间不超过
1000/60=16ms
Crash
通常崩溃率是指每次应用加载的平均崩溃率。移动设备的典型崩溃率为1-2%,但可能会因APP类型、
APP使用情况、成熟度等而不同,应始终以 98% 的无崩溃用户为目标。
耗电量
移动应用耗电量测试仅在必要时优化App以降低耗电量,还应尽量减少后台活动
内存占用率
在Android系统中,每个APP进程除了同其他进程共享内存(shared dirty)外,还有私有内存(private
dirty),通常我们使用 PSS(私有内存+比例分配共享内存)来衡量APP 的内存开销。
由于移动设备的内存是固定的,APP在运行时会和其他后台APP竞争,如果内存消耗过大就会造成应用
卡顿或被操作系统终止(闪退),应保证应用不占用过多的内存资源,且能够及时释放内存,以保证整个
应用内的稳定性和流畅性,以减少APP的内存占用。
内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存占用率应≤85%
流量
目前的网络类型包含2G、3G、4G、5G、WiFi,并且还有不同运营商的区分,APP在使用中经常遇到大
资源,重复请求,调用响应慢,调用失败等情况。在不同的网络类型之下,我们不仅加快请求的响应,
还要控制流量使用。每秒钟平均流量,建议值<5.12kb;每10分钟平均流量,建议值<3MB。并且不存在
App偷跑流量等行为。
碎片化
主要指不同品牌、机型、CPU、内存、操作系统、系统版本、分辨率、屏幕尺寸等情况下的性能表现
3.性能测试流程
前置准备(40%)
1)性能需求分析
包含内容如下:
-
性能测试或调优目标确认
-
系统背景相关信息确认
-
被测系统的业务场景确认
-
测试风险确认
2)定义测试性能目标
3)确定测试用例 KPI
如下 KPI 可以帮助衡量测试的有效性:
-
平均响应时间
-
峰值响应时间
-
错误率
-
并发用户数
-
每秒请求数
-
吞吐量
4)确定场景及优先级
App性能测试清单:
-
使用此APP需要多少 RAM?
-
验证APP在不同网络和环境下的速度和响应时间
-
在多种网络条件下确保真实的用户体验
-
确保在多个连接的情况下实现所需的结果
-
确保APP不会崩溃。
-
确保APP程序在使用数据、WiFi或其他连接时表现良好
-
监控正常运行时间和移动API使用瓶颈
-
确定最大并发用户数
-
检查App程序的极限
5)设置App性能测试环境
步骤如下:
-
了解需要测试的App程序
-
识别APP需要在其上运行的不同操作系统版本
-
构建测试设置
-
构建模拟器或模拟器
-
实际设置的原型
-
选择合适的测试工具
6)测试与研发协调
性能测试通常由自动化支撑来实现APP在软件生命周期中的持续测试,测试方法与APP开发方法应保持
一致,这样有助于测试目标和测试基准统一,有助于实现APP愿景和业务战略
7)考虑运营商网络的延迟和带宽
网络
APP需要在各种速度可变的网络上进行检查,并且考虑网络切换时的场景
抖动
响应时发生延迟时对理想时间位置上出现短期的偏离称为抖动。我们要确保当随机抖动出现时,App程
序应可以处理它,通常是告知用户需要重新发送请求或等待系统再次响应。
数据包丢失
在完全丢包的情况下,APP应该能够重新发送信息请求或相应地生成警报。
测试执行(30%)
性能测试需求目标和场景确认完成后,需挑选合适的自动化测试工具,推荐如下:
-
Appium
-
Robotium
-
Selendroid
-
SauceLabs
-
JMeter
结果分析(30%)
4.性能测试结果
1)测试结果报告
性能测试结束后会生成测试报告,一般分为三个部分:
-
基础信息:包名、版本号、提交时间
-
检测结果:如果下方检测项出现错误,则在检测结果上提示哪台手机出现错误
-
各设备检测结果:选择的机型中各个设备的检测结果
2)设备检测结果
设备信息:安卓版本、分辨率、运行内存、内部储存空间、屏幕大小
设备性能参数:再次启动时间、列表滑动帧率、CPU 占用率、FPS、内存占有率
3)重要检测项
首次启动时间
首次启动耗时下限设定为 4000ms,耗时过长,会导致用户看到白屏或者内容有缺失。建议检查加载过
程中的所有操作,看是否存在请求耗时过长,或者一次性渲染数据过大等情况
内存占用
内存占用下限设定为 600M;需检查是否有耗内存的操作如:内存泄漏、没有复用的超长列表、很多大尺寸图片等
其他重要检测项目
-
是否成功安装
-
是否成功启动
-
是否有卡死现象
-
是否有崩溃现象
-
是否成功卸载
-
是否正常运行
-
是否出现黑屏或者白屏异常
4)生成测试报告
自动生成测试报告或通过excel表里面的数据,制作折线图、柱状图。此时作为测试人员并不是提交这些
报告才算完工,我们还需要查看执行概览,测试结果,被测系统监控,错误日志,跟踪并分析日志等。
5)注意事项
-
一要看:测试环境是否正常
如果在测试过程中发生出现过异常,那么这样得出的结果往往不准确,无须进行分析
-
二要看:测试场景的设置是否正确与合理
测试场景的设置是否正确对测试结果有很大的影响。当测试出现异常时,需要分析是不是由于场景设置
不正确引起
-
三要看:负载生成器和服务器的系统资源情况
保证负载生成器在整个测试过程中的CPU、内存、带宽未触及到性能瓶颈,否则测试是无效的
-
四要看:错误发生曲线在整个测试过程中是否有规律变化
如果是则意味着程序存在一定的缺陷
5.场景问题分析
1)应用间互相影响
在与其他APP并行测试时,要做到不会干扰到其他APP运行。测试时需与其它应用之间进行切换,以监
控应用与其他应用的交互方式
2)卡顿分析
通常需要插桩技术,通过对线程任务分布,CPU利用率及颗粒度进行卡顿问题分析及线程堆栈信息收集
3)流畅性分析
保存FPS记录、记录动态视频信息数量,查看相关线性图
4)启动分析
自动化测试启动时间,启动阶段执行任务分析、线程创建情况分析
5)内存分析
查看内存多维度的指标,如Java Heap Dump内存数据,分析对象大小、内存泄漏问题,纹理分配数
量及占用内存,还原图片帮助归因
6)界面分析
UI自动化进行验收,视图拾取、点选视图、查看视图信息&修改视图属性,展示视图输等。界面层级结
构分析、视图归类分析等
7)崩溃分析