一、性能测试的目的
- 评估当前系统能力
- 评估产品是否满足未来的需求
它存在的意义,是为了让玩家的体验更稳定、更顺滑、更可靠。
当一款游戏能稳定输出帧率、控制发热、减少闪退,它带给玩家的“爽感”就会直接转化为留存和口碑。
反之,卡顿、掉帧、加载慢、崩溃,这些问题哪怕只出现几次,也足以让用户流失。
换句话说,性能测试是“体验的技术化表达”。
二、性能测试的目标与核心价值
性能测试的主要目标可以概括为以下几点:
- 保障流畅性与稳定性:确保游戏在各种设备、分辨率、帧率条件下稳定运行;
- 评估资源利用率:分析 CPU、GPU、内存、I/O 使用效率;
- 支撑版本优化:对比不同版本间性能变化,衡量优化效果;
- 辅助决策:通过数据帮助策划与研发确定合理的品质目标。
三、测试执行者与需求提出者
在项目中,性能测试往往涉及多个角色:
| 角色 | 职责 | 输出 |
|---|---|---|
| 产品/策划 | 提出体验目标 | 目标帧率、加载时间要求 |
| 客户端开发 | 实现与优化逻辑 | 优化方案、代码修复 |
| 技术美术(TA) | 管控渲染负载 | 模型、贴图、特效优化 |
| QA | 执行与分析 | 数据报告、瓶颈定位、建议 |
| 客户诉求 | - | 玩家对于产品的反馈 |
测试的职责,是在问题变成线上事故之前,识别风险、量化影响、推动修正。
四、性能测试的介入时机
| 阶段 | 目的 | 主要任务 |
|---|---|---|
| 开发中期(功能测试之后) | 模块评估 | 各场景性能采样、问题收集 |
| 版本提测 | 全面测试 | 运行数据收集、峰值分析 |
| 优化阶段 | 对比验证 | 优化前后数据对比 |
| 上线后 | 长期监控 | 回归验证、热更新后检查、bug反馈 |
五、工具链(以 UE 项目为例)
在 Unreal Engine 项目中,常用的性能分析工具包括:
| 工具 | 功能 | 应用场景 |
|---|---|---|
| Perfdog / adb | 真机性能采样 | FPS、Jank、内存、温度、功耗监控 |
| Unreal Insights | 逻辑性能分析 | 蓝图、线程耗时分析 |
| CrashSight(如出现客户端崩溃) | 崩溃捕获与日志收集 | 游戏客户端稳定性监控 |
六、核心性能指标体系
性能数据指标体系:
| 指标类别 | 关键参数 | 含义 |
|---|---|---|
| 流畅度 | FPS、FrameTime、Jank | 判断画面稳定性与卡顿 |
| 内存 | 实际内存、虚拟内存、均值、峰值 | 检查资源分配与泄漏 |
| CPU/GPU | 占用率、显存、Thread 耗时、DrawCall 数量 | 判断瓶颈位置 |
| 其他 | 温度、功耗、加载时间 | 检查可持续运行能力 |
真正的性能问题,往往不是单项异常,而是多指标叠加的结果。
FPS、CPU、GPU、Memory分析
FPS:帧率
帧率简单来说就是⼀秒内播放了多少帧的图⽚,如果说帧率越⾼那么代表画⾯越流畅,越清晰。
在性能参数中,关于FPS常见的参数就是AvgFPS(平均帧率)、VarFPS(掉帧次数,就是掉帧超过8的次数)、FPS>=18、FPS>=25、Jank、BigJank
Jank
1s内卡顿次数,帧率FPs高并不能反映流畅或不卡顿。比如
同时满足两条件,则认为是一次卡顿Jank
- 当前帧耗时>前三帧平均耗时2倍。
- 当前帧耗时>两帧电影帧耗时(1000ms/24*2=84ms)。
同时满足两条件,则认为是一次严重卡顿BigJank
- 当前帧耗时>前三帧平均耗时2倍
- 当前帧耗时>三帧电影帧耗时(1000ms/24*3=125ms)。
FTime(上下帧画面显示时间间隔,即认为帧耗时)
- Avg(FTime):平均帧耗时
- Delta(FTime):增量耗时(平均每小时两帧之间时间差〉100ms的次数)
CPU:中央处理器
在性能参数中,关于CPU常见的参数就是AvgAppCPU(APP平均CPU使⽤率)AppCPU<=60%、AppCPU<=80%、AvgCtemp
GPU:图像处理器
在性能参数中,关于GPU常见的参数只有就是AvgGUsage(平均GPU使⽤率)
Memory:内存
在性能参数中,关于Memory常见的参数就是AvgMemory(平均内存)、PeakMemory(峰值内存)
七、性能分析与瓶颈定位思路
性能分析一般分为三步:
- 采集数据:使用 Perfdog、adb等工具,获得 FPS、FrameTime、内存、功耗等基础数据;
- 对比分析:横向对比版本、纵向对比场景;
- 定位瓶颈:结合 UE 三线程机制,确认问题源头。
例如:
- Game Thread 过高 → 逻辑复杂、Tick 调用频繁;
- Draw Thread 过高 → 绘制对象过多、合批不足;
- GPU Thread 过高 → Shader、材质或光照负载大。
通过Insights 工具,可以进一步拆解每个阶段的时间分布。
八、关键测试场景设计
| 场景 | 测试目的 |
|---|---|
| 登录/主城 | 检查初始化与内存分配 |
| 战斗场景 | 测试 CPU/GPU 峰值压力 |
| 副本切换 | 验证资源回收与内存释放 |
| UI 跳转 | 检查动画与过渡性能 |
| 大地图巡航 | 观察加载策略与 I/O 延迟 |
每一个场景都应有固定的测试路线与采样时间,确保数据可对比。
九、报告编写与结果呈现
报告结构示例:
- 测试结论:
场景切换偶有卡顿(黑屏时间过长,期间内存波动时间长)
-
一级指标通过情况(简述):
- 地图1:表现良好
- 地图2:明显性能瓶颈(FPS低、卡顿多、CPU高、内存超预算)
- 地图3:整体稳定,可接受范围
指标 通过情况 结果描述 内存峰值 ❌ 地图2峰值812MB,超出800MB预算 CPU(avg) ❌ 地图2 CPU负载偏高,其余场景正常 FPS>50比例 ❌ 地图2帧率未达流畅标准 FPS均值 ❌ 地图2平均帧率仅46 严重卡顿/10min ❌ 地图2 BigJank达6次,影响流畅体验 -
各场景指标情况:

