Test intelligence for software teams · Free and open source · Self-hosted

Know why your software tests fail. Know when to ship.

TestLookup is free, open-source test intelligence for software teams. It collects the results of your automated software tests, explains why tests fail, spots flaky tests, and helps you decide whether a software release is ready to ship. You run it on your own servers, and it works offline by default.

Install with one commandbash · One-command installer
curl -fsSL https://raw.githubusercontent.com/test-intelligence/testlookup/main/install.sh | bash

You need Docker with Compose v2, and Bash. On Windows, run it from Git Bash or WSL. The script downloads the published images, creates random passwords and keys, and shows the admin password once. To build from the source code instead, clone github.com/test-intelligence/testlookup and run make quickstart, which needs Git and GNU Make.

Top failing tests for an e-commerce project, with a 14-day strip that has a failing run every day and three tests: test_legacy_discount_calc and test_payment_capture marked Product with a repeat-failure signal, and test_checkout_completes marked Infrastructure and flaky at a 43% flake rate, each with its failure count, when it last failed, and Mute, Jira and Suspects actions.
Five dashboard tiles: 496 total executions, up 6.9%; a 91% average pass rate, down 0.7%; 2 new failures in 24 hours; 1 flaky test; and 0 active defects, the first three each with a 30-day sparkline.
Release gate card for one test run: a NO GO recommendation at a 44.4 percent pass rate, a risk score of 60, and an Override decision button.

Sample data Screens from TestLookup itself: top failing tests, dashboard figures and a run's recommendation.

  • Apache-2.0Free to use, change and run yourself
  • OfflineNo cloud AI calls unless you allow them
  • 11 formatsTest reports from JUnit, pytest, TestNG, Allure and more
  • Your serversRuns on Docker, Kubernetes or OpenShift
  • 4 ways to use itWeb app, API, command-line tool and AI assistants

Three questions, answered with evidence

Every failed build raises the same questions. TestLookup answers them from your own test history.

  • Why did the build fail?

    TestLookup groups failures that share a cause. It sorts each one by kind: product bug, infrastructure, test data, or automation defect, which is a bug in the test itself. Each failure comes with its evidence and history, so nobody looks into the same failure twice.

  • Flaky or real?

    A flaky test passes or fails at random, with no change to the code. TestLookup scores each test from four signals and shows how sure it is, so you can tell flaky tests from real bugs. It can suggest setting a flaky test aside (quarantine), but a QA lead must approve that first.

  • Can we ship?

    TestLookup gives each software release a GO or NO-GO verdict, with the reasons behind it. It looks at the latest results of the tests linked to the release and at any open defects. Until at least 5 different tests have results, the release shows Not evaluated instead of a verdict.

How it works

  1. Send results

    Upload your test report files, or send them from your continuous integration (CI) jobs with the command-line tool or the API. You can also send results live while the tests run.

  2. TestLookup analyzes

    Built-in rules check every failure, and a model trained on your team's labels joins once there's enough data. If you turn one on, a local AI model can explain likely root causes. Everything links back to each test's history.

  3. Your team acts

    Each person works through failures in their own inbox, tracks flaky tests and defects, and checks whether a release is ready. Do it in the web app, from the command line, or through an AI assistant.

Everything between a test run and a release decision

Collect

Every result, from every framework

Send the test reports your tools already write. TestLookup works out the format, keeps the CI details of each run, and links every result to that test's history.

  • 11 report formats, including JUnit, pytest, TestNG, Allure, Playwright, Cypress, Robot Framework and Cucumber
  • Live results from pytest, Jest, Playwright, Vitest, Cypress, TestNG, JUnit 5 and 6, Go and more
  • Timing for each test and each parallel worker, with a flag when tests get slower
How to send results
Runs table for 13 test runs, showing each run's number and suite, failure signature, status, AI verdict, test counts, pass rate and timing.
Sample data Every run with its status, AI verdict and pass rate

Analyze

Failures grouped and explained

See which failures share a cause, which are new and which keep coming back. Each one shows its kind, its history and the recent code changes that may have caused it.

  • Failures grouped by cause, within one run and across many runs
  • Kinds: product bug, infrastructure, test data and test automation
  • Defect records that go to Jira only after someone approves them
Explore failure analysis
Failure categories for 36 failures: assertion or product 21, timeout 9 and unknown 6, with test code or data, network and infrastructure runner still shown at zero, each tagged Product, Test code, Infrastructure or Unknown.
Sample data Failures by error type, each mapped to a kind: product, test code or infrastructure

AI you control

AI analysis you can check

Rules and a model trained on your own labels do most of the work. An AI language model is optional, either running locally with Ollama or a hosted one an administrator allows. Every analysis is saved as a version, and a person's correction becomes the next one.

  • Switches to a larger AI model only when the smaller one is unsure
  • Monthly AI spending limits that can switch analysis back to rules or your trained model
  • Search by meaning and find similar failures, all on your own network
