Skip to content

UTEMUniversal Test Execution Monitor

Real-time test reporting dashboard for JUnit 5, Cucumber, TestNG, Playwright & pytest. Self-hosted.

UTEM Dashboard
8Reporters
5Languages
Real-timeWebSocket
Self-hostedYour data, your server
MITOpen Source

How it works

Up and running in under 5 minutes

1

Start the server

Run the JAR or Docker container. The dashboard is immediately available at localhost:8080.

java -jar utem-core-0.9.2.jar
2

Add the reporter

One dependency in your test project. Configure the server URL and API key — no code changes needed.

utem.server.url=http://localhost:8080
3

Run your tests

Results appear in the dashboard live. Trends, analytics, and flakiness detection update automatically.

mvn test / npx playwright test

Frequently Asked Questions

Do I need a database to run UTEM?

No. UTEM uses embedded SQLite — no database server required. Data is stored in a single file (utem.db) in the current directory. For Docker, mount a volume at /app/data to persist it across restarts.

Is authentication required?

No. Authentication is opt-in and disabled by default (utem.security.enabled=false). This makes it easy to get started in a single-user or internal network setup. Enable it when you need multi-user access or want to restrict who can view test results.

Which test frameworks are supported?

UTEM has first-class reporters for:

  • JUnit 5 — Java, zero dependencies, Maven/Gradle
  • Cucumber — JVM (Java/Kotlin), step-level reporting + screenshots
  • Jest — JavaScript/TypeScript, zero dependencies, Node.js ≥ 18
  • Cypress — E2E testing, spec-level reporting, Node.js ≥ 18
  • Playwright — E2E testing, screenshot forwarding, Node.js ≥ 18
  • pytest — Python, auto-discovered, Python 3.8+
  • Robot Framework — Python, listener v3, RF 4+

Support for NUnit, xUnit, and Vitest is on the roadmap.

Can I use UTEM in CI/CD pipelines?

Yes. The reporter sends events over HTTP — just set UTEM_SERVER_URL and UTEM_API_KEY as environment variables in your CI pipeline. Works with GitHub Actions, Jenkins, GitLab CI, and any other CI system.

How do screenshots work?

Register your Selenium WebDriver with WebDriverRegistry.register(driver) in your test setup. UTEM automatically captures a screenshot on test failure and attaches it to the run in the dashboard. No extra code needed in your test methods.

Can multiple teams share one UTEM server?

Yes. Create a Project for each team — each gets its own API key. Enable authentication, create user accounts, and assign users to projects. Members only see their team's runs and analytics.

How long is test data retained?

By default, runs older than 30 days are automatically deleted at 2am daily. You can configure this with utem.retention.retention-days and utem.retention.cron-expression, or disable it entirely with utem.retention.enabled=false.

Is UTEM free and open source?

Yes. UTEM is released under the MIT License — free to use, modify, and self-host. Source code is available on GitHub.

Released under the MIT License.