Test reports your whole team can actually see.

Host your Playwright, Cypress, Vitest, and pytest reports in one place and share them with a link. No CI access required, no per-seat fees, unlimited users on every plan.

No credit card on Free. Your first upload is one CLI command in CI.

gaffer.report/share/7Kq2mX9p
A shared Gaffer report for playwright-report.json: 17 passed, 2 failed, 1 skipped in 24.5s, an 86% pass rate with 2 flaky tests that passed on retry, and 77% line coverage

When CI fails, the report is an artifact zip only people with CI access can open

  • Everyone without CI access waits for a developer to relay the result

    QA, product managers and clients hear about a failure only when someone with CI access copies it out of the log.

  • An HTML report from CI has to be downloaded, unzipped and served locally

    Everyone who wants to read a Playwright HTML report repeats the same four steps on their own machine. Gaffer hosts that report at a URL.

  • Most test dashboards bill per user, including people who only read reports

    A ten-person team that adds two QA reviewers pays for twelve seats. On Gaffer the price stays the same.

  1. Open the workflow run (needs a CI login)
  2. Download playwright-report.zip
  3. $ unzip playwright-report.zip
  4. $ npx playwright show-report Serving HTML report at http://localhost:9323
How one person reads a Playwright report from a CI artifact today.

Upload a report from CI or your terminal and the run gets its own page: pass and fail counts, duration, pass rate and coverage, with its branch and commit.

Viewers need no CI login and no Gaffer account. Paste the link into Slack, a pull request or an email to a client.

See how sharing works →

Upload reports from CI with two workflow steps

Install the CLI, then put gaffer test -- in front of your test command. It prints a summary in the job log and uploads the report. Open the run in Gaffer, click Share and send the link.

A GitHub Actions step that runs tests through Gaffer, the job log it prints, and an example share link.
.github/workflows/test.yml
- name: Install Gaffer CLI
  run: curl -fsSL https://app.gaffer.sh/install.sh | sh

- name: Run tests
  run: gaffer test -- npm test
  env:
    GAFFER_TOKEN: ${{ secrets.GAFFER_TOKEN }}
Job log
gaffer  41 passed  1 failed  3 skipped  12.4sHealth: 87 (good) ^  Slow: p95 245.3msNew failures: 1   src/billing.test.ts > charge cardCoverage: 78.5% lines (1234/1572)Synced: 1 run uploaded
Share on the run page
gaffer.report/share/7Kq2mX9p Example link.

Gaffer parses the report and coverage files your tools already write

Test reports
  • Playwright
  • Jest
  • Vitest
  • JUnit XML
  • pytest
  • Cypress
  • CTRF
  • .NET TRX
  • HTML reports
Coverage
  • LCOV
  • Cobertura
  • JaCoCo
  • Clover

Gaffer compares your runs to find flaky tests and coverage drops

See which tests are flaky and how often they flip

Gaffer lists tests that pass and fail on the same code, with each one's flip rate and last flip.

Gaffer flaky tests table: four tests with flip rates of 23%, 18%, 14% and 11% over the last 30 days, with run counts and when each last flipped
Flaky Tests Detected on a Gaffer test run: two tests, opens the signup modal and returns results for partial matches, passed on retry after failing

Group failing tests by the error they share

Twelve tests broken by one bad fixture show up as one pattern, not twelve failures.

Failure Patterns on a Gaffer test run: two patterns, a toHaveURL assertion tagged Product Bug and a toBeVisible locator timeout tagged Automation Bug
Failure Patterns on a Gaffer test run: two patterns, one tagged Product Bug and one tagged Automation Bug, one test each

A health score, P95 duration and flaky count per project

The score runs 0 to 100 and combines pass rate, stability and trend.

Gaffer project health cards: health score 90, Excellent over 77 runs, P95 duration 12.2s, 5 flaky tests, 78% coverage
Gaffer project health cards: health score 90, Excellent over 77 runs, and 5 unstable tests, all 5 newly flaky

Line, branch and function coverage, gated on PRs

Upload LCOV, Cobertura, JaCoCo or Clover next to your tests. Gaffer can fail a pull request's commit status when coverage drops below your threshold.

Coverage for one Gaffer test run: 77% of lines, 71% of branches and 77% of functions covered
Coverage for one Gaffer test run: 77% of lines, 71% of branches and 77% of functions covered

Flat pricing, unlimited users

Free

$0/month
  • 500 MB storage
  • 7-day report retention
  • Unlimited users
  • Basic analytics
  • Slack notifications
  • Webhook notifications

Pro

Recommended
$15/month
  • 10 GB storage
  • 30-day report retention
  • Unlimited users
  • Advanced analytics
  • Slack notifications
  • Webhook notifications
  • Priority support

Team

$49/month
  • 50 GB storage
  • 90-day report retention
  • Unlimited users
  • Advanced analytics
  • Slack notifications
  • Webhook notifications
  • Priority support

Questions about plans? Email [email protected].

Send the next failed CI run to your team as a link

Unlimited users on every plan, so adding QA or a client costs nothing. Want to look first? Open the demo.