Reference
Test Structure
| Field | Required | Description |
|---|---|---|
name |
✅ | Name of the test suite |
description |
Description of the test suite | |
vars |
Configuration variables that can be referenced in test steps using {{ vars.key }} syntax | |
openapi |
Suite-level OpenAPI contract validation defaults applied to HTTP steps | |
init |
Suite-level initialization steps executed before any tests run | |
tests |
✅ | Array of test cases |
cleanup |
Suite-level cleanup hooks executed after all tests complete or when initialization fails |
Test Step Structure
| Field | Required | Description |
|---|---|---|
name |
✅ | Name of the test step |
plugin |
✅ | Plugin to use for this step |
config |
✅ | Configuration for the plugin |
assertions |
Assertions to validate the response | |
save |
Response values to save for use in later steps | |
retry |
Retry policy for the step activity |
Supported Plugins
httpdelayscriptsqllogagentplaywrightbrowser_usesupabase
Plugin Configurations
Plugin: http
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
method |
✅ | HTTP method to use | string |
- |
url |
✅ | Request URL | string |
- |
headers |
HTTP headers to include | object |
- | |
body |
Raw request body (string). If 'form' is also provided, 'form' takes precedence. | string |
- | |
form |
Form fields to be url-encoded as application/x-www-form-urlencoded | object |
- | |
openapi |
Override OpenAPI validation behavior for this HTTP step | object |
- | |
openapi.spec |
Path or URL to an OpenAPI v3 document | string |
- | |
openapi.operation_id |
Require the request to match a specific operationId | string |
- | |
openapi.version |
Optional spec version identifier used to invalidate cached contracts | string |
- | |
openapi.validate_request |
Enable request validation for this step | boolean |
- | |
openapi.validate_response |
Enable response validation for this step | boolean |
- |
Plugin: script
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
language |
✅ | Script language to use | javascript, shell |
- |
script |
(oneOf) | Inline script content | string |
- |
file |
(oneOf) | Path to external script file | string |
- |
timeout |
Script execution timeout | string |
- |
Plugin: sql
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
driver |
✅ | Database driver to use | postgres, mysql, sqlite, sqlserver |
- |
dsn |
✅ | Database connection string (Data Source Name) | string |
- |
commands[] |
(oneOf) | Array of SQL commands to execute | array of string |
- |
file |
(oneOf) | Path to external SQL file | string |
- |
timeout |
Query execution timeout | string |
- |
sql Assertions
| Field | Required | Description | Allowed Values |
|---|---|---|---|
type |
✅ | Type of SQL assertion | row_count, query_count, success_count, column_value |
expected |
✅ | Expected value for the assertion | - |
query_index |
(if type is row_count) (if type is column_value) |
Index of query to check (for row_count and column_value assertions) | - |
row_index |
(if type is column_value) |
Index of row to check (for column_value assertion) | - |
column |
(if type is column_value) |
Column name to check (for column_value assertion) | - |
sql Save Fields
| Field | Required | Description | Notes |
|---|---|---|---|
sql_result |
✅ | Path to extract from SQL result (e.g., '.queries[0].rows[0].id') | - |
as |
Variable name to save the extracted value as | - | |
required |
Whether the value is required (defaults to true) | - |
Plugin: log
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
message |
✅ | Message to log (supports template variables) | string |
- |
Plugin: agent
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
prompt |
✅ | Task description for the agent (supports template variables) | string |
- |
mode |
Execution mode (default: single) | single, continue, resume |
- | |
session_id |
Session ID for continue/resume modes (supports template variables) | string |
- | |
max_turns |
Maximum conversation turns (default: unlimited) | integer |
- | |
timeout |
Execution timeout (default: unlimited) | string |
- | |
system_prompt |
System prompt prepended to conversation (supports template variables) | string |
- | |
cwd |
Working directory for agent execution | string |
- | |
capabilities[] |
Agent capabilities that map to MCP servers (e.g., 'browser' for @playwright/mcp) | array of string |
- | |
api_key |
Anthropic API key (optional - auto-detected from ANTHROPIC_API_KEY env var if not provided) | string |
- | |
allowed_tools |
Tool permissions (default: ['*'] wildcard) | any |
- |
Plugin: supabase
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
url |
Supabase project URL (optional - auto-detected from SUPABASE_URL env var if not provided) | string |
- | |
key |
Supabase API key (optional - auto-detected from SUPABASE_SECRET_KEY, SUPABASE_SERVICE_KEY, SUPABASE_PUBLISHABLE_KEY, or SUPABASE_ANON_KEY env vars if not provided) | string |
- | |
operation |
✅ | Supabase operation to perform | select, insert, update, delete, rpc, auth_create_user, auth_delete_user, auth_sign_up, auth_sign_in, storage_create_bucket, storage_delete_bucket, storage_upload, storage_download, storage_delete |
- |
table |
Table name for database operations | string |
- | |
select |
Configuration for select operation | object |
- | |
select.columns[] |
Columns to select | array of string |
- | |
select.filters[] |
Filters to apply | array of objects |
- | |
select.filters[].column |
✅ | No description | string |
- |
select.filters[].operator |
✅ | No description | eq, neq, gt, gte, lt, lte, like, ilike, is, in, contains, contained_by, range_gt, range_gte, range_lt, range_lte |
- |
select.filters[].value |
✅ | Filter value | any |
- |
select.order[] |
Ordering configuration | array of objects |
- | |
select.order[].column |
✅ | No description | string |
- |
select.order[].ascending |
No description | boolean |
- | |
select.limit |
No description | integer |
- | |
select.offset |
No description | integer |
- | |
select.count |
Count type for query | exact, planned, estimated |
- | |
insert |
Configuration for insert operation | object |
- | |
insert.data |
✅ | Data to insert (object or array of objects) | any |
- |
insert.upsert |
Use upsert (insert or update) | boolean |
- | |
insert.on_conflict |
Column(s) for conflict resolution | string |
- | |
update |
Configuration for update operation | object |
- | |
update.data |
✅ | Data to update | object |
- |
update.filters[] |
Filters to apply for update | array of objects |
- | |
update.filters[].column |
✅ | No description | string |
- |
update.filters[].operator |
✅ | No description | string |
- |
update.filters[].value |
✅ | Filter value | any |
- |
delete |
Configuration for delete operation | object |
- | |
delete.filters[] |
✅ | Filters to apply for delete | array of objects |
- |
delete.filters[].column |
✅ | No description | string |
- |
delete.filters[].operator |
✅ | No description | string |
- |
delete.filters[].value |
✅ | Filter value | any |
- |
rpc |
Configuration for RPC function call | object |
- | |
rpc.function |
✅ | Function name to call | string |
- |
rpc.params |
Function parameters | object |
- | |
auth |
Configuration for auth operations | object |
- | |
auth.email |
No description | string |
- | |
auth.password |
No description | string |
- | |
auth.user_id |
No description | string |
- | |
auth.user_metadata |
No description | object |
- | |
auth.app_metadata |
No description | object |
- | |
storage |
Configuration for storage operations | object |
- | |
storage.bucket |
No description | string |
- | |
storage.path |
No description | string |
- | |
storage.file_content |
No description | string |
- | |
storage.file_path |
No description | string |
- | |
storage.public |
No description | boolean |
- | |
storage.cache_control |
No description | string |
- | |
storage.content_type |
No description | string |
- | |
timeout |
Operation timeout | string |
- |
Plugin: delay
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
duration |
✅ | Duration to delay (e.g., '5s', '1m', '2h') | string |
- |
Plugin: playwright
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
session_id |
Browser session identifier (optional - auto-injected by browser session management) | string |
- | |
role |
✅ | Playwright action: 'start' launches browser, 'script' runs Python code, 'stop' closes browser | start, script, stop |
- |
headless |
Run browser in headless mode (boolean or template string like {{ .vars.headless }}) | ['boolean', 'string'] |
- | |
slow_mo_ms |
Slow down operations by N milliseconds (for 'start' role) | integer |
- | |
launch_args[] |
Additional browser launch arguments (for 'start' role) | array of string |
- | |
launch_timeout |
Browser launch timeout in milliseconds (for 'start' role) | integer |
- | |
window_width |
Browser window width in pixels (for 'start' role) | integer |
- | |
window_height |
Browser window height in pixels (for 'start' role) | integer |
- | |
script |
Python script to execute (for 'script' role) | string |
- | |
language |
Script language - only 'python' is supported (for 'script' role) | python |
- | |
env |
Environment variables for script execution (for 'script' role) | object |
- |
Plugin: browser_use
| Field | Required | Description | Type / Allowed Values | Notes |
|---|---|---|---|---|
session_id |
Browser session identifier (optional - auto-injected by browser session management) | string |
- | |
task |
✅ | Natural language task for the AI agent to perform | string |
- |
allowed_domains[] |
Restrict browser navigation to these domains | array of string |
- | |
max_steps |
Maximum number of agent steps | integer |
- | |
use_vision |
Enable vision capabilities for the AI agent | boolean |
- | |
temperature |
LLM temperature for agent decisions | number |
- | |
timeout |
Task execution timeout (e.g., '5m', '30s') | string |
- | |
llm |
LLM configuration for the agent | object |
- | |
llm.provider |
LLM provider (e.g., 'anthropic', 'openai') | string |
- | |
llm.model |
LLM model name | string |
- | |
llm.config |
LLM configuration (e.g., API keys as env vars) | object |
- |
Assertions
| Field | Required | Description | Allowed Values |
|---|---|---|---|
type |
✅ | Type of assertion | status_code, json_path, header, row_count, query_count, success_count, column_value, supabase_count, supabase_error |
expected |
✅ | Expected value for the assertion | - |
path |
(if type is json_path) |
JSON path for json_path assertion type | - |
name |
(if type is header) |
Header name for header assertion type | - |
query_index |
(if type is row_count) (if type is column_value) |
Index of query to check (for SQL assertions) | - |
row_index |
(if type is column_value) |
Index of row to check (for column_value assertion) | - |
column |
(if type is column_value) |
Column name to check (for column_value assertion) | - |
Save Fields
| Field | Required | Description | Notes |
|---|---|---|---|
json_path |
(oneOf) | JSON path to extract from response | - |
header |
(oneOf) | Header name to extract from response | - |
sql_result |
(oneOf) | Path to extract from SQL result (e.g., '.queries[0].rows[0].id') | - |
as |
✅ | Variable name to save the extracted value as | - |
required |
Whether the value is required (defaults to true) | - |