Environment-Based Testing
Welcome to the Environment-Based Testing documentation!
When developing an API, you rarely test against a single target. A typical lifecycle involves developing against localhost, verifying on a remote staging server, and running smoke tests against production.
Rumour's environment variables system makes it effortless to use the exact same .toml request definitions across multiple different environments without altering your test logic.
1. Defining Environment Files
By default, if Rumour finds a workspace.env.toml file in the directory (or a parent directory) of the executing workflow, it will automatically load it. However, you can create distinct environment files for different targets.
Staging Environment
staging.env.toml:
base_url = "https://staging.swahira.io/api"
api_key = "stg_ab12cd34"
db_timeout = 5000
Production Environment
production.env.toml:
base_url = "https://api.swahira.io/v1"
api_key = "prod_99zz88yy"
db_timeout = 2000
2. Using Variables in Workflows
Inside your test files, you reference the variables using standard {{}} interpolation. Note that we can even parameterize assertions (like enforcing a stricter timeout in production).
health_check.toml:
name = "System Health Check"
[request]
method = "GET"
url = "{{base_url}}/health"
headers = { "X-API-Key" = "{{api_key}}" }
[assert]
status = 200
duration = {{db_timeout}}
3. Switching Environments at Runtime
To override the default workspace.env.toml, use the --env-file (or -e) flag when invoking the CLI.
Running against Staging
rumour run ./health_check.toml -e ./staging.env.toml
Running against Production
rumour run ./health_check.toml -e ./production.env.toml
Validating Resolution
If you ever want to verify exactly which environment file was loaded and how the variables resolved before firing the network request, use the --vars diagnostic flag combined with your environment flag:
rumour run ./health_check.toml -e ./production.env.toml --vars
Output Trace:
PRE-FLIGHT DIAGNOSTIC REPORT
• ./health_check.toml
└─ base_url RESOLVED https://api.swahira.io/v1
└─ api_key RESOLVED prod_99zz88yy
└─ db_timeout RESOLVED 2000
4. Inline Variable Overrides
Sometimes you need to test a specific edge case without creating a whole new .env.toml file. You can override any environment variable on the fly using the --var (or -V) flag.
CLI variables have the absolute highest precedence in Rumour's resolution hierarchy.
# Force the production timeout to be evaluated at 50ms instead of 2000ms
rumour run ./health_check.toml -e ./production.env.toml -V db_timeout=50
By keeping your configurations decoupled from your assertions, your Rumour suites remain completely environment-agnostic and portable.