Maestro Test Options

When running Maestro tests on TestingBot, you can customize the test execution using various options. These options are passed when starting a test run via the API.

Options are organized into two categories:

  • maestroOptions: Options specific to Maestro execution (version, environment variables, flows, tags)
  • capabilities: Device and test configuration options (device, orientation, locale, network, etc.)

Quick Reference

All available options at a glance:

Maestro Options

Option Type Description
version string Maestro CLI version to use (e.g., "2.0.10")
flows array Specific flow files to run (e.g., ["login.yml", "checkout.yml"])
env object Environment variables to pass to flows
includeTags array Only run flows with these tags
excludeTags array Skip flows with these tags

Capability Options

Option Type Description
platformName string Platform: "Android" or "iOS" (required)
version string OS version (required)
deviceName string Device name (required)
name string Test name shown in dashboard
build string Build name for grouping tests
orientation string "PORTRAIT" (default) or "LANDSCAPE"
locale string Device locale (e.g., "en_US", "de_DE")
timeZone string Device timezone (e.g., "America/New_York")
throttle_network string Network preset: "Edge", "3G", "4G", "airplane"
testingbot.geoCountryCode string Route traffic through specific country (ISO code)

Set Maestro Version

By default, TestingBot runs your Maestro flows with the latest version of the Maestro CLI.

testingbot maestro app.apk ./flows \
  --device "Pixel 8" \
  --deviceVersion "14" \
  --maestro-version "2.0.10"

If you need a specific version for compatibility, specify the version option in maestroOptions.

Option Type Example
maestroOptions.version string "2.0.10"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "maestroOptions": {
    "version": "2.0.10"
  },
  "capabilities": [{
    "platformName": "Android",
    "version": "14",
    "deviceName": "Pixel 8"
  }]
}' \
-H "Content-Type: application/json"

Replace :id with your project ID from the app upload.

Select Specific Flows

By default, TestingBot runs all flow files in your zip archive. To run only specific flows, use the option below.

Use Cases

  • Run a subset of flows for faster feedback during development
  • Execute specific test scenarios without modifying your test suite
  • Re-run failed flows without running the entire suite

With the CLI, you specify flows directly as arguments:

# Run specific flow files
testingbot maestro app.apk login.yml checkout.yml --device "Pixel 8"

# Run flows from a specific directory
testingbot maestro app.apk ./flows/smoke --device "Pixel 8"

# Mix directories and individual files
testingbot maestro app.apk ./flows/smoke login.yml --device "Pixel 8"
Option Type Example
maestroOptions.flows array of strings ["login.yml", "checkout.yml"]
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "maestroOptions": {
    "flows": ["login.yml", "checkout.yml"]
  },
  "capabilities": [{
    "platformName": "Android",
    "version": "14",
    "deviceName": "Pixel 8"
  }]
}' \
-H "Content-Type: application/json"

Environment Variables

Pass environment variables to your Maestro flows using the env option. This is useful for configuration that varies between environments (staging, production) or for sensitive data like API keys.

Use Cases

  • Environment-specific URLs: Point to staging or production backends
  • Test credentials: Pass login credentials securely via CI/CD
  • Feature flags: Enable or disable features during tests
  • App identifiers: Specify package names or bundle IDs dynamically

Use the -e or --env flag (can be repeated):

testingbot maestro app.apk ./flows --device "Pixel 8" \
  -e API_URL=https://staging.example.com \
  -e TEST_USER=testuser@example.com \
  -e TEST_PASSWORD=secret123
Option Type Example
maestroOptions.env object {"API_URL": "https://staging.example.com"}
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "maestroOptions": {
    "env": {
      "API_URL": "https://staging.example.com",
      "TEST_USER": "testuser@example.com",
      "TEST_PASSWORD": "secret123"
    }
  },
  "capabilities": [{
    "platformName": "Android",
    "version": "14",
    "deviceName": "Pixel 8"
  }]
}' \
-H "Content-Type: application/json"

Using Variables in Your Flows

Reference environment variables in your Maestro flow files using the ${VARIABLE_NAME} syntax:

appId: com.example.app
---
- launchApp
- inputText:
    text: "${TEST_USER}"
- tapOn: "Next"
- inputText:
    text: "${TEST_PASSWORD}"
- tapOn: "Login"

Best Practice: Never commit sensitive values like passwords or API keys to your repository. Pass them as environment variables through your CI/CD pipeline.

Include Tags

Run only flows that have specific tags. This is equivalent to Maestro's --include-tags option.

Adding Tags to Flows

