Reference
This page documents the current practical YAML structure used by Relampo, based on the active RELAMPO-YAML-SPEC.md maintained in the editor repo.
Test block
The test section defines script metadata.
test:
name: "User API Load Test"
description: "Load validation for the user endpoints"
version: "1.0"
author: "QA Team"
tags:
- api
- users
Fields
name(required): descriptive test namedescription(optional): longer context for maintainersversion(optional): script versionauthor(optional): author or owning teamtags(optional): list of labels for organization
Variables
The variables section defines reusable values available across the file.
variables:
base_url: "https://api.example.com"
api_key: "secret-key"
timeout: "30s"
max_retries: 3
Reference variables using {{variable_name}} anywhere the engine supports interpolation.
Data source
Relampo supports a shared data_source block for structured test data. A data_source can also be used as a step when values must be bound at a specific point in the flow.
data_source:
type: csv
file: "data/users.csv"
mode: per_vu
strategy: sequential
bind:
email: email_column
password: password_column
on_exhausted: recycle
Fields
type: source type,csvortxtfile: source file pathmode:per_vu: each virtual user advances its own cursorshared: all users consume the same sourceper_worker: row assignment is stable by VU index
strategy:sequential: consume rows in orderrandom: pick rows randomlyunique: use rows without repeating until exhausted
variable_names: comma-separated string or YAML list for positional column bindingbind: variable-to-field assignmenton_exhausted:recycleorstop
HTTP defaults
The http_defaults block defines baseline HTTP behavior inherited by requests unless overridden.
http_defaults:
base_url: "https://api.example.com"
timeout: "30s"
follow_redirects: true
max_redirects: 5
headers:
Accept: "application/json"
User-Agent: "Relampo/2.0"
Authorization: "Bearer {{token}}"
Scenarios
The scenarios array defines one or more executable flows.
scenarios:
- name: "User Flow"
load:
type: constant
users: 10
duration: "5m"
steps:
- request: ...
Each scenario usually contains:
nameloadsteps- optional runtime controls such as cookies, cache, and error policy
Load models
Constant
load:
type: constant
users: 50
duration: "10m"
ramp_up: "30s"
Ramp
load:
type: ramp
start_users: 1
end_users: 100
duration: "10m"
step_users: 10
step_duration: "1m"
Stages
load.type: stages defines a dynamic VU plan over time.
load:
type: stages
duration: "10m"
stages:
- type: constant
users: 10
duration: "2m"
- type: ramp_up
start_users: 10
end_users: 50
duration: "3m"
- type: ramp_down
start_users: 50
end_users: 0
duration: "5m"
stages requires a top-level load.duration, a non-empty stages list, and stage types of constant, ramp_up, or ramp_down. Stage durations must cover the full load duration without gaps or overlap.
Scenario runtime options
scenarios:
- name: "Complete Scenario"
load:
type: constant
users: 10
duration: "5m"
cookies:
mode: auto
persist_across_iterations: true
cache_manager:
enabled: true
max_size_mb: 50
error_policy:
on_4xx: continue
on_5xx: retry
on_timeout: stop
steps:
- request: ...
These settings control browser-like behavior and failure handling at the scenario level.
Steps and requests
A scenario is executed through ordered steps.
Supported step types include:
- HTTP requests:
request,get,post,put,delete,patch,head,options - Data and database:
data_source,sql - Containers and controllers:
group,controller,transaction,parallel,one_time,balanced - Flow control:
if,loop,retry - Validation:
assertions - Pauses:
think_time
Short request form
steps:
- get: /api/users
- post: /api/users
- put: /api/users/123
- delete: /api/users/123
- patch: /api/users/123
Full request form
steps:
- request:
name: "Get Users"
method: GET
url: /api/users
headers:
Authorization: "Bearer {{token}}"
Content-Type: "application/json"
In full form, a request can include:
namemethodurlheaders- query params
- body or payload
- assertions
- extractors
Controllers
Controllers organize or control nested steps.
steps:
- transaction:
name: "Login"
steps:
- get: /login
- post: /session
- parallel:
name: "Load widgets"
steps:
- get: /api/widget-a
- get: /api/widget-b
Common controller types:
group: named container for related stepscontroller: generic containertransaction: measured block that produces transaction-level metricsparallel: executes child steps concurrentlyone_time: runs initialization steps once and reuses generated variablesbalanced: routes each VU or iteration into one child branch by percentage
Balanced traffic mix
balanced distributes load across child branches.
steps:
- balanced:
name: "Traffic Mix"
type: total
mode: iterations
steps:
- percentage: 70
transaction:
name: "Browse"
steps:
- get: /products
- percentage: 30
transaction:
name: "Checkout"
steps:
- post: /checkout
Rules:
typemust betotal.modemust beiterationsorvirtual_users.- Participating child percentages must sum to
100. - Child branches must contain at least one enabled HTTP request or SQL step.
SQL steps
sql executes database work inside a scenario.
steps:
- sql:
name: "Check user count"
dialect: postgres
kind: query
connection:
host: localhost
port: 5432
database: app
user: "{{db_user}}"
password: "{{db_password}}"
query: "select count(*) from users"
Supported dialects are postgres and mysql. Supported kinds are query for reads and exec for writes. Write operations require allow_writes: true.
Headers
Headers may be defined in:
http_defaults.headersfor shared defaultsrequest.headersfor request-level overrides
Request-level values should be treated as stronger than inherited defaults.
Think time
Relampo supports pacing between requests through think_time steps.
steps:
- get: /login
- think_time: "2s"
- post: /session
Assertions
Assertions validate responses and protect the flow from silent failures.
Typical assertion targets include:
- status code
- body content
- response time
- headers
Extractors
Extractors capture dynamic values from responses so later requests can reuse them.
These values are critical for:
- authentication tokens
- IDs
- session state
- correlation of dynamic values across requests
Inheritance model
The active editor specification describes a JMeter-style inheritance model.
In practice, values can be layered from broader scope to narrower scope:
- global sections such as
variablesandhttp_defaults - scenario-level settings
- request-level overrides
Always evaluate the effective value after inheritance, not just the local block.