mut - Mobile UI Testing CLI
Run YAML-based mobile UI tests anywhere - CI/CD, local development, or scripts.
Features
- Run anywhere - No Claude Code dependency, works in CI/CD
- Fast screenshots - ~50ms via scrcpy frame buffer
- AI verification - Gemini 2.5 Flash for visual assertions
- Video recording - Capture test execution for debugging
- Record tests - Capture user interactions to generate YAML
Installation
pip install mut
Requirements
- Python 3.11+
- Android device/emulator with USB debugging enabled
adbin PATHscrcpy3.x installedGOOGLE_API_KEYenvironment variable (for AI features)
Quick Start
Run a test
mut run tests/login.yaml
Record a test
mut record login-flow
# Interact with your app...
mut stop
List devices
mut devices
YAML Test Format
config:
app: com.example.app
setup:
- terminate_app
- launch_app
- wait: 2s
tests:
- name: Login flow
steps:
- tap: "Email"
- type: "user@test.com"
- tap: "Password"
- type: "secret123"
- tap: "Sign In"
- verify_screen: "Welcome screen with user greeting"
Commands
mut run <test.yaml>
Execute a YAML test file.
# Basic execution
mut run tests/login.yaml
# Skip AI verifications (faster, for CI)
mut run tests/login.yaml --no-ai
# Specify device
mut run tests/login.yaml --device emulator-5554
# Custom output
mut run tests/login.yaml --output reports/
mut record <name>
Start recording user interactions.
mut record checkout-flow
mut stop
Stop recording and generate YAML test.
mut stop
# Opens browser with approval UI
# Export YAML when done
mut devices
List connected devices.
mut devices
Configuration
Global config (~/.mut.yaml)
ai:
model: gemini-2.5-flash
defaults:
video: true
verbose: false
Project config (.mut.yaml)
device: emulator-5554
test_dir: tests/
report_dir: reports/
CI/CD Integration
GitHub Actions
name: Mobile UI Tests
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.11'
- name: Install mut
run: pip install mut
- name: Run tests
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 34
script: mut run tests/login.yaml --no-ai
Environment Variables
| Variable | Description |
|---|---|
GOOGLE_API_KEY |
Gemini API key for AI features |
MUT_DEVICE |
Default device ID |
MUT_VERBOSE |
Enable verbose logging |
License
MIT
Metadata
Release files for mobileuitest 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mobileuitest-0.1.0.tar.gz | 128.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mobileuitest-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 141.7 kB
Release files / mobileuitest-0.1.0.tar.gz
| Download URL | mobileuitest-0.1.0.tar.gz |
|---|---|
| Size | 128.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
635e4f4c28735e715cfff808455ce5fdb9a9207530dfb259bb495b7b2828d671
|
|
BLAKE2b-256 checksum How to use checksums |
5df6dd6d6979d4cb13013d92e577ecceccb2491eb5b65da90e9e5a6037c3a7b1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / mobileuitest-0.1.0-py3-none-any.whl
| Download URL | mobileuitest-0.1.0-py3-none-any.whl |
|---|---|
| Size | 13.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
163ce571318efc79202e48634a9ad3b204a076ffb76b39e97bdba6fbe7ff8126
|
|
BLAKE2b-256 checksum How to use checksums |
9e20b2699bf8a3840810266946f93b4a99967da7396cea537b41589e7e71a6e0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|