- 测试资源信息
- 设备信息
- 档次:二档
- 名称:
- OS版本:
- 包体信息
- 包版本:
- 测试人员
- 名字:
- 设备信息
十、性能基准与设备分级从哪里来
- 数据来源与参考指标:参考硬件排名、机型用户占比、主流厂商,并排除问题机型,平台支持按画质进行档位机型推荐
- 机型档位按芯片/处理器划分为一档、二档、三档,按不同档位划分FPS区间
常见策略:
高端机:60fps;
中端机:45fps;
低端机:30fps。
通过市场机型分布分析确定测试重点,目标是 80% 用户设备在目标帧率 ±5fps 范围内稳定运行。
- 版本优化前后对比:在当前版本中执行过一次性能测试后,记录一次性能数据,经过一版的优化后,执行相同的测试场景再次观察性能指标,进行前后对比,来评估优化后的效果。
- 竞品分析:在持有相同硬件条件的情况下,同步去记录性能数据,做产品的横向对比,来查看产品与竞品上横向的差距,来决定是否继续接着优化。
十一、内存泄漏测试与验证
设计固定用例检测泄漏趋势:
| 用例 | 步骤 | 检查点 |
|---|---|---|
| 副本往返 | 进副本 → 战斗 → 返回,循环20次 | 内存是否回落 |
| UI 测试 | 多界面反复切换 | 脚本堆内存释放 |
| 场景切换 | 大地图 ↔ 小关卡 | 资源卸载与缓存清理 |
如果内存曲线持续上涨且不回落,即为潜在泄漏。
十二、优化案例与常见手段
| 优化方向 | 方法 |
|---|---|
| CPU | 减少 Tick 调用、逻辑异步化 |
| GPU | 合批渲染、关闭冗余后处理 |
| 内存 | 延迟加载、资源回收机制 |
| I/O | Streaming 分区加载 |
| 性能调度 | 设备分级限帧、动态限帧、场景分级限帧 |
限帧目的以及方向:
一般来说
帧率越高→ 功耗上升 → 发热上升 → 降频 → 掉帧
限帧可以留出性能余量,提高帧时间稳定性
按机型分级限帧,如:
高端机:60fps
中端机:45fps
低端机:30fps
根据实时状态动态调整:
-
温度
-
电量
-
GPU利用率
-
场景负载
例如温度大于50,自动降至45
场景分级限帧:
-
主城 45fps
-
战斗 60fps
-
大厅 30fps
十三、模型面数与资源约束管理(目前正在学习)
面数直接影响 GPU 负载。
有项目中角色模型面数从 8 万提升到 20 万,GPU 耗时增加近一倍。
因此需要制定面数标准,并在导入时校验,结合 LOD 分级和剔除技术。
构建系统应对资源进行性能标记,不符合标准的禁止提交。
十四、敏捷流程下的性能专项规划
- 需求早期介入
- 自动化集成
- 迭代评审重视该专项
- 客户端性能与功能开发的资源竞争优先级划分
- 回顾改进
结语
性能测试的尽头,不是工具,而是判断力。
它要求测试者具备系统思维、沟通能力和对体验的敏感度。我正在努力培养这方面的能力。
稳定,是最难做到的体验。
而性能测试的意义,就是让这种稳定,成为理所当然。
部分信息可能已经过时