Skip to main content

Run a Single Test

Execute a test by name or ID:
The CLI will:
  1. Resolve the test name (from aliases or API)
  2. Queue the test for execution
  3. Stream progress to your terminal
  4. Report the final result and, for a blocking human-terminal run, open its report

Example Output

Run Options

Blocking human-terminal runs open completed reports by default. --no-open, --no-wait, --json, --github-actions, CI, SSH, and other headless executions suppress browser opening. Stored argument sets are flattened in attachment and flag order, followed by inline --launch-arg tokens in flag order. Explicit arguments precede iOS -KEY value pairs generated from environment configurations. Inline tokens are non-secret and can appear in shell history, process arguments, and reports. Android-only test runs reject iOS arguments with an actionable error.

Run a Workflow

Execute a workflow (multiple tests). To build, upload, and run in one command:
This builds your app, uploads it, then runs all tests in the workflow. Without --build, the workflow runs on its saved builds:

Example Output

Workflow Options

Launch-configuration overrides apply to every compatible child test in the workflow. Mixed workflows apply iOS argument sets to iOS children and skip them for Android children.

Branch and build selection

A run uses the saved choice (the test’s, or the workflow’s App Override) unless you pass one for the run. On Default branch it tries your Git branch first. See How a run picks its build. The run prints its build and branch, such as Build: v1.4 from branch main, and a notice when it couldn’t use your Git branch. Tests created in the dashboard start on All branches · Latest build, so a pull request job can run another pull request’s upload. Pass the ID of the build the job uploaded, or save the test on Default branch so it runs on the pull request’s branch: revyl test build set <test> --build-selection inherit. See New saved choices. revyl test build set <test> saves a test’s choice, and revyl test build clear <test> resets it to All branches · Latest build. For how each run option behaves, including --build and per-platform overrides on workflows, see Run options.

Full Pipeline: Build → Upload → Test

Use the --build flag with revyl test run to run the complete pipeline:
This executes:
  1. Build - Run your build command
  2. Upload - Upload the artifact to Revyl
  3. Test - Run the test against the new build

Pipeline Options

Example

The CLI validates that the test exists before starting the build process. If you specify a test name that doesn’t exist, you’ll get an immediate error with a list of available tests.

Full Pipeline: Build → Upload → Workflow

To build and run a workflow in one command:
This executes:
  1. Build - Run your build command
  2. Upload - Upload the artifact to Revyl
  3. Workflow - Run all tests in the workflow against the new build
Leave out --build to run the workflow without rebuilding.

Workflow pipeline options

Build or Upload Without Running Tests

Upload a build without running tests:
This builds in the cloud. Test/workflow --build remains local. See Build Configuration.

Upload Options

Upload Output

revyl build upload --file ./app-release.apk --app <id> ends with the build and the branch it landed on:
Build Version is the version label; Build ID identifies the build.
Default debug builds from every framework satisfy Revyl’s artifact rules. For release builds, .ipa archives, or narrowed abiFilters, see Build Artifact Requirements.

List Builds

View uploaded build versions across all branches of an app:
Options: Without --app, the command lists app summaries. Cross-branch build tables show both GIT BRANCH and REVYL BRANCH (the dashboard’s Branch column). See Upload and list builds for filters and JSON fields.

Exit Codes

The CLI uses standard exit codes for scripting:

CI/CD Example

JSON Output

For programmatic use, get structured JSON output:
branch_name, build_version, and build_id name the build the run used. branch_source says where its branch came from: git_branch, explicit_branch, or default_branch. git_branch_name names the Git branch the run consulted, so default_branch with a git_branch_name, as above, means your Git branch couldn’t be used. See JSON fields. revyl workflow run --json reports these fields for each entry in tests.

Open Results in Browser

Blocking human-terminal test and workflow runs open the completed report by default. To state the intent explicitly:
Suppress browser opening with --no-open. No-wait, JSON, GitHub Actions, CI, SSH, and other headless runs never open a browser. Or open a previous report:

Background Execution

Queue a test without waiting for results:
Output:

Common Workflows

Quick Smoke Test

Test New Changes

CI/CD Pipeline

Local Development Loop

Troubleshooting

Cancelling a Running Test

Use revyl test cancel or revyl workflow cancel to request cancellation of a running test or workflow:
Where to find the task ID:
  • CLI output when starting a test: Task ID: abc123-def456...
  • Report URL: https://app.revyl.ai/tests/report?taskId=abc123...
A successful command can acknowledge a durable cancellation request while execution is still stopping. Check the returned test status or the workflow’s child statuses for terminal completion. Retrying a stop preserves the session’s existing terminal outcome and can resume pending cleanup.
Pressing Ctrl+C only stops the CLI from monitoring - the test continues running on the server. Use revyl test cancel <task_id> to actually stop the test.

Test Times Out

  • Increase timeout: --timeout 900
  • Check device availability in Revyl dashboard
  • Verify the test runs manually in the web UI

Build Upload Fails

  • Check your build command produces output at the expected path
  • Verify file permissions on the artifact
  • Try --dry-run to see what would be uploaded

”Test not found” Error

  • Run revyl test list to see available tests
  • Check spelling and case sensitivity
  • Ensure the test exists in your config.yaml aliases or on remote