概念页
自动化测试
Automation Testing
UE 的自动化系统 (Automation System) 构建在功能测试框架之上,支持单元测试、功能测试、内容压力测试和截图对比,并借助 Unreal Message Bus 提高稳定性。测试按用途分为 Unit、Feature、Smoke(承诺 1 秒内完成)、Content Stress 和 Screenshot Comparison。它依赖引擎系统运行,所以不适合纯粹的单元测试;这种情况用 Low-Level Tests。跨进程的整局会话测试用 Gauntlet。
测试类型
| 类型 | 说明 |
|---|---|
| Unit | API 层面的验证测试 |
| Feature | 系统级测试,例如 PIE、游戏内统计、切换分辨率 |
| Smoke | 实现者对「速度」的承诺:所有 Smoke 测试都应在 1 秒内完成,只把单元测试或很快的功能测试标为 Smoke |
| Content Stress | 对某个系统做更彻底的测试以避免崩溃,例如加载所有地图、加载并编译所有蓝图 |
| Screenshot Comparison | 对比截图,快速发现不同版本或构建之间的渲染问题 |
(Automation Test Framework in Unreal Engine)
框架家族
flowchart TD AF["Automation Test Framework<br/>基于功能测试框架,借助 Message Bus"] --> SP["Automation Spec<br/>行为驱动开发 BDD"] AF --> FT["Functional Testing<br/>用蓝图做关卡测试"] AF --> SC["Screenshot Comparison Tool"] LL["Low-Level Tests<br/>纯单元测试"] -."不依赖引擎系统".- AF G["Gauntlet<br/>运行项目会话并验证结果"] --> AF
图中 Automation Test Framework 是核心,下面挂着 Spec、功能测试和截图工具;Low-Level Tests 用于不依赖引擎的纯单元测试;Gauntlet 负责运行整局项目会话。
- 自动化测试框架依赖引擎系统才能正常工作,所以不适合纯单元测试,那种情况应使用 Low-Level Tests。(Automation Test Framework in Unreal Engine)
- 大多数测试会是功能测试,或者需要用自动化框架编写的底层核心/编辑器测试。(Automation Test Framework in Unreal Engine)
实践
- 「加载所有地图、编译所有蓝图」这类内容压力测试很适合放进每日构建(CI),在烘焙或打包之前尽早发现坏资产(见 烘焙、打包与 Zen 加载器;这是工程归纳)。
- 截图对比可以捕捉渲染回归;难以复现的玩法 bug 先用 Gameplay 调试器与可视化日志 定位,修复后再补测试。
- Smoke 测试一定要快,否则会拖慢每次提交都要跑的检查。(Automation Test Framework in Unreal Engine 的 1 秒规则)
出处
相关页面
游戏开发 · UE5Gameplay 调试器与可视化日志Gameplay Debugger & Visual LoggerGameplay 调试器 (GDT) 用于在运行时实时查看玩法数据(Pawn、AIController、行为树与黑板、EQS、感知、导航网格),联网时客户端也能看,并且只复制已启用类别的数据。可视化日志 (Visual Logger) 则把 Actor 的状态和图形化信息录下来,之后在编辑器里按时间轴来回拖动查看,适合排查难以复现的 bug。游戏开发 · UE5编辑器扩展与 Python 脚本Editor Extension & Python Scripting扩展 UE 编辑器有三条主要路线,门槛由低到高:Python 脚本(只在编辑器中可用,适合批量处理资产和串联外部 DCC 管线)、Editor Utility Widget(基于 UMG 的蓝图编辑器界面,做成自定义标签页),以及 C++ 编辑器插件(如 Editor Standalone Window 模板,用 Slate 的声明式语法构建窗口)。游戏开发 · UE5烘焙、打包与 Zen 加载器Cooking, Packaging & Zen Loader打包是一组构建操作:编译 (Build) → 烘焙 (Cook,把资产转成目标平台格式) → 暂存 (Stage) → 打包 (Package) → 可选的部署 (Deploy)。UE5 的运行时加载器 Zen Loader 会在暂存阶段离线算好包与对象的依赖图,并把数据装进 .utoc/.ucas 容器(IoStore),由 I/O 分发器以很低的 CPU 开销定位数据块;.pak 只用于不常访问的零散文件。游戏开发 · UE5Live Coding 实时编译Live CodingLive Coding 集成了 Live++,在引擎运行时重新编译 C++ 并给二进制打补丁;它比旧的 Hot Reload 快得多、也更灵活,新安装默认启用,快捷键 Ctrl+Alt+F11。默认开启的「对象重实例化 (Object Reinstancing)」会替换掉现有的 UCLASS/USTRUCT 等对象实例,从而支持新增函数、变量这类结构性修改;关闭它时只适合小改动,大改通常会崩溃。坑:在 .cpp 构造函数里改的默认值不会作用到已存在的实例。游戏开发错误处理与断言Error Handling & AssertionsGEA 把错误分为用户错误和程序员错误,两者处理方式相反:用户错误要尽量平稳地告知并继续,程序员错误应立即停机并给出详细的底层信息。“用户”又分玩家和制作游戏的开发者。实现手段有错误返回码、异常和断言。Naughty Dog、EA、Midway、Insomniac 等在运行时代码中通常关闭 C++ 异常,靠断言和静态断言 (staticassert) 捕获 bug,并用 RAII(Naughty Dog 称为 janitor)管理资源。