← All projects

UTEM

Active

A 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.

JavaSpring BootReactWebSocketsDocker

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.