Add tags to your flow files using the tags property:

appId: com.example.app
tags:
  - smoke
  - login
---
- launchApp
- tapOn: "Login"

Use the --include-tags flag with comma-separated tags:

testingbot maestro app.apk ./flows --device "Pixel 8" \
  --include-tags "smoke,critical"
Option Type Example
maestroOptions.includeTags array of strings ["smoke", "critical"]
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "maestroOptions": {
    "includeTags": ["smoke", "critical"]
  },
  "capabilities": [{
    "platformName": "Android",
    "version": "14",
    "deviceName": "Pixel 8"
  }]
}' \
-H "Content-Type: application/json"

Exclude Tags

Skip flows that have specific tags. This is equivalent to Maestro's --exclude-tags option.

Use Cases

  • Skip slow tests during development for faster feedback
  • Exclude known flaky tests from CI pipelines
  • Skip platform-specific tests (e.g., exclude "ios-only" when running on Android)

Use the --exclude-tags flag with comma-separated tags:

testingbot maestro app.apk ./flows --device "Pixel 8" \
  --exclude-tags "slow,flaky"
Option Type Example
maestroOptions.excludeTags array of strings ["slow", "flaky"]
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "maestroOptions": {
    "excludeTags": ["slow", "flaky"]
  },
  "capabilities": [{
    "platformName": "Android",
    "version": "14",
    "deviceName": "Pixel 8"
  }]
}' \
-H "Content-Type: application/json"

IP Geolocation

Test your app from different geographic locations using TestingBot's GeoIP feature. Traffic from the device will route through an IP address in the specified country.

Use Cases

  • Test geo-restricted content or features
  • Verify location-based pricing or currency display
  • Test localized content delivery
testingbot maestro app.ipa ./flows \
  --platform iOS \
  --device "iPhone 15" \
  --deviceVersion "17.2" \
  --geo-country-code "DE"
Option Type Example
testingbot.geoCountryCode string (ISO code) "DE", "US", "JP"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "iOS",
    "version": "17.2",
    "deviceName": "iPhone 15",
    "testingbot.geoCountryCode": "DE"
  }]
}' \
-H "Content-Type: application/json"

See the full list of available country codes.

Network Throttling

Simulate different network conditions to test how your app performs under various connectivity scenarios.

Option Type Example
throttle_network string "4G", "3G", "Edge", "airplane"

Network Presets

Preset Download Upload Latency Use Case
4G 18 Mbps 9 Mbps 100ms Standard mobile connection
3G 400 Kbps 100 Kbps 100ms Slower mobile network
Edge 250 Kbps 150 Kbps 300ms Poor connectivity areas
airplane 0 0 - No connectivity (offline mode)
disable - - - Restore full connectivity
testingbot maestro app.ipa ./flows \
  --platform iOS \
  --device "iPhone 15" \
  --deviceVersion "17.2" \
  --throttle-network "3G"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "iOS",
    "version": "17.2",
    "deviceName": "iPhone 15",
    "throttle_network": "3G"
  }]
}' \
-H "Content-Type: application/json"

Test Name

Set a custom name for your test that appears in the TestingBot dashboard. This makes it easier to identify specific test runs.

Option Type Example
name string "Login Flow - Smoke Test"
testingbot maestro app.ipa ./flows \
  --platform iOS \
  --device "iPhone 15" \
  --deviceVersion "17.2" \
  --name "Login Flow - Smoke Test"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "iOS",
    "version": "17.2",
    "deviceName": "iPhone 15",
    "name": "Login Flow - Smoke Test"
  }]
}' \
-H "Content-Type: application/json"

Build Grouping

Group multiple test runs under a single build name. This is useful for organizing tests that belong to the same CI/CD pipeline run or release version.

Option Type Example
build string "Release 2.5.0"

Benefits

  • View aggregated pass/fail statistics for all tests in a build
  • Track test results across different device configurations
  • Easily identify which builds introduced failures
testingbot maestro app.ipa ./flows \
  --platform iOS \
  --device "iPhone 17" \
  --deviceVersion "18.0" \
  --build "Release 2.5.0"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "iOS",
    "version": "26.0",
    "deviceName": "iPhone 17",
    "build": "Release 2.5.0"
  }]
}' \
-H "Content-Type: application/json"

Device Orientation

Set the device orientation at the start of your test.

