UTEM
ActiveA self-hosted, real-time test reporting engine — a universal event model that any framework in any language can emit into, with live execution hierarchy, flakiness detection, and history in one place.
The problem
Every test framework reports results its own way — JUnit XML, Cucumber JSON, pytest’s own format, Playwright’s own format again — so a team running Java, Python, and JavaScript suites ends up either standardizing on one framework or stitching together separate dashboards that don’t talk to each other. None of them give you a run in progress; you find out what happened after it’s over.
What it does
UTEM defines a small, framework-agnostic JSON event protocol and a backend that reconstructs the full execution hierarchy — suite, feature, scenario, step — from whatever events arrive, live, over WebSockets. Screenshots and other attachments can be pinned to any step, failed steps carry them automatically, retries and failure patterns are tracked for flakiness detection, and an interrupted run preserves its last known state so it can pick up where it left off instead of starting over.
Reporters, not rewrites
Existing suites don’t need to change frameworks to speak UTEM. Published
reporters cover JUnit 5 + Cucumber and TestNG (Maven Central), Playwright and
Jest (npm), and pytest (PyPI) — each with a disable flag so it stays wired in
but silent when a test is run straight from the IDE. The server itself ships
as a Docker image with a single docker run and an optional persistent
volume, or as a standalone JAR.
Under the hood
Spring Boot and Spring Data JPA on the backend with SQLite for storage, a React + Vite frontend, and WebSockets carrying live updates from server to dashboard as events arrive.