🧪 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, failure screenshots, 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
# No goals yet? Map what works on a test/staging site, and save the flows that do
fusiontest scan https://staging.example.com --save fusiontest.goals.yaml
# Behind a login: EMAIL and PASSWORD come from the environment, never the AI
fusiontest scan https://staging.example.com --login "Sign in with email {{EMAIL}} and password {{PASSWORD}}"
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. With FUSIONTEST_API_KEY
set, replay recordings are shared through your FusionTest account (laptop, CI
and dashboard all replay each other's passing goals); without it, cache
.fusiontest/traces. 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.33
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.33.tar.gz | 140.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fusiontest-0.2.33-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 298.4 kB
Release files / fusiontest-0.2.33.tar.gz
| Download URL | fusiontest-0.2.33.tar.gz |
|---|---|
| Size | 140.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d95f5aa5968e528669f2721127d48744b5622df2dd5827630e06472eaba46731
|
|
BLAKE2b-256 checksum How to use checksums |
0b0fc931e4e9bf2cb0edd1e2db4705179d2acd838c0f1be897ddad2991a4e580
|
| 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.33-py3-none-any.whl
| Download URL | fusiontest-0.2.33-py3-none-any.whl |
|---|---|
| Size | 157.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fc7ec34198c5e5186b281f55723e82c284844ad181c69c29ed176d71703c9e37
|
|
BLAKE2b-256 checksum How to use checksums |
aa86e0d28662adee74464f93a06a405d6b710464bae17ba7da8c6ef91d7f77de
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|