AI-powered QA automation CLI — tests your app from Jira tickets, reports bugs back automatically
Project description
AltQA
AI-powered QA automation from your terminal. AltQA reads Jira tickets, runs browser tests, detects bugs, and reports them back to Jira — like having an autonomous QA engineer on your team.
pip install altqa-cli # or: uv pip install altqa-cli
altqa init # one-time setup (asks for keys, crawls your app)
altqa run JIRA-123 # test a ticket end-to-end
How It Works
altqa run PROJ-42
- Fetches the Jira ticket
- Checks for attached test case files (Excel/CSV) — these always take priority
- If no test cases attached, falls back to AI analysis of the ticket description
- AI converts test cases into executable browser flows
- Launches a real browser and runs every step
- Monitors for console errors, API failures, JS exceptions, and memory leaks
- Analyses failures with AI and generates detailed bug reports
- Creates sub-task bug tickets on Jira with screenshots as proof
- Cleans up screenshots from your project after upload
Installation
Requirements: Python 3.11+
# With pip
pip install altqa-cli
# With uv (recommended)
uv pip install altqa-cli
Then initialize in your project directory:
cd your-project/
altqa init
The wizard will:
- Ask for your app URL (e.g.
http://localhost:3000) - Ask for LLM provider & API key (OpenAI, Anthropic, or Ollama for local)
- Ask for Jira credentials (base URL, project key, email, API token)
- Ask for browser preference (Chromium, Firefox, or WebKit)
- Install the Playwright browser binary automatically
- Crawl your application and build a navigation graph
- Auto-generate starter test flows from discovered pages
After init, you just run altqa run JIRA-123 — that's it.
Commands
| Command | Description |
|---|---|
altqa init |
Interactive setup wizard |
altqa run JIRA-123 |
Full pipeline: fetch ticket, test, report bugs |
altqa run JIRA-123 --dry-run |
Show the test plan without executing |
altqa run-local file.xlsx |
Run tests from local Excel/CSV files (no Jira) |
altqa crawl |
Discover app routes and build navigation graph |
altqa run-flow login |
Execute a specific YAML test flow |
altqa flows list |
List all available flows |
altqa generate-flows |
Auto-generate YAML flows from the navigation graph |
altqa generate-flows --ai |
AI-powered flow generation (happy paths + edge cases) |
altqa test "login and add a product" |
Generate and run a test from plain English |
altqa chat |
Interactive AI QA session (REPL) |
altqa audit |
AI accessibility audit (WCAG compliance) |
altqa config show |
Display current configuration |
AI-Powered Features
Core Pipeline
- Jira-aware testing — reads ticket descriptions and attached test case files (Excel/CSV)
- AI test interpretation — converts human-written test steps into browser actions
- AI failure analysis — generates bug reports with root cause, fix suggestions, and regression tests
- Automatic bug filing — creates Jira sub-tasks with screenshots and detailed descriptions
Runtime Health Monitoring
- Console errors and JS exceptions
- API failures and network errors
- Memory leaks and performance issues
- Page crashes and security warnings
Advanced AI Features
- Plain-text testing —
altqa test "login with wrong password and verify error" - Visual AI review — screenshot analysis for UI/layout bugs using vision models
- AI flow generation — generates comprehensive test flows from your app's navigation graph
- Smart selector healing — auto-fixes broken CSS selectors when elements change
- Conversational QA —
altqa chatfor interactive testing sessions - AI test data generation — realistic form data (valid, invalid, edge cases, security payloads)
- Root cause clustering — groups test failures by probable root cause
- Accessibility audit — WCAG compliance checking across your app
- Enhanced bug descriptions — AI-generated fix suggestions, user impact analysis, and regression tests
- Natural language assertions — write assertions in plain English in your YAML flows
YAML Test Flows
Define reusable test flows:
name: login
description: Log in with valid credentials
steps:
- action: navigate
url: "{{app_url}}/login"
- action: fill
selector: "#username"
value: "{{username}}"
- action: fill
selector: "#password"
value: "{{password}}"
- action: click
selector: "button[type=submit]"
- action: wait_for
selector: ".dashboard"
assertions:
- type: url_contains
value: "/dashboard"
Supports variable interpolation ({{var}}), flow includes, and natural language assertions.
Architecture
CLI (Typer + Rich)
|
+-- Config (Pydantic schemas, altqa.json)
+-- AI Agents (Agno framework, multi-provider LLM)
+-- Flow Engine (YAML parser, variable resolver, assertions)
+-- Browser (Playwright — deterministic actions, not AI-controlled)
+-- Crawler (BFS discovery, navigation graph)
+-- Jira Integration (issue CRUD, attachments, comments)
+-- Pipeline Orchestrator (ties everything together)
Design principle: Browser actions are deterministic (click, fill, navigate). AI handles intelligence — planning, analysis, and reporting. This avoids flaky, non-reproducible tests.
Supported LLM Providers
| Provider | Models | Notes |
|---|---|---|
| OpenAI | gpt-4o, gpt-4o-mini, o1, etc. | Best overall experience |
| Anthropic | claude-sonnet-4-20250514, claude-3.5-haiku, etc. | Great for analysis |
| Ollama | llama3, mistral, codellama, etc. | Fully local, no API key |
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file altqa_cli-0.1.1.tar.gz.
File metadata
- Download URL: altqa_cli-0.1.1.tar.gz
- Upload date:
- Size: 69.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
617dc42212ed1584c83a67e2aa812a1b0941a13381ab364451f41d699599906c
|
|
| MD5 |
8dfed49c35380d48e9011db3cd9a64d3
|
|
| BLAKE2b-256 |
bc0552430a8e0b72ba2c3d4d8996b52eaa3098c32e7e39d89181444585c76bb0
|
File details
Details for the file altqa_cli-0.1.1-py3-none-any.whl.
File metadata
- Download URL: altqa_cli-0.1.1-py3-none-any.whl
- Upload date:
- Size: 103.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2420093f24118df1cbf7d521e6502ab09e3a178f6bd67a5af8721ade631cfc2c
|
|
| MD5 |
136ed18fc43d5636a15ac7bdef10ad59
|
|
| BLAKE2b-256 |
88ee64d2bdcfba804b462a36c281bfceea16055f13d5caf57928237755133bb8
|