Option Type Values Default
orientation string "PORTRAIT", "LANDSCAPE" PORTRAIT
testingbot maestro app.apk ./flows \
  --device "Pixel 8" \
  --deviceVersion "14" \
  --orientation LANDSCAPE
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "Android",
    "version": "14",
    "deviceName": "Pixel 8",
    "orientation": "LANDSCAPE"
  }]
}' \
-H "Content-Type: application/json"

Device Timezone

Set the device timezone for your test. Useful for testing time-sensitive features.

Option Type Example
timeZone string (IANA) "America/New_York", "Europe/London", "Asia/Tokyo"
testingbot maestro app.ipa ./flows \
  --platform iOS \
  --device "iPhone 15" \
  --deviceVersion "17.2" \
  --timezone "America/New_York"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "iOS",
    "version": "17.2",
    "deviceName": "iPhone 15",
    "timeZone": "America/New_York"
  }]
}' \
-H "Content-Type: application/json"

See the full list of timezone identifiers.

Device Locale

Set the device locale to test localized content and formatting. The locale affects language, date formats, number formats, and currency display.

Option Type Format Example
locale string language_COUNTRY "de_DE", "fr_CA", "ja_JP"
testingbot maestro app.ipa ./flows \
  --platform iOS \
  --device "iPhone 15" \
  --deviceVersion "17.2" \
  --device-locale "de_DE"
curl -u api_key:api_secret \
-X POST "https://api.testingbot.com/v1/app-automate/maestro/:id/run" \
-d '{
  "capabilities": [{
    "platformName": "iOS",
    "version": "17.2",
    "deviceName": "iPhone 15",
    "locale": "de_DE"
  }]
}' \
-H "Content-Type: application/json"

Common Locale Codes

Region Locale Code
English (US) en_US
English (UK) en_GB
German (Germany) de_DE
French (France) fr_FR
French (Canada) fr_CA
Spanish (Spain) es_ES
Spanish (Mexico) es_MX
Japanese ja_JP
Chinese (Simplified) zh_CN
Chinese (Traditional) zh_TW
Korean ko_KR
Portuguese (Brazil) pt_BR
Italian it_IT
Dutch nl_NL
Russian ru_RU
Arabic ar_SA
Hindi hi_IN

Maestro config.yaml

You can include a config.yaml file in your Maestro flows zip file. This configuration file lets you define options that apply to all your flows.

Supported config.yaml Options

Option Description
includeTags Only run flows with these tags
excludeTags Skip flows with these tags
env Environment variables available in all flows

Example config.yaml

env:
  API_URL: https://api.example.com
  DEBUG: "true"

includeTags:
  - smoke
  - critical

TestingBot Tunnel

Use TestingBot Tunnel to allow your app to access private or staging backend servers during tests.

Use Cases

  • Test against staging APIs not accessible from the public internet
  • Access localhost services running on your machine
  • Test with private databases or internal services

When a TestingBot Tunnel is active on your account, Maestro tests automatically route traffic through it. No additional configuration is needed.

To start a tunnel, download and run the TestingBot Tunnel client before starting your tests.

CLI Reference

When using the TestingBot CLI, these options are available as command-line flags:

Device Options

CLI Option Description
--device <name> Device name (e.g., "Pixel 9", "iPhone 16")
--platform <name> Platform: Android or iOS
--deviceVersion <version> OS version (e.g., "14", "17.2")
--real-device Use a real device instead of emulator/simulator
--orientation <orientation> Screen orientation: PORTRAIT or LANDSCAPE
--device-locale <locale> Device locale (e.g., "en_US", "de_DE")
--timezone <timezone> Timezone (e.g., "America/New_York")

Test Configuration

CLI Option Description
--name <name> Test name for dashboard identification
--build <build> Build identifier for grouping test runs
--include-tags <tags> Only run flows with these tags (comma-separated)
--exclude-tags <tags> Exclude flows with these tags (comma-separated)
-e, --env <KEY=VALUE> Environment variable for flows (can be repeated)
--maestro-version <version> Maestro version to use (e.g., "2.0.10")

Network & Location

CLI Option Description
--throttle-network <speed> Network throttling: 4G, 3G, Edge, airplane, or disable
--geo-country-code <code> Geographic IP location (ISO country code, e.g., "US", "DE")

Output Options

CLI Option Description
--async Start tests and exit without waiting for results
-q, --quiet Suppress progress output
--report <format> Download report after completion: html or junit
--report-output-dir <path> Directory to save reports
--download-artifacts Download test artifacts (logs, screenshots, video)
--artifacts-output-dir <path> Directory to save artifacts zip
Was this page helpful?

Looking for More Help?

Have questions or need more information?
You can reach us via the following channels: