Skip to content

diegoQuinas/rust_pilot

Repository files navigation

rust_pilot_logo

Rust CI Code Coverage Crates.io Rust Version

rust_pilot

What is rust_pilot?

rust_pilot is a powerful, fast, and reliable tool for automating mobile application testing. It supports Android, iOS, and Flutter applications with a simple YAML-based test definition format.

Key Features:

  • Write tests in simple, readable YAML format
  • Support for Android, iOS, and Flutter applications
  • Fast execution with Rust's performance benefits
  • Automatic test report generation
  • Deterministic test results
  • Compatible with Maestro-style test instructions

gif

How It Works

rust_pilot acts as an intermediary between your test definitions and the Appium automation framework:

flowchart TD
    %% Class definitions for styling
    classDef engineer fill:#f9d5e5,stroke:#333,stroke-width:1px,color:black,font-weight:bold
    classDef yaml fill:#eeeeee,stroke:#333,stroke-width:1px,color:black,font-weight:bold
    classDef rustpilot fill:#d0f4de,stroke:#333,stroke-width:1px,color:black,font-weight:bold
    classDef client fill:#e4c1f9,stroke:#333,stroke-width:1px,color:black,font-weight:bold
    classDef server fill:#a9def9,stroke:#333,stroke-width:1px,color:black,font-weight:bold
    classDef device fill:#fcf6bd,stroke:#333,stroke-width:1px,color:black,font-weight:bold
    classDef edgeLabel color:black,font-weight:bold
    
    QA["<b>QA Engineer</b>"] -->|"<b>writes</b>"| YAML["<b>Tests in YAML</b>"]
    YAML -->|"<b>read by</b>"| RP["<b>rust_pilot</b>"]
    RP -->|"<b>uses</b>"| ARC["<b>Appium Rust Client</b>"]
    ARC -->|"<b>sends HTTP requests</b>"| AS["<b>Appium Server</b>"]
    AS -->|"<b>interacts with</b>"| Android["<b>Android Device</b>"]
    AS -->|"<b>interacts with</b>"| iOS["<b>iOS Device</b>"]
    AS -->|"<b>interacts with</b>"| Flutter["<b>Flutter App</b>"]
    
    %% Apply classes to nodes
    QA:::engineer
    YAML:::yaml
    RP:::rustpilot
    ARC:::client
    AS:::server
    Android:::device
    iOS:::device
    Flutter:::device
    
    %% Apply style to all edge labels
    linkStyle 0,1,2,3,4,5,6 stroke-width:1.5px,fill:none,stroke:#333
Loading

rust_pilot reads your YAML test files (which are compatible with Maestro-style test instructions), processes them, and uses the Appium Rust client to communicate with the Appium server for executing test actions on your target devices.

Example Test File

appId: org.wikipedia
tags:
  - android
---
# Test steps
- runFlow: 'add-language.yml'      # Include another test file
- runFlow: 'remove-language.yml'    # Include another test file
- tapOn: 'CONTINUE'                # Tap on an element
- assertVisible: 'New ways to explore'  # Verify element is visible
- tapOn: 'CONTINUE'
- assertVisible: 'Reading lists with sync'
- tapOn: 'CONTINUE'
- assertVisible: 'Send anonymous data'
- tapOn: 'GET STARTED'
- runFlow: 'scroll-feed.yml'       # Run another test sequence
- runFlow: 'perform-search.yml'    # Run another test sequence

Installation

Prerequisites

  • Rust and Cargo (latest stable version)
  • Appium Server (for mobile device interaction)
  • Android SDK or iOS development tools (depending on your testing targets)

Steps

  1. Clone the repository:

    git clone https://github.com/diegoQuinas/RustPilot.git
    cd rust_pilot
  2. Build the project:

    cargo build --release

Usage

Basic Usage

cargo run -- <capabilities_file.json> <test_file.yml>

Capabilities File Example

{
  "platformName": "Android",
  "appium:automationName": "UiAutomator2",
  "appium:deviceName": "Android Emulator",
  "appium:app": "/path/to/your/app.apk",
  "appium:noReset": true
}

Test Reports

rust_pilot automatically generates test reports after execution. Reports are saved in the reports directory and include:

  • Test execution summary
  • Steps executed
  • Execution time
  • Test details and results

Contributing

Contributions are welcome! Feel free to:

  • Report bugs
  • Suggest new features
  • Submit pull requests

Please follow Rust best practices when contributing code to maintain the project's modular, extensible, and readable structure.

About

Rust interpreter of yaml maestro-style test automation

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages