Test reports that survive the week

A QA engineer's report has a short, brutal life. The run finishes, the HTML lands in playwright-report/, CI zips it as an artifact, and from that moment it is effectively unreadable: the zip has no origin, so CSS 404s and the page renders blank; the artifact viewer refuses to serve HTML inline; and in thirty days the whole thing is deleted along with the evidence for the bug you filed.

The report was the most useful thing the pipeline produced, and the pipeline threw it away.

Publish from the job that made it

Add one step after the test step. The report gets a URL, the URL goes in the PR comment, and the developer clicks it instead of downloading 80 MB.

Publish the whole output directory, not the entry file. Playwright, Allure, Cypress and Jest reporters all emit sibling assets, and the single most common "the report is blank" ticket is an index.html sent without them. See share an HTML folder and Playwright report blank.

Per-runner detail: Playwright · Cypress · Allure · Jest · Vitest · JUnit · pytest · TestNG · Robot Framework · Cucumber · Mochawesome · WebdriverIO · Nightwatch · Appium · Xcode · Android.

Update one report per branch, not one per run

A new URL on every push is noise. The pattern that works: create the report once per PR, then PATCH a revision on each subsequent run.

curl -fsS -X PATCH "https://commareports.com/api/v1/reports/$COMMA_REPORT_ID" \
  -H "Authorization: Bearer $COMMA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d @report.json

The link in the PR description points at the current run, and the revision history shows how the failure count moved across pushes — which is exactly the question a reviewer asks and exactly what a stream of artifact links can't answer.

Flake triage in the report, not in Slack

Flaky-test arguments are unwinnable in chat because nobody is looking at the same row. Anchored comments put the conversation on the test: highlight the failing case, leave "webkit only, and only after the login spec," and it stays there for whoever picks it up on Monday. See commenting on HTML.

If an agent is doing the triage, it can read those threads and reply in them — see letting an agent respond to comments.

Worth knowing

  • Retention is yours. A published report outlives the artifact that produced it. See CI artifact expired.
  • File count, not size, is the usual wall. 500 files and 250 MB per report; per-test JSON trees blow the count first. Most runners have a merged or single-file export mode.
  • Private by default. A test report can leak internal URLs, fixture data and staging credentials in a stack trace. Publish private, widen when you've looked — see sharing & access control.
  • Readers are free. Developers, PMs and support staff who only read are never charged and never counted as seats.

Try it

Comma is free — unlimited reports, unlimited commenters, unlimited revision history.

Start free →

Related