Run individual tests or complete workflows directly from your terminal. Get real-time feedback and integrate testing into your development workflow.
Run a Single Test
Execute a test by name or ID:
revyl test run login-flow
The CLI will:
Resolve the test name (from aliases or API)
Queue the test for execution
Stream progress to your terminal
Report the final result
Example Output
Running test: login-flow
Platform: android
Build: v1.2.3 (current)
Step 1/5: Tap the login button ✓
Step 2/5: Enter email address ✓
Step 3/5: Enter password ✓
Step 4/5: Tap Submit ✓
Step 5/5: Dashboard is visible ✓
✓ Test passed in 45s
Report: https://app.revyl.ai/report/abc123
Run Options
Flag Description --build-version-id <id>Run against a specific build version --retries <n>Number of retry attempts (default: 1) --timeout <seconds>Maximum execution time (default: 600) --no-waitQueue test and exit immediately --openOpen report in browser when complete --jsonOutput results as JSON --verboseShow detailed execution logs
Run a Workflow
Execute a workflow (multiple tests). The recommended way to build and run a workflow in one command:
This builds your app, uploads it, then runs all tests in the workflow. Use --no-build to run without rebuilding:
revyl run smoke-tests -w --no-build
You can also use the explicit workflow command:
revyl workflow run smoke-tests
Example Output
Running workflow: smoke-tests
Tests: 5
[1/5] login-flow ✓ (32s)
[2/5] browse-products ✓ (28s)
[3/5] add-to-cart ✓ (41s)
[4/5] checkout ✗ (55s) - Validation failed
[5/5] logout ✓ (12s)
Results: 4 passed, 1 failed
Total time: 2m 48s
Report: https://app.revyl.ai/workflow-report/xyz789
Workflow Options
Same as test run, plus:
Flag Description --github-actionsFormat output for GitHub Actions
Full Pipeline: Build → Upload → Test
Use the --build flag with revyl test run to run the complete pipeline:
revyl test run login-flow --build --platform android
This executes:
Build - Run your build command
Upload - Upload the artifact to Revyl
Test - Run the test against the new build
Pipeline Options
Flag Description --buildBuild and upload before running --platform <name>Build platform to use (requires --build) --retries <n>Retry attempts for the test --no-waitDon’t wait for test completion --openOpen report when complete --timeout <seconds>Test timeout --jsonJSON output
Example
# Build Android, upload, and run test
revyl test run checkout-flow --build --platform android
# Run test without building (against existing build)
revyl test run checkout-flow
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
The recommended way to build and run a workflow in one command:
revyl run smoke-tests -w
revyl run smoke-tests -w --platform android
This executes:
Build - Run your build command
Upload - Upload the artifact to Revyl
Workflow - Run all tests in the workflow against the new build
Use --no-build to run the workflow without rebuilding (e.g. revyl run smoke-tests -w --no-build).
Workflow pipeline options (with revyl run <name> -w)
Flag Description --no-buildSkip build step; run against last uploaded build --platform <name>Build platform to use --retries <n>Retry attempts for each test --no-waitDon’t wait for workflow completion --openOpen report when complete --timeout <seconds>Workflow timeout --jsonJSON output
Alternative: revyl workflow run
You can also use revyl workflow run with the --build flag:
revyl workflow run smoke-tests --build --platform android
Flag Description --buildBuild and upload before running workflow --platform <name>Build platform to use (requires --build)
Build and Upload Only
Upload a build without running tests:
revyl build upload --platform android
Upload Options
Flag Description --platform <name>Build platform to use --skip-buildUpload existing artifact without building --version <string>Version label (default: <branch-slug>-<timestamp>) --set-currentSet as the current/default build --platform <ios|android>Override detected platform --name <string>Custom build name --yesSkip confirmation prompts --dry-runShow what would be uploaded --jsonJSON output
Example Output
Building Android platform...
Running: ./gradlew assembleDebug
✓ Build completed in 45s
Uploading app-debug.apk...
✓ Uploaded 24.5 MB in 8s
Build Version: bv_abc123
Package ID: com.example.app
Version: feature-new-login-20260227-153000 (branch-aware default)
iOS builds must be simulator .app bundles (or a zipped .app), not .ipa device builds. Use a Debug-iphonesimulator build from Xcode or a simulator profile from EAS/Expo. See iOS build guides for details.
List Builds
View uploaded build versions:
Options:
Flag Description --platform <ios|android>Filter by platform --build-var <id>Filter by build variant --jsonJSON output
Exit Codes
The CLI uses standard exit codes for scripting:
Code Meaning 0Test/workflow passed 1Test/workflow failed or error
CI/CD Example
#!/bin/bash
revyl workflow run smoke-tests
if [ $? -eq 0 ]; then
echo "All tests passed!"
./deploy.sh
else
echo "Tests failed, aborting deployment"
exit 1
fi
JSON Output
For programmatic use, get structured JSON output:
revyl test run login-flow --json
{
"success" : true ,
"task_id" : "task_abc123" ,
"test_name" : "login-flow" ,
"platform" : "android" ,
"execution_time" : 45 ,
"total_steps" : 5 ,
"completed_steps" : 5 ,
"report_link" : "https://app.revyl.ai/report/abc123"
}
Open Results in Browser
Automatically open the report when a test completes:
revyl test run login-flow --open
Or open a previous report:
revyl test open login-flow
Background Execution
Queue a test without waiting for results:
revyl test run login-flow --no-wait
Output:
Test queued: login-flow
Task ID: task_abc123
Track progress: https://app.revyl.ai/task/abc123
Common Workflows
Quick Smoke Test
# Build, upload, and run workflow (recommended)
revyl run smoke-tests -w
# Or run workflow without rebuilding
revyl run smoke-tests -w --no-build
Test New Changes
# Build, upload, and test (recommended)
revyl run login-flow --platform android
CI/CD Pipeline
# In your CI script
export REVYL_API_KEY = ${{ secrets . REVYL_API_KEY }}
# Build and upload
revyl build upload --platform android --version $GITHUB_SHA
# Run workflow, fail pipeline if tests fail
revyl workflow run regression --retries 2
Local Development Loop
# Make code changes
# ...
# Quick test without rebuilding
revyl run login-flow --no-build
# Full rebuild and test
revyl run login-flow --platform android
Troubleshooting
Cancelling a Running Test
Use revyl test cancel or revyl workflow cancel to stop a running test or workflow:
# Cancel a running test
revyl test cancel < task_i d >
# Cancel a running workflow (and all its tests)
revyl workflow cancel < task_i d >
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...
If the test has already completed, failed, or been cancelled, the command will return an error with the current status.
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
Next Steps
Command Reference Full command documentation
CI/CD Integration Automate with GitHub Actions