> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revyl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> Turn critical user flows into repeatable checks

Revyl tests your iOS and Android applications by driving a real device the way a user would: tapping, typing, and swiping through your app, then verifying the screen matches what you expect. Instead of brittle selectors, Revyl uses AI to find elements and ground actions from natural-language instructions, so tests keep working as your UI changes.

A test is a sequence of steps — instructions, validations, and control flow like loops and decisions — that Revyl runs against your app's active [build](/builds/index). Steps run in order, and each run produces a full [report](/tests/reports) with screenshots, logs, and pass/fail results per step.

There are 3 ways to create tests with Revyl:

* [Visual Editor](/tests/creating-tests/test-editor): Build steps by hand in the Revyl UI
* [Recorded Session](/tests/creating-tests/recording): Interact with the app yourself and Revyl generates the steps from your recording
* [Agent Based](/tests/creating-tests/test-agents): An AI agent writes the test for you using the Revyl CLI

Each run generates a [Report](/tests/reports) with full video and detailed information.

Tests can also be grouped as part of [Workflows](/tests/workflows) and run in highly parallelized fashion.

## Testing Best Practices

* **Prefer natural-language, intent-driven instructions over long, granular steps.** This keeps tests less brittle as your app changes over time.

<Columns cols={2}>
  <Card title="Recommended" icon="check">
    - Go to Settings and enable notifications if they're currently off.
  </Card>

  <Card title="Avoid" icon="xmark">
    * Step 1: Tap the hamburger menu icon in the top-left corner (should be at approx x=20,y=40)
    * Step 2: Wait exactly 2 seconds
    * Step 3: Tap "Settings" which is the 3rd item in the list
    * Step 4: If a modal appears, tap the X in the top right, otherwise proceed
    * Step 5: Scroll down exactly 2 screen-heights
    * Step 6: Tap the toggle next to "Notifications" only if it's currently off
  </Card>
</Columns>

* **Bypass authentication for tests that aren't testing auth.** Authentication can take a long time to run on every test, so for flows that don't specifically test it, [bypass authentication](/builds/auth-bypass-deeplinks) with deeplinks instead.
* **Whitelist Revyl's IP addresses** if your app has rate limiting or CAPTCHA blocks, so they don't interfere with testing.
