Skip to content

Configuration Language in Testform

The Testform Configuration Language is the declarative interface for specifying test scenarios, dependencies, data fixtures, and quality orchestration following the Test-as-Code (TaC) paradigm.

Just as Terraform Language allows you to model cloud infrastructure through declarative configuration blocks, Testform enables modeling software verification intent by blending universal Gherkin readability with the declarative power of YAML.


  1. Declarative over Imperative: Describe the desired verification state (Given, When, Then), not fragile glue code or procedural scripts.
  2. Git Versioned: The entire testing ecosystem (scenarios, variables, fixtures, assertions, and outputs) lives inside your repository as auditable source code.
  3. Deterministic State Management: A dedicated state file (testform.state) records the outcome and attributes of every test resource for incremental planning.
  4. Modular Composition: Reuse full suites or parameterized step libraries using the @module meta-argument with local paths or remote Git repositories.

The sidebar navigation mirrors Terraform’s core structure, tailored to Testform’s active capabilities:

graph TD
A[main.yml] --> B[Configure Providers]
B --> C[Resources: Scenarios & Steps]
C --> D[Data Sources & Variables]
D --> E[Locals & Expressions]
C --> F[Meta-arguments: depends_on & lifecycle]
C --> G[Modules: Local & Git]
C --> H[Outputs]
H --> I[State: Ledger & Locking]
I --> J[Test and Validate]

Configuring quality management platforms (github, gitlab, jira, local) in main.yml.

Gherkin scenarios and steps serve as declarative resources with canonical addresses (featurepath.tag) and managed lifecycles.

Read-only data fixtures (data.yml, JSON/YAML files) accessible in step templates via ${data.<source>.<key>}.

Input parameters configured via vars.yml, TF_VAR_* environment variables, and CLI flags.

Named calculated values defined in local.yml and locals: blocks to simplify repeated expressions.

Values extracted during tests, persisted in state, and accessible via testform output or ${module.<name>.<output>}.

Packaging and sharing test suites via @module, supporting Git registries and input parameter passing with variable={...}.

Directives altering scenario orchestration:

  • depends_on: Directed acyclic graph (DAG) ordering dependencies between tests.
  • lifecycle: Guarding critical tests (prevent_destroy) and ignoring dynamic attributes (ignore_changes).

Resource discovery and status filtering with testform query and remote issue adoption with testform import.

State ledger (testform.state), distributed locking (testform.state.lock), and drift detection.

Static analysis with testform validate and speculative previews with testform plan prior to execution.