Skip to main content
The Revyl CLI provides bidirectional sync between local YAML test files and the Revyl cloud. Edit tests in your IDE or the web editor - changes sync both ways.

List Local Tests

View all tests in your project with their sync status:
revyl test list
Output:
NAME              STATUS      PLATFORM   LAST MODIFIED
login-flow        synced      android    2 hours ago
checkout          modified    ios        5 minutes ago
onboarding        outdated    android    1 day ago
new-feature       local-only  android    just now

Sync Statuses

StatusMeaning
syncedLocal and remote are identical
modifiedLocal changes not yet pushed
outdatedRemote has newer changes
local-onlyExists locally but not on remote
remote-onlyExists on remote but not locally

JSON Output

For scripting, use JSON output:
revyl test list --json

List Remote Tests

View all tests in your organization:
revyl test remote
Options:
FlagDescription
--limit <n>Limit number of results
--platform <ios|android>Filter by platform
--jsonOutput as JSON

Reconcile Project State

If local aliases drift from remote IDs (deleted tests, renamed workflows, stale app links), use revyl sync to reconcile your .revyl/config.yaml mappings.
# Preview changes first
revyl sync --dry-run

# Reconcile only tests and auto-prune stale links
revyl sync --tests --prune
revyl sync reconciles tests, workflows, app links, and hot reload build references. Device session commands are unaffected.

Pull Tests from Remote

Download tests from Revyl to your local project:
# Pull all tests
revyl test pull

# Pull a specific test
revyl test pull login-flow

Pull Options

FlagDescription
--forceOverwrite local changes
--dry-runShow what would be pulled without making changes

Example Output

Pulling tests from Revyl...

  ↓ login-flow.yaml (updated)
  ↓ checkout.yaml (new)
  - onboarding.yaml (unchanged)

✓ Pulled 2 tests, 1 unchanged
If you have local modifications, pull will warn you. Use --force to overwrite, or push your changes first.

Push Tests to Remote

Upload local test changes to Revyl:
# Push all modified tests
revyl test push

# Push a specific test
revyl test push checkout

Push Options

FlagDescription
--forceOverwrite remote changes
--dry-runShow what would be pushed without making changes

Example Output

Pushing tests to Revyl...

  ↑ checkout.yaml (updated)
  ↑ new-feature.yaml (created)

✓ Pushed 2 tests

View Differences

Compare local and remote versions of a test:
revyl test diff login-flow
Output shows a unified diff:
--- remote/login-flow.yaml
+++ local/login-flow.yaml
@@ -5,7 +5,7 @@
 steps:
   - instruction: "Tap the login button"
-  - instruction: "Enter username"
+  - instruction: "Enter email address"
   - validation: "Dashboard is visible"

Validate Test Files

Check YAML syntax and schema before pushing:
# Validate a specific file
revyl test validate .revyl/tests/checkout.yaml

# Validate all local tests
revyl test validate

Validation Output

Validating checkout.yaml...

✓ Schema valid
✓ Variables defined before use
⚠ Warning: Step 3 has no timeout specified

1 warning, 0 errors

Create a New Test

Create a new test and optionally open it in the browser:
revyl test create checkout-flow --platform android

Create Options

FlagDescription
--platform <ios|android>Target platform (required)
--build-var <id>Associate with a build variant
--no-openDon’t open in browser
--no-syncDon’t sync to remote
--forceOverwrite if exists
--dry-runShow what would be created

What Happens

  1. Creates the test on the Revyl server via API
  2. Adds the test alias to .revyl/config.yaml (unless --no-sync)
  3. Pulls the test YAML definition from the server to .revyl/tests/<name>.yaml (unless --no-sync)
  4. Opens the test editor in your browser (unless --no-open)

Open Test in Browser

Open an existing test in the Revyl web editor:
revyl test open login-flow
This resolves the test name through:
  1. Aliases in config.yaml
  2. UUID lookup
  3. API search by name

Common Workflows

Daily Development

# Start of day: get latest tests
revyl test pull

# Make changes locally or in browser
# ...

# Check what changed
revyl test list

# Push your changes
revyl test push

Creating a New Test

# Create the test
revyl test create user-registration --platform ios

# Edit in browser or locally
# ...

# Validate before pushing
revyl test validate user-registration

# Push to remote
revyl test push user-registration

# Run it
revyl test run user-registration

Resolving Conflicts

# Check status
revyl test list
# Shows: checkout (outdated)

# View differences
revyl test diff checkout

# Option 1: Keep remote version
revyl test pull checkout --force

# Option 2: Keep local version
revyl test push checkout --force

# Option 3: Manually merge
# Edit .revyl/tests/checkout.yaml
revyl test push checkout
# 1) Preview what sync will change
revyl sync --dry-run

# 2) Apply test/workflow/app-link reconciliation
revyl sync

# 3) Confirm local test state
revyl test list

Test File Format

Tests are stored as YAML files in .revyl/tests/:
# .revyl/tests/login-flow.yaml
name: login-flow
platform: android
build_var_id: bv_android123

steps:
  - instruction: "Tap the login button"
  
  - instruction: "Enter '[email protected]' in the email field"
  
  - instruction: "Enter 'password123' in the password field"
  
  - instruction: "Tap Submit"
  
  - validation: "Dashboard screen is visible"
See YAML Test Format for the complete schema reference.

Next Steps