🧪 FusionTest
AI-powered UI testing for web, desktop and mobile — built by FusionLeap.io
FusionTest runs UI tests written as plain-English goals. An LLM reads the screen and decides what to do, a verifier confirms each goal against what's actually on screen, and goals that pass are recorded so later runs replay them without calling the AI at all.
✨ Features
| Feature | Notes |
|---|---|
| Natural-language goals | "Open the Pricing page and verify all three plans are shown" |
| Goal discovery | Crawls a site and proposes goals grounded in its real content |
| Record & replay | Passing goals replay with no LLM calls; the AI repairs them when the page changes |
| Honest results | Capacity or infrastructure problems are reported as errors, not test failures |
| Multi-provider LLMs | Groq, Claude, Gemini, OpenAI or local Ollama, with automatic fallback |
| Safe secrets | {{PASSWORD}} placeholders — the AI never sees values, which are only typed on allowed sites |
| Guardrails | Invalid-action checks, loop detection, backtracking, no-progress detection |
| Reporting | JSON reports, dashboard uploads, Slack, GitHub Actions annotations, webhooks |
| Platforms | Web (Playwright), Electron, Android & iOS (Appium), Windows, macOS |
🏗 Architecture
fusiontest/
├── core/ # Runner, LLM action model + fallback chain, goal verifier,
│ # screen parser, secrets, replay, SSRF guard (netguard)
├── desktop/ # Playwright (web/Electron), Windows, macOS adapters
├── mobile/ # Android (UIAutomator2) and iOS (XCUITest) adapters via Appium
├── discovery/ # Goal discovery from a site's pages
├── guardrails/ # Action validation, loop detection, backtracking
├── reporting/ # JSON reports, Slack, GitHub annotations
└── training/ # Experimental MPNet fine-tuning (not wired into runs)
api/ # SaaS backend (FastAPI + PostgreSQL) — see docs/api.md
dashboard/ # React dashboard
website/ # Marketing site (Next.js)
Design decisions are recorded in docs/adr — start with ADR-007.
🚀 Quickstart
# macOS (Homebrew Python) or anywhere you want an isolated CLI — recommended
brew install pipx && pipx ensurepath # then open a new terminal
pipx install "fusiontest[desktop]"
"$(pipx environment --value PIPX_LOCAL_VENVS)/fusiontest/bin/playwright" install chromium
# …or inside a virtual environment
python3 -m venv .venv && source .venv/bin/activate
pip install "fusiontest[desktop]"
playwright install chromium
export GROQ_API_KEY=gsk_... # or ANTHROPIC_API_KEY / GEMINI_API_KEY / OPENAI_API_KEY
fusiontest run --url https://example.com \
--goal "Verify the page heading says Example Domain" --headless
Groq, OpenAI and Ollama work out of the box; for Claude or Gemini add the
extra — fusiontest[desktop,claude] or fusiontest[desktop,gemini].
Upgrade with pipx upgrade fusiontest (or pip install -U fusiontest in
the venv).
Set FUSIONTEST_API_KEY (from the dashboard's API Keys page) to upload each
run to your FusionTest dashboard.
Exit codes: 0 all goals passed · 1 a goal failed · 2 some goals couldn't
be evaluated (LLM capacity or infrastructure) — not a test failure.
Full guide: docs/getting-started.md — platforms, goal files, configuration, secrets, replay, dashboard and CI.
📝 Writing goals
# tests/goals/smoke.yaml
name: Marketing site smoke test
platform: playwright
url: https://example.com
goals:
- "Open the Pricing page and verify three plan tiers are shown"
- "Open the Contact page, submit the form empty, and verify required-field errors appear"
- name: Log in
goal: "Log in with {{EMAIL}} and {{PASSWORD}} and verify the dashboard loads"
fusiontest run --file tests/goals/smoke.yaml --headless
Tips: say what to verify, not just where to go; one outcome per goal; don't submit real forms on production sites.
🛠 Configuration
fusiontest init creates fusiontest.config.yaml:
backend: groq # unset = auto-detect from API keys
guardrails:
loop_detection_window: 5
max_retries: 3
replay:
enabled: true
trace_dir: .fusiontest/traces
reverify_every: 10
🔌 CI/CD
Run fusiontest run --headless in any CI system and cache
.fusiontest/traces so runs can replay. Guides for GitHub Actions, Bitrise,
Fastlane and Jenkins: docs/ci-integrations.md.
🤝 Contributing
See CONTRIBUTING.md and ROADMAP.md.
📄 License
MIT © FusionLeap.io
Metadata
Release files for fusiontest 0.2.13
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fusiontest-0.2.13.tar.gz | 94.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fusiontest-0.2.13-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 201.6 kB
Release files / fusiontest-0.2.13.tar.gz
| Download URL | fusiontest-0.2.13.tar.gz |
|---|---|
| Size | 94.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b0db8ca7ed6ca0c22c6decedb7d521f7b7e28837489d506bacad8800b273eaf7
|
|
BLAKE2b-256 checksum How to use checksums |
c26dc5dd44d1666577c659e647e7497e0c1b0dea1f4d32d344df39217dc1e83e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / fusiontest-0.2.13-py3-none-any.whl
| Download URL | fusiontest-0.2.13-py3-none-any.whl |
|---|---|
| Size | 106.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
906e20e42c30c563c8d466f8c8707f12f71f7c2a38d4fd0da6ab2488c8fa0aca
|
|
BLAKE2b-256 checksum How to use checksums |
8dc506e44e187eb33a2cc3518e6abb0c3d8af0b64c50c36ecf1a4ce81146dbf7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|