Skip to main content

The Execution Engine

Welcome to the Execution Engine documentation!

Rumour uses a highly deterministic, graph-based execution engine that automatically infers the correct order of operations based on your variables and explicit dependencies.

1. Variable Resolution Hierarchy

Variables are at the core of Rumour. When a request is evaluated, Rumour resolves variables in the following strict priority order (from highest to lowest precedence):

  1. CLI Overrides: Variables explicitly passed during runtime via the command line (--var key=value).
  2. Local Request Variables: Variables defined within the [variables] table in the specific .toml node currently executing.
  3. Environment Files: Variables loaded from workspace.env.toml or custom environment files provided via --env-file.
  4. Exported Dependencies: Variables that were exported from previous requests in the dependency chain using the [extract] block.
  5. System Environment Variables: OS-level environment variables (useful for CI/CD secrets).

Variable Substitution

You can inject variables into URLs, Headers, Bodies, or even assertions using the double-brace syntax: {{variable_name}}.

[request]
method = "POST"
url = "{{base_url}}/api/{{version}}/users"

The {{random}} Keyword

Rumour provides a built-in {{random}} variable that automatically generates a unique alphanumeric string on every execution. This is perfect for creating unique emails, usernames, or transaction IDs.

[body]
type = "json"
raw = '{"email": "user-{{random}}@swahira.io"}'

2. Dependency Resolution

Explicit Dependencies

If get_user.toml requires a user to be created first, you declare the dependency explicitly. Rumour will automatically wait to run get_user.toml until create_user.toml has successfully completed.

get_user.toml:

[dependencies]
"create_user.toml" = ["user_id"]

[request]
method = "GET"
url = "{{base_url}}/users/{{user_id}}"

Implicit Dependencies via Vault/Environment

If a variable isn't mapped in [dependencies], Rumour will attempt to resolve it from the environment or Vault. If the variable is missing completely, the request will immediately fail before network execution.

3. Parallel Execution (--parallel)

Because Rumour understands exactly which requests depend on which other requests, it can automatically determine which nodes are completely independent.

By running with the --parallel (or -p) flag, Rumour will group the execution graph into "levels" and execute all independent requests simultaneously, vastly accelerating test suites.

rumour run ./integration_tests/ -p --concurrency 20
  • Safety Guarantee: Rumour guarantees that a dependent request will never execute before its parent has finished and exported the necessary variables, even in parallel mode.
  • Concurrency Control: The --concurrency flag sets the absolute maximum number of simultaneous network connections Rumour is allowed to open.

4. Execution Step Mode (--step)

When writing complex workflows, debugging variable extraction can be tricky. You can use the --step flag to force Rumour to pause execution after every single request and wait for your explicit confirmation before proceeding.

rumour run ./complex_flow/ --step

This acts as a debugger for your test suites, allowing you to inspect logs, database state, or external side-effects between each API call.