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):
- CLI Overrides: Variables explicitly passed during runtime via the command line (
--var key=value). - Local Request Variables: Variables defined within the
[variables]table in the specific.tomlnode currently executing. - Environment Files: Variables loaded from
workspace.env.tomlor custom environment files provided via--env-file. - Exported Dependencies: Variables that were exported from previous requests in the dependency chain using the
[extract]block. - 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
--concurrencyflag 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.