QA Automation Platform
Three-phase testing: record, generate, execute. Desktop automation that replaced manual testing across 30+ modules.
Desktop QA automation platform with 3-phase testing pipeline replacing manual verification across 30+ modules
The Problem
The QA team was testing 30+ modules by hand every release. Someone would click through screens, write down what broke, and file a ticket. Every release cycle consumed weeks of manual effort, and coverage was inconsistent — testers would skip edge cases under time pressure.
The team needed automation, but existing tools required writing tests from scratch — a massive upfront investment that nobody had bandwidth for.
What I Built
A desktop application implementing a three-phase testing pipeline: Record (capture browser interactions as test definitions), Generate (transform recordings into executable Playwright tests), and Execute (run tests with real-time streamed results and AI-assisted debugging).
The critical design decision: make the recording step feel like normal testing. QA engineers do exactly what they were already doing — clicking through the application — and the system generates the automation behind them. No new workflow to learn. No test scripting.
Architecture
Multi-process architecture: Python desktop UI (PySide6) + Node.js Playwright runner + WebSocket bridge + database backend.
- UI Layer — PySide6 (Qt 6) with dark theme, Material icons. Full desktop app with login, user management, test suite organization
- WebSocket Bridge — Bidirectional JSON protocol between Python and Node.js. Auto-reconnection with 10 retries. Pub-sub event system for typed messages
- Test Runner — TypeScript/Node.js with Playwright 1.58.x and custom reporter streaming results in real time
- Introspection Server — HTTP server with 30+ endpoints for external tool access, enabling CI/CD integration
- MCP Tool Server — FastMCP with 40+ tools for AI agent integration — agents can trigger test runs, analyze failures, and suggest fixes
Key Decisions
PySide6 over Electron — native performance, 80% smaller memory footprint. For a tool QA engineers keep running all day, resource usage matters. Electron would have consumed 400MB+ at idle; PySide6 uses under 80MB.
WebSocket bridge over subprocess pipes — needed bidirectional real-time communication for streaming test results, progress updates, and interactive debugging. Subprocess pipes can't handle the pub-sub pattern required for concurrent test execution.
Playwright over Selenium — auto-wait eliminates flaky selectors, better selector engine handles shadow DOM, native screenshot/video capture for evidence collection.
Three-phase pipeline over monolithic test framework — separating record/generate/execute means each phase can evolve independently. Recording logic doesn't couple to execution logic.
Impact
- Replaced manual testing across 30+ modules with automated three-phase pipeline
- Built and deployed in 2 days — production application with login, user management, installer, and auto-update
- Evolved to v2.3.3 with AI-assisted debugging and MCP integration
- Still running daily months after deployment — the test that matters isn't "did it ship fast" but "is it still running"
- QA engineers adopted it immediately because it didn't change their workflow
Trade-offs
Over-indexed on features in the initial 2-day build. The auto-update system could have waited. The MCP integration and introspection API were added later and should have been in the initial design — they're now the most-used features. PySide6 trades cross-platform ease (Electron's web stack) for native performance.