See how the AI works
AI analysis across runs: stored versions from the rules engine, a language model and a human correction, with the category changing from infrastructure to product bug.
Sample data Each analysis is kept as a version, including human corrections

Delegate

Agents that propose, people approve

After every run, TestLookup's AI agents, which are automated helpers, analyze the failures. The Investigator tests five possible explanations at once. It can propose actions, such as setting a flaky test aside, and they run only after a QA lead approves them.

  • Three trust levels: Shadow, Suggest and Act. Only a QA lead can move an agent up a level.
  • Saved versions of each agent workflow that you can copy and run again
  • An MCP server, so AI assistants such as Claude and Cursor can use TestLookup
Meet the agents
Investigator agent settings: the Shadow, Suggest and Act trust ladder with Act selected, three action types (quarantine, reassign, internal defect) and budgets for runs per day, LLM calls, tokens and seconds per run.
Sample data Agent trust ladder and budgets

Stabilize

Keep flaky tests under control

Find the tests that pass and fail with no change to the code, and rank them by impact. Set them aside with an approval everyone can see, instead of quietly skipping them.

  • A flakiness score that shows how sure it is
  • Requests to set a test aside (quarantine), approved by a QA lead
  • A CI check that ignores only the failures of tests set aside
Learn about flaky tests
Flaky tests table with a dot for each pass and fail, failure rate, flakiness score with confidence, a recommendation to quarantine, investigate or monitor, impact, and a Propose quarantine button.
Sample data Flaky tests ranked by score and impact

Own

Every failure goes to its owner

Your ownership rules and your CODEOWNERS file, which says who owns which code, decide who owns each test. Every new failure goes to its owner's inbox. Each test keeps its history run by run, and decisions wait in one approvals list.

  • Assigned by the suite owner, a CODEOWNERS rule or a pool of QA leads
  • When someone reassigns a failure by hand, later runs keep that choice
  • A timeline of versions for every test case your team writes
See who owns what
Update triage status dialog for a failing test with options: reviewed and approved, defect created, automation script issue, flaky test, and won't fix.
Sample data Triage a failure in one step

Track

See quality trends over time

Follow pass rate, test executions, failures and durations over time, by suite, branch, environment or release. Insights point out what changed. A number TestLookup couldn't measure shows as blank, with the reason, instead of zero.

  • Charts that mark each release and show your target pass rate, the GO line
  • An explorer that splits any measure into small side-by-side charts
  • Hourly insights, and alerts when an expected run doesn't arrive
Tour the dashboards
Pass rate trend over 14 days at 89.3% overall: the daily pass rate between 81% and 94% as a line over daily execution bars, a dashed GO line at 95%, a shaded No-Go band below 90%, and the chips Trend falling 3.3 pts per week and Last 7 days 87.5% vs 91.1%.
Sample data Trends against your GO line

Decide

Plan and ship releases

Plan each software release in phases on a shared calendar. Ship on a verdict you can explain, with the blocking reasons and the evidence behind them. Overriding a decision needs a written reason, and every decision is logged.

  • GO, NO-GO or Not evaluated for each release
  • Phases, a release calendar, and export to Outlook, Google or Apple calendars
  • Signed bundles of evidence for auditors, called compliance packs
See release management
Release gate card for one test run: a NO GO recommendation at a 44.4 percent pass rate, a risk score of 60, and an Override decision button.
Sample data A test run's recommendation on the Release gate page, with its risk score

Manage

Test cases next to the results

Keep your written test cases, suites and plans next to the test results that prove them. Library health shows what is automated, out of date or waiting for review.

  • Cases, suites, plans and approvals
  • Turn automated tests found in your results into managed test cases
  • Import from CSV or Excel files
Explore test management
Test library insights: library health 81 of 100 (needs attention), automation at 47 percent against a 60 percent target, a review queue of two cases keyed TC-BBB3F0 and TC-340B56, four recent edit and review-request events, and a 7 automated, 8 manual coverage bar.
Sample data Test library health and automation coverage

Automate

Connect TestLookup to your CI

Each run arrives linked to its pull request, CI job and code changes. TestLookup finds the build where a new failure started, and automatic actions wait for a person's approval. If TestLookup can't answer, your pipeline check fails instead of passing.

  • Detects GitHub Actions, GitLab CI, Jenkins, Azure DevOps and CircleCI
  • A ranked list of tests likely affected by the changed files
  • Signed webhooks to your own systems, summary digests, and alerts when a test starts or stops failing
Connect your CI
Five analysis pipeline runs for run 60: a deep pipeline in progress with a Stop button, two failed runs with Retry buttons, one completed but marked Degraded because some steps fell back to simpler answers and awaiting review, and one that passed and was reviewed.
Sample data TestLookup's analysis runs for one test run, with retry

Govern

Prove who did what

