Skip to main content
Version: v4 (current)

Test Workflow Engine

Orchestrator includes a test workflow engine that supports YAML-based test suite definitions, multi-dimensional taxonomy filtering, and structured test result reporting.

Overview

Instead of running tests via a single buildMethod, the test workflow engine lets you define test suites as YAML configurations — specifying exactly which tests run for each CI event, filtered by taxonomy metadata, with sequential execution dependencies.

Test Suite Definitions

Test suites are YAML files that define ordered runs with filters:

name: pull-request
description: Fast feedback for pull requests
runs:
- name: fast
editMode: true
filters:
Maturity: Trusted
FeedbackSpeed: Fast,Moderate
Scope: Unit,Integration
timeout: 300

- name: basic
needs: [fast]
editMode: true
playMode: true
filters:
Maturity: Trusted,Adolescent
Scope: Unit,Integration,System
timeout: 600

- name: extended
needs: [basic]
playMode: true
filters:
Rigor: Strict
Scope: End To End
timeout: 1200

Suite Fields

FieldDescription
nameSuite identifier, used for cache keys and reporting
descriptionHuman-readable description
runsOrdered list of test runs

Run Fields

FieldDescription
nameRun identifier
needsList of run names that must complete first
editModeRun Unity EditMode tests (default: false)
playModeRun Unity PlayMode tests (default: false)
builtClientRun tests against a built client (default: false)
filtersTaxonomy filters to select tests
timeoutMaximum run duration in seconds

Taxonomy Filters

Tests are categorized by multi-dimensional taxonomy metadata. Filters select tests by matching against these dimensions:

Built-in Dimensions

DimensionValuesDescription
ScopeUnit, Integration, System, End To EndTest boundary
MaturityTrusted, Adolescent, ExperimentalTest reliability
FeedbackSpeedFast, Moderate, SlowExpected execution time
ExecutionSynchronous, Asynchronous, CoroutineExecution model
RigorStrict, Normal, RelaxedAssertion strictness
DeterminismDeterministic, NonDeterministicRepeatability
IsolationLevelFull, Partial, NoneExternal dependency isolation

Filter Syntax

Filters accept comma-separated values, regex patterns, and hierarchical dot-notation:

filters:
Scope: Unit,Integration # Match any of these values
Maturity: /Trusted|Adolescent/ # Regex pattern
Domain: Combat.Melee # Hierarchical match

Custom Dimensions

Projects can define additional taxonomy dimensions via a taxonomy definition file:

# .game-ci/taxonomy.yml
extensible_groups:
- name: SubjectLevel
values: [Class, Feature, System, Product]
- name: DataScenario
values: [HappyPath, EdgeCase, BoundaryValue, ErrorPath]

Test Execution

EditMode Tests

Standard Unity Test Framework tests that run in the editor without entering play mode:

- uses: game-ci/unity-builder@v4
with:
testSuitePath: .game-ci/test-suites/pr-suite.yml
testSuiteEvent: pr
targetPlatform: StandaloneLinux64

PlayMode Tests

Unity tests that require entering play mode:

runs:
- name: playmode-tests
playMode: true
filters:
Scope: Integration,System

Built-Client Tests

Run tests against a previously built game client. Requires a build step before the test step:

runs:
- name: client-tests
builtClient: true
builtClientPath: ./Builds/StandaloneLinux64
filters:
Scope: End To End

Structured Results

Test results are output in machine-readable formats:

- uses: game-ci/unity-builder@v4
with:
testSuitePath: .game-ci/test-suites/pr-suite.yml
testResultFormat: junit # junit, json, or both
testResultPath: ./test-results/

Results integrate with GitHub Checks for inline failure reporting on pull requests.

Inputs Reference

InputDescription
testSuitePathPath to YAML test suite definition file
testSuiteEventCI event name for suite selection (pr, push, release)
testTaxonomyPathPath to custom taxonomy definition YAML
testResultFormatOutput format: junit, json, or both
testResultPathDirectory for structured result output