Test analytics
for your CI builds.

Your CI shows you one build at a time. TestNod keeps the results from all of them, so you can see which tests are flaky and when your test suite started getting slower.

TestNod Dashboard
TestNod dashboard showing 30-day test run totals, pass rate, active alerts, starred projects with pass-rate trends, and recent test runs
Works with any test framework that produces JUnit XML: RSpec pytest JUnit Cypress Playwright + more

Flaky tests and slow suites take weeks to show up

Flaky tests come back

A test fails, someone hits re-run, the build passes, and everyone moves on. A week later the same test fails again, and because the first failure left no record, it looks new. Across a whole team, those re-runs take hours.

Small slowdowns add up

Your suite takes a few seconds longer each week, and the pass rate drops from nearly 100% to under 90% over a couple of months. Because no single build looks bad, it rarely comes up until the suite is slow enough that everyone feels it.

Finding the pattern means reading logs

To learn which tests fail most often or which ones have slowed down, you'd have to open old builds one by one and compare their logs. Few teams have time for that, so the question goes unanswered.

See which projects are getting better or worse

TestNod stores the result of every test from every run. Each project shows its recent pass rate and how that rate has moved in recent weeks, and when the number drops you can open the project to find the tests that changed and the build where it started.

Payments API

Last run: 2 hours ago
24 runs
96% pass rate

Mobile App

Last run: 5 hours ago
18 runs
61% pass rate

Test analytics built from your JUnit XML reports

Your CI uploads the report after each run, and everything below comes from it.

One step in your CI config

Setup is one step that runs after your tests and uploads their report, with nothing to install on the runner. You can copy it for your CI service from the section further down, and if you split your suite across parallel jobs, TestNod merges their results back into one run.

Trends over time

Charts show how pass rates and test times change from build to build, and you can find the build where a change started. All your projects share one view, each measured against its own history, so a project that runs twice a week gets the same weight as one that runs 200 times a day.

Alerts for flaky tests and slow runs

TestNod alerts you when a test starts failing on and off or only passes after a retry, when runs slow down, when many tests fail at once, or when skipped tests pile up. You pick which alerts each project uses and how much change sets one off, and you can snooze any that fire too often.

What changed since the last run

Each run is compared with the last run like it, listing new failures, fixed tests, tests that needed a retry, slower tests, and tests added or removed. Failures with the same cause are grouped, so twelve failing tests can show up as three groups, and each test keeps a history of its pass rate and timing.

A short summary of each run

When a run finishes, TestNod writes a few sentences about it in plain English, covering the kinds of failures that showed up and which ones look related. You can read it before opening any test, and a summary of the whole week is at the top of the Monday email.

Send results to Slack or your tools

Alerts can go to a Slack channel as well as email, and each project picks which alerts reach Slack. If you have your own dashboards, TestNod can send results to them through signed webhooks as runs finish and alerts fire, or you can pull the same data through the API.

AI coding tools mean more code and more test runs

With coding assistants writing a growing share of the code, teams open more pull requests and run CI more often. Each extra run is another chance for a flaky test to block a merge, or for a slowdown to get through while everyone is busy with other work.

Set up CI test reporting in a few minutes

You don't install an agent or touch your test code.

01

Create a project (30 seconds)

Create a project in TestNod and copy its project token, which your CI uses to upload results.

02

Add to your CI pipeline (2 minutes)

Copy the snippet for your CI service below into your config file. If yours isn't listed, the Any CI tab has a shell script you can run anywhere, and the CI integration guides walk through Jenkins and Buildkite.

03

Check back after a few runs

The first run appears in the dashboard a moment after it finishes, and the second shows what changed since the first. Trend charts fill in over the next few runs, and alerts start once a project has enough runs to compare against.

.github/workflows/test.yml
- name: Upload test results to TestNod
  if: ${{ !cancelled() }}
  uses: testnod/testnod-uploader-action@v1
  with:
    file: tmp/rspec.xml
    token: ${{ secrets.TESTNOD_PROJECT_TOKEN }}

What TestNod costs

TestNod is free during early access. Once paid plans launch, you can stay on the free tier or move to Team at $49 a month. You pay by the number of test runs, which you can count from your CI dashboard, and every plan includes unlimited members and projects, so adding a teammate doesn't change your bill.

Free

$0

For a single repository, with enough runs and history to spot your first flaky test.

Team

$49 / month

For a team that merges code every day. It keeps a year of history and adds the AI run summaries.

Every plan

All four alert types, set up per project and sent by email or to Slack.

Teams that join during early access get the Team plan at half price for their first year.

Get half off your first year

Frequently asked questions

The TestNod docs FAQ goes into more detail on setup and alerts.

Try TestNod during early access

Early access is free, and when paid plans launch your team gets 50% off the Team plan for a year. Leave your email and we'll send you an invite. We can also help you set up the CI step.

We'll only use this address to email you about TestNod.