An activity log records every change. You also get roles, single sign-on, holds that stop data from being deleted, personal-data requests, and signed evidence an auditor can check offline.

  • Each change shown before and after, filtered by person, API key or agent
  • Single sign-on with SAML or OpenID Connect, and automatic user setup with SCIM
  • Evidence bundles signed with your own installation's key
See governance
Your data panel in a profile: prepare a signed copy of everything TestLookup holds about you and download it for a limited time, with a note on how erasure works.
Sample data Download a copy of your data

Works with the tools you already use

You don't need a new test runner or any rewrite. TestLookup reads the reports your tools already produce.

Report files

  • JUnit
  • pytest
  • TestNG
  • Allure
  • Playwright
  • Cypress
  • Robot Framework
  • Cucumber
  • NUnit
  • TRX
  • xUnit

Live reporters

  • pytest
  • Robot Framework
  • Jest
  • Mocha
  • Playwright
  • Vitest
  • Cypress
  • Cucumber JS
  • TestNG
  • JUnit 5 and 6
  • Go

Integrations

  • GitHub
  • GitLab
  • Jira
  • Slack
  • Microsoft Teams
  • Email
  • Webhooks
  • Splunk
  • OpenShift
  • Prometheus

Ways to use it

  • Web app
  • REST API
  • Command-line tool
  • MCP server for AI assistants
  • Python, JavaScript, Java and Go libraries
Check a release in CIbash · TestLookup CLI
testlookup release gate "2026.10" --project "Checkout Service" --evaluate --fail-on NO_GO

It records a fresh verdict, then ends with a code any CI system can act on. The code is 0 for GO, 1 for NO-GO, 3 when there's no verdict yet and 2 when TestLookup can't answer. Details: the --evaluate option needs a QA lead or a project API key.

All integrations

Built for the whole delivery team

  • QA engineers

    Spend your time on new failures instead of re-reading old ones. Your inbox shows what's assigned to you.

  • Developers

    See whether your change broke something or the test is just flaky, with the likely causes and the test's history.

  • Release managers

    Get a clear GO or NO-GO for each release, the evidence behind it, and a record of every override.

  • Platform teams

    Run it on Docker Compose, Kubernetes, K3s or OpenShift, including on networks with no internet access.

AI is optional

AI that you control

  • Works without an AI model

    Rules check every failure, and a model trained on your team's labels joins once there's enough data. You don't need an AI language model at all.

  • Local by default

    When you add an AI model, it runs on your own hardware through Ollama, free software for running models. Offline mode is on by default and blocks cloud AI providers.

  • People stay in charge

    Every AI report goes to a person for review, and corrections are kept as new versions. By default, reports go out before anyone reviews them. An administrator can make review required.

How the AI works

Private by default

Your test data never has to leave your network

TestLookup runs entirely on servers you control. Offline mode is on by default, and while it's on, TestLookup makes no calls to cloud AI services or outside integrations. It sends notifications only to private addresses or to addresses you have approved.

  • You run it yourself, with your own databases and file storage
  • Single sign-on, automatic user setup (SCIM), two-step sign-in and roles
  • Rules for how long data is kept, legal holds and signed exports
Self-hosting and security

Try it your way

Built in the open

TestLookup is built in public on GitHub under the Apache-2.0 license. Follow the roadmap, read what changed, and help decide what comes next.

Questions people ask

Is it really free?

Yes. TestLookup is open source under the Apache-2.0 license. There's no paid edition and no hosted service, so you run it yourself.

Does it send my data anywhere?

Only if you allow it: offline mode is on from the start, so TestLookup makes no calls to cloud AI or outside integrations. Notifications go only to private addresses or to addresses you have approved. The only other traffic is basic housekeeping: downloads of software images and AI models you haven't saved locally, name lookups (DNS) and clock sync.

Do I need an AI model?

No. Rules check every failure, and a model trained on your team's labels joins once it has enough data. You can add a local AI model through Ollama for deeper root-cause analysis and the Ask AI chat.

Which AI models can I use?

You can use a local model through Ollama, LM Studio, LocalAI or vLLM, or a hosted one from OpenAI, Anthropic, Gemini or OpenRouter. Offline mode, which is on by default, allows only models on your own network. An administrator can limit the choice further.

Which test frameworks does it support?

It reads report files from JUnit, pytest, TestNG, Allure, Playwright, Cypress, Robot Framework, Cucumber, NUnit, TRX and xUnit. It can also receive live results from pytest, Robot Framework, Jest, Mocha, Playwright, Vitest, Cypress, Cucumber JS, TestNG, JUnit 5 and 6, and Go.

Is it a test runner?

No. Your own test frameworks and CI system run the tests. TestLookup collects the results and turns them into answers.

Is it ready for production?

Not yet: TestLookup is still in early development, before version 1.0 and its first release, so expect some bugs and changes. You can run it today with the one-command installer, which uses the newest images from the main branch, or build it from source. Follow the roadmap for news of the first release.

Find out why your tests fail

Run TestLookup on your own computer today, or try the demo first.