Overview
The Revyl YAML format allows you to define end-to-end tests in a structured, human-readable format. Tests support conditional logic, loops, variable extraction, and various action types that work across web, iOS, and Android platforms.Test Execution Behavior
Important: When a test starts, Revyl automatically:- Web tests: Navigates to the build URL
- Mobile tests: Opens the application
navigate or open_app steps at the beginning of your test. These manual steps are only needed when:
- Navigating to a different URL during the test (web)
- Reopening the app after closing it (mobile)
Root Structure
The test Object
All YAML tests start with atest: root object containing three main sections:
Metadata Section
The metadata section contains test-level configuration:name
Required | string The name of your test.platform
Optional | string | Values:web, ios, android
Target platform for the test. If omitted, platform is inferred from the build.
Build Section
The build section specifies which application version to test:name
Required | string Name of the build to test against.pinned_version
Optional | string Specific version to test. If omitted, uses latest build.Blocks Section
blocks
Required | array List of test steps executed sequentially. Tests automatically navigate to the build at start, so blocks typically begin with instructions or validations.Block Types
Instructions Block
AI-powered actions that execute natural language instructions. Use high-level instructions for complex flows. Fields:type: “instructions” (required)step_description: Natural language instruction (required)
Validation Block
Assert conditions to verify application state. Fields:type: “validation” (required)step_description: Condition to validate (required)
Extraction Block
Extract data from the application and store in variables. Fields:type: “extraction” (required)step_description: What to extract (required)variable_name: Variable name to store the extracted value (required, use kebab-case)
Manual Block
Direct operations that bypass AI processing. Fields:type: “manual” (required)step_type: Type of manual operation (required)step_description: Parameters or duration (required for some step_types)
wait: Pause for specified secondsnavigate: Go to different URL (not needed at test start - automatic)back: Browser back buttonforward: Browser forward buttonrefresh: Refresh pagebrowser_code_execution: Execute JavaScript
wait: Pause for specified secondsopen_app: Launch app (not needed at test start - automatic)close_app: Close the application
navigate: Only when changing to a different URL mid-testopen_app: Only when reopening after usingclose_app
If Block
Conditional branching with then/else paths. Fields:type: “if” (required)condition: Natural language condition (required)then: Array of blocks executed when condition is true (required)else: Array of blocks executed when condition is false (optional)
While Block
Loop with a condition that repeats the body until condition is false. Fields:type: “while” (required)condition: Loop continuation condition (required)body: Array of blocks executed each iteration (required)
Using Variables
Variables allow you to extract and reuse data throughout your test. Defining Variables:step_description or condition field.
Complete Example
Related Documentation
- YAML Examples - Practical examples and patterns
- Control Flow Guide - Detailed if/while usage
- Using Variables - Variable management
- LLM Schema Reference - Copy this schema for AI-assisted test generation