Author and run Unreal Engine's Automation Test Framework - Epic's C++ test framework for UE 4.x / 5.x, documented at dev.epicgames.com/documentation/en-us/unreal-engine. Covers the five test categories Epic defines (Unit / Feature / Smoke / Content Stress / Screenshot Comparison), the IMPLEMENT_SIMPLE_AUTOMATION_TEST and IMPLEMENT_COMPLEX_AUTOMATION_TEST macros, the BDD-style Automation Spec API (DEFINE_SPEC / BEGIN_DEFINE_SPEC / Describe / It / BeforeEach / LatentIt / xIt), latent commands (ADD_LATENT_AUTOMATION_COMMAND), the Automation Driver for UI input simulation (IAutomationDriverModule::Get().CreateDriver(), By::Id / By::Path locators), running via Session Frontend (Window > Test Automation) and command line (-ExecCmds="Automation RunTests …"), and CI integration. Use when the unit under test is C++ Unreal code that needs the UE runtime, editor, or UMG UI surface.
74
93%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
This skill wraps the C++ Automation Test Framework (UE 4.x / 5.x) plus the two most commonly composed sub-systems. Per Epic's Automation Test Framework documentation, the framework spans five test categories (Unit, Feature, Smoke, Content Stress, Screenshot Comparison) and supports multiple authoring styles (traditional, BDD Spec, UI Driver, Functional, Python / Blueprint).
Describe / It /
BeforeEach per
Automation Spec documentation.The full authoring code (macros, Spec, Driver) lives in references/authoring-macros-and-apis.md; running, report parsing, and CI wiring live in references/running-and-reporting.md. This file is the decision surface.
Composes with:
game-test-categories-reference
for the canonical six categories Unreal's five categories map to.platform-cert-overview-reference
for cert-gated requirements automation tests should cover.multiplayer-state-machine-coverage
for replication / dedicated-server state coverage authored as
automation tests.For Python / Blueprint editor tests outside C++, see Editor Automation in Unreal Engine. For end-to-end pipeline / build-farm orchestration, use Gauntlet on top of the framework this skill covers.
EAutomationTestFlags filter + application-context mask.RunTest macro, data-driven
complex macro, BDD Spec, or Automation Driver for UI - and lift
the pattern from
references/authoring-macros-and-apis.md.MyGame.Health.Damage_…); the tree keys the Session Frontend.UnrealEditor-Cmd.exe … -ExecCmds="Automation RunTests …" for CI.-ReportOutputPath JSON - treat any
"state": "Fail" as a failed build; full schema in
references/running-and-reporting.md.SmokeFilter on PRs (sub-second),
ProductFilter | StressFilter plus screenshot comparison nightly.Per the Automation Test Framework page, Epic's five categories are:
| Category | Purpose |
|---|---|
| Unit | "API level verification tests." |
| Feature | "System-level tests that verify such things as PIE, in-game stats, and changing resolution." |
| Smoke | Tests that "complete within 1 second" and run automatically. |
| Content Stress | "More thorough testing of a particular system to avoid crashes." |
| Screenshot Comparison | For comparing renders "between versions or builds". |
Each test declares flags from EAutomationTestFlags that mix:
SmokeFilter, EngineFilter, ProductFilter,
PerfFilter, StressFilter, NegativeFilter.EditorContext, ClientContext,
ServerContext, CommandletContext, plus the convenience mask
ApplicationContextMask.Typical combo for a product-level test runnable in editor / client
/ server contexts:
EAutomationTestFlags::ProductFilter | EAutomationTestFlags::ApplicationContextMask.
Pick the style that matches the unit under test, then lift the full pattern from references/authoring-macros-and-apis.md:
| Style | Macro / API | Use when |
|---|---|---|
| Simple test | IMPLEMENT_SIMPLE_AUTOMATION_TEST + RunTest | One assertion body over plain C++ |
| Data-driven | IMPLEMENT_COMPLEX_AUTOMATION_TEST + GetTests | One sub-test per enumerated row (assets, configs) |
| Multi-frame | ADD_LATENT_AUTOMATION_COMMAND | Test must yield to the tick loop across frames |
| BDD Spec | DEFINE_SPEC / BEGIN_DEFINE_SPEC + Describe / It / LatentIt | Readable specs; .spec.cpp files; async via FDoneDelegate |
| UI Driver | IAutomationDriverModule::Get().CreateDriver() + By::Id | Simulate cursor / click / type on UMG; runs off the GameThread |
Iterate in-editor via Window → Test Automation (Session Frontend), then run headless for CI:
UnrealEditor-Cmd.exe MyGame.uproject \
-ExecCmds="Automation RunTests MyGame.Inventory; Quit" \
-unattended -nopause -testexit="Automation Test Queue Empty" \
-ReportOutputPath="artifacts/automation" \
-logCommand variants, the -ReportOutputPath JSON schema, Gauntlet, and
a full GitHub Actions job are in
references/running-and-reporting.md.
Goal: cover an inventory system's stacking rule as a CI-gating BDD spec, plus a menu-close UI check.
ProductFilter | ApplicationContextMask; it runs in well
under a second, so a second SmokeFilter copy joins the PR job.FInventorySpec with DEFINE_SPEC and a
Describe("AddItem") block holding two It("should …") cases -
one asserting count increases by the stack amount, one asserting
an over-cap add is rejected (pattern in
references/authoring-macros-and-apis.md).
Save it as InventorySpec.spec.cpp.FMenuDriverSpec with the Driver enabled in
BeforeEach on TaskGraphMainThread, the It running on
EAsyncExecution::ThreadPool, By::Id("SubmitButton") clicked,
and Disable() in AfterEach.UnrealEditor-Cmd.exe MyGame.uproject -ExecCmds="Automation RunTests MyGame.Inventory; Quit" -unattended -nopause -ReportOutputPath="artifacts/automation" -log.artifacts/automation/index.json; the
over-cap It shows "state": "Fail" when the rule regresses, so
the job fails the build. Nightly re-runs the same specs under
ProductFilter | StressFilter.| Anti-pattern | Why it fails | Fix |
|---|---|---|
All tests as SmokeFilter | Smoke tests "complete within 1 second" per framework docs - long tests break the smoke contract | Use ProductFilter for tests > 1 s |
| Running Automation Driver on GameThread | API "cannot run on the GameThread" per Driver docs | Use EAsyncExecution::ThreadPool on the driver-using It |
Spec without It descriptions starting with "should" | Runner output reads poorly | Per Spec docs, start descriptions with "should" |
Trusting By::Path locators | "Brittle" per Driver docs | Prefer By::Id with tagged metadata |
Sleep-style waits in latent commands | Flaky under CI load | Use FDoneDelegate (LatentIt) or custom IAutomationLatentCommand::Update() polling |
Spec test file without .spec.cpp extension | Build system may not pick it up | Per Spec docs, use .spec.cpp suffix and no "Test" in filename |
Cloning non-thread-safe shared pointers in async It | Crash under threadpool | Per Driver docs, cache them on the test class |
No BeforeEach / AfterEach cleanup of IAutomationDriverModule | Driver state leaks between specs | Pair Enable() / Disable() calls in BeforeEach / AfterEach per Driver docs |
-ReportOutputPath JSON or scrape the log for
LogAutomationController Fail lines.[TestCase] analogue from NUnit. The framework is
NUnit-inspired but not NUnit-derived (unlike Unity's UTF).EditorContext on those tests; client / server
tests need their own flag set.Engine/Source/Runtime/AutomationController/ and
Engine/Source/Developer/AutomationMessages/ - partners with
engine source access should consult those for authoritative
details.game-test-categories-reference.platform-cert-overview-reference.multiplayer-state-machine-coverage.