Complete guide to Playwright reporting

Learn how Playwright's reporting ability improve test visibility and debugging. This article covers built-in and third-party reporters, including HTML and Trace Viewer, plus best practices to get faster feedback and actionable insights from every test run.

Playwright reporting is the difference between knowing a test failed and understanding why it failed. For teams managing test automation reporting, this is the core challenge.

Modern test suites generate thousands of assertions across browsers, environments, and CI pipelines. Without clear reporting, failures turn into guesswork, making Playwright failure analysis difficult, debugging slow, and releases unreliable.

This guide explains Playwright reporting from first principles through advanced, production-scale setups.

By the end, you'll know what Playwright reports contain, how reporters work, when to use traces, and how to choose the right reporting strategy for your team.

Why Test Automation Reports are Needed?

Once tests start running, the next challenge is understanding the results. A failing CI job only shows that something broke; it does not explain what failed or why. Test automation reports solve this by turning raw test runs into clear, actionable information the whole team can use.

With proper reporting, failures come with context. Teams can see the exact step that failed, along with timing data and supporting artifacts such as screenshots or traces when enabled. This reduces back-and-forth and helps issues get fixed faster.

Over time, good reporting also makes test suites easier to manage. It helps teams track tests flaky , identify slow or unstable specs that impact CI time, and spot failures that repeat across branches or pipelines.

In CI environments, reports act as a shared source of truth that developers, QA, and leads can rely on to make consistent decisions.

What is a Playwright Test Report?

A Playwright test report is the output generated after a test run that summarizes test results and execution details. It shows which tests passed or failed, how long they took, and what went wrong when a failure occurred, without requiring teams to inspect raw logs.

From a reporting perspective, Playwright is especially strong. When a test fails, the report links directly to the exact step that broke and can include screenshots, videos, and traces.

This allows teams to inspect the DOM state, review network activity, and understand failures from a single place, making debugging faster and more reliable across local runs and CI pipelines.

What Makes Playwright Reporting Different

Playwright reporting stands out because reporting and debugging are built directly into the framework rather than added through plugins.

Test results, execution steps, and debugging artifacts are generated as part of the normal test run, which keeps reporting consistent across local environments and CI pipelines.

Compared to other test frameworks, Playwright reporting offers a few practical advantages. It provides step-level visibility into test execution, integrates natively with traces, screenshots, and videos, and supports parallel test runs without losing clarity in reports. These features work out of the box and require minimal configuration.

Most importantly, Playwright reporting shortens the path from failure to root cause. When a test breaks, teams can inspect the exact step, application state, and supporting artifacts from a single report, reducing guesswork and speeding up debugging.

Different types of Playwright Reporters

When you run Playwright tests without explicitly configuring a reporter, Playwright uses the list reporter by default. You can customize reporting by specifying one or more reporters in the playwright.config file. In many setups, the HTML reporter is commonly enabled to provide a detailed, interactive view of test results.

You can also configure reporters directly from the command line using the --reporter flag. For example, to run tests with a specific reporter:

terminal
npx playwright test --reporter=line

After the test run completes, Playwright generates the report output in the configured directory, such as the default playwright-report folder or a custom path if specified. These reports make it easier to review test results and choose the reporting format that best fits your locament or CI needs.

Built-In Playwright Reporters

Playwright includes several built-in reporters that work out of the box and cover most reporting needs, from local development to CI pipelines.

These reporters require no additional installation and can be configured directly in the Playwright configuration file.

List Reporter

The List reporter is the default reporter in Playwright. It prints each test name along with its status as the run progresses, making it ideal for local development where readability matters. Failed tests include error details, which helps developers quickly understand what went wrong.

playwright.config.ts
export default {
  reporter'list',
};

list reporter

Line reporter

The Line reporter outputs one line per test, making it more compact than the List reporter. It works well for medium to large test suites where verbose output can become noisy, while still providing a clear summary of test execution.

playwright.config.ts
export default {
  reporter'line',
};

Playwright line reporter output showing concise test execution summary in the terminal after running npx playwright test

Dot reporter

The Dot reporter displays a dot for each test. Green for passes and red for failures, and is best suited for CI pipelines where minimizing log size is more important than detailed output.

For example, the output might look like .....F.. in the command line, making it easy to spot failures at a glance.

This concise format is especially useful for parallel test execution in CI environments, where multiple test runs are happening simultaneously and quick identification of issues is critical.

playwright.config.ts
export default {
  reporter'dot',
};

Playwright dot reporter output showing dots for test execution progress and a summary of passed tests in the terminal

HTML reporter

The HTML reporter creates an interactive and detailed HTML report that displays test suites, steps, retries, screenshots, videos, and traces (when enabled), making it ideal for debugging failures and sharing comprehensive test results with the team.

The generated report is saved in the default 'playwright-report' folder, which organizes your test artifacts and allows for easy access and analysis of your detailed HTML reports.

playwright.config.ts
export default {
  reporter'html',
};

Playwright terminal output showing how to open the HTML test report using npx playwright show-report

Open the report

terminal
npx playwright show-report

JSON reporter

The JSON reporter outputs detailed test data, including timing and metadata, in JSON format, and is best used for custom dashboards, analytics, or integrations that consume structured test results.

You can generate a JSON report in terminal with playwright CLI command npx playwright test --reporter=json

You can save this report by adding following command in your config file

playwright.config.ts
export default {
  reporter: [['json', { outputFile'results.json' }]],
};

json CLI

JUnit reporter

The JUnit reporter outputs test results in XML format that is widely supported by CI systems, making it ideal for CI dashboards that track test summaries and trends over time.

You can get JUnit report in terminal using the Playwright CLI command npx playwright test --reporter=junit

And if you want to save the XML file, you can add this to your config file

playwright.config.ts

export default {
  reporter: [['junit', { outputFile'junit.xml' }]],
};

saved json

Using Multiple Playwright Reporters

One of the strengths of Playwright reporting is that you are not limited to a single reporter. You can configure multiple reporters in the same test run, with each one serving a different purpose for developers, CI systems, or reporting tools.

A common real-world setup looks like this:

playwright.config.ts
export default {
  reporter: [
    ['dot'],
    ['html', { outputFile'index.html' }],
    ['list'],
  ],
};

In this setup, the List reporter provides clear and readable output during local runs, the Dot reporter keeps CI logs compact, and the JSON reporter generates structured data that CI systems or dashboards can consume. All reports are produced from a single test run, so there is no need to rerun tests for different audiences.

This approach scales well from local development to CI pipelines and is suitable for most teams.

Playwright Traces

Reports tell you what failed. Traces show you how it failed.

A Playwright trace is a recorded timeline of a test run. It captures everything that happened during execution, including page actions, DOM state, network requests, console logs, and screenshots. When a test fails, traces let you replay the failure step by step instead of guessing from logs.

Traces are especially useful when:

  • A test fails only in CI but passes locally

  • A failure depends on timing or async behavior

  • Screenshots alone do not explain what went wrong

Instead of re-running tests with extra logging, you open the trace and see the exact sequence of events that led to the failure.

When and How to Enable Traces

When enabled, Playwright records trace data during test execution and saves it as an artifact that can be opened in the Playwright trace viewer.

Traces capture the full execution flow of a test and provide deeper context than logs, screenshots, or videos alone, making them especially useful for debugging complex or CI-only failures.

What a Playwright trace includes:

  • Actions and assertions executed during the test

  • DOM snapshots before and after each step

  • Network requests, responses, and console logs

  • Screenshots tied to execution steps

trace--light

Traces work alongside reporters, not as a replacement. Reporters identify which test failed, screenshots and videos show what the page looked like, and traces explain why the failure occurred by replaying the exact sequence of events.

In CI, traces are usually stored as artifacts or uploaded to reporting tools as part of a complete debugging workflow.

Custom Playwright Reporters

Built-in reporters are usually enough, but when teams need custom output or integration with internal systems, Playwright allows you to create custom reporters. A custom reporter hooks into the test run and lets you process results in your own way without changing how tests are written or executed.

Simple Custom Reporter Example

custom-reporter.ts
import type { ReporterTestCaseTestResult } from '@playwright/test/reporter';
import fs from 'fs';

class SimpleReporter implements Reporter {
  onTestEnd(testTestCaseresultTestResult) {
    fs.appendFileSync(
      'Report.txt',
      `${test.title} ${result.status} in ${result.duration}ms\n`
    );
  }
}

export default SimpleReporter;

Register the Custom Reporter

playwright.config.ts
export default {
  reporter: [['./custom-reporter.ts']],
};

Output:

custom-reporter

custom-reporter

When tests run, the custom reporter writes one line per test to Report.txt, including the test name, status, and execution time.

Third-Party Reporters in Playwright

Built-in and custom reporters work well for individual runs and single pipelines, but as test suites grow, teams often need more visibility. Third-party Playwright reporters focus on long-term insights such as test history, trends across branches, and overall test health.

Playwright has a strong reporting ecosystem, with community tools curated in the Awesome Playwright repository. These tools build on top of Playwright's existing outputs rather than replacing them.

Tools like TestDino consume Playwright's JSON or HTML reports and turn them into centralized dashboards showing test runs, failures, screenshots, and trends over time.

TestDino is a Playwright test reporting and analytics platform that turns raw test results into an interactive web dashboard for streamlined test management and access to detailed test reports for each run.

Your team can view test runs, failures, screenshots, and AI insights in one place instead of relying on console logs or local HTML files.

Prerequisites

Before starting, make sure you have:

  • A working Playwright project
  • Node.js installed (locally or in CI)
  • A TestDino account A TestDino project
  • A project token (keep it secret; don’t commit it)

1. Install & Check the TestDino CLI

TestDino provides a CLI called tdpw. You can use it via npx.

terminal
npx tdpw --help

install-check

2. Configure Playwright Reporters

TestDino uses Playwright's JSON report (HTML is optional but recommended).

Add this to playwright.config.js or playwright.config.ts:

playwright.config.ts
reporter: [
  ['json', { outputFile'./playwright-report/report.json' }],
  ['html', { outputDir'./playwright-report' }],
],

This creates:

  • JSON report: ./playwright-report/report.json

  • HTML report & assets: ./playwright-report/

3. Run Tests Locally

Run Playwright as usual:

terminal
npx playwright test

Playwright test execution in terminal showing a failed test with error details after running npx playwright test

4. Upload Reports from your machine

Upload the report directory to TestDino:

terminal
npx tdpw upload ./playwright-report --token="your-token" --upload-html

  • --token → your TestDino project token

  • --upload-html → uploads screenshots and HTML assets

5. Upload Reports from CI

Store the token as a secret (TESTDINO_TOKEN).

.github/workflows/playwright.yml
namePlaywright Tests
on:
  push:
  workflow_dispatch:

jobs:
  test:
    runs-onubuntu-latest
    containermcr.microsoft.com/playwright:latest

    steps:
      - usesactions/checkout@v4

      - usesactions/setup-node@v4
        with:
          node-version'22.x'

      - runnpm ci
      - runnpx playwright install --with-deps
      - runnpx playwright test

      - nameUpload to TestDino
        ifalways()
        runnpx tdpw upload ./playwright-report --token="${{ secrets.TESTDINO_TOKEN }}" --upload-html

if: always() ensures reports upload even if tests fail.

6. View Results in TestDino

In the TestDino dashboard, you'll see:

  • Test runs with pass/fail counts and duration

  • Filters by branch, author, or environment

  • Detailed test case results

  • Failure details: errors, stack traces, screenshots, traces

  • AI hints to identify flaky tests vs real issues

Professional Reporting
Treat your test suite like a product with clean reporting.
Start Reporting CTA Graphic

Over time, TestDino becomes a single source of truth for Playwright test health, turning reporting into a shared engineering signal rather than a local debugging artifact.

Choosing the Right Playwright Reporting Setup

The right Playwright reporting setup depends on where tests run and how results are consumed. Reporting should stay lightweight during development, structured in CI, and expandable as test suites grow.

A practical way to choose a setup:

  • Local development: Use List or Line reporters for readable output; enable the HTML report only when debugging.

  • CI pipelines: Use a compact console reporter like Dot and always generate JSON or JUnit for CI dashboards.

  • Larger test suites: Store HTML reports and traces as artifacts, usually only on failure.

  • Long-term visibility: Use tools like TestDino that consume Playwright's JSON or HTML reports to track history and trends.

This approach keeps reporting simple at the start and allows teams to scale visibility without changing how tests are written.

Common Mistakes in Playwright Reporting

Playwright provides powerful reporting features out of the box, but teams often lose their benefits due to poor configuration or over-engineering. Most reporting issues are not caused by the framework itself, but by how reports are generated, stored, or reviewed.

Common mistakes to avoid:

  • Relying only on HTML reports: HTML reports are great for debugging but insufficient for CI dashboards or automation without JSON or JUnit outputs.

  • Enabling all artifacts for every test: Recording traces, screenshots, and videos for every run increases storage usage and slows pipelines unnecessarily.

  • Hiding flaky tests behind retries: Retries can keep CI green but often mask unstable tests if failures are not reviewed regularly.

  • Not reviewing reports consistently: Reports provide value only when teams actively check failures and trends.

  • Overcomplicating reporting too early: Adding custom or third-party tools before they are needed creates noise without clear benefits.

Avoiding these mistakes helps keep Playwright reporting fast, reliable, and genuinely useful as test suites scale.

Troubleshooting Playwright Reporting Issues

When Playwright reports are missing or incomplete, the issue is usually related to configuration or CI behavior rather than the tests themselves.

Start by confirming that the correct reporters are enabled and that no CLI flags or environment variables are overriding your playwright.config settings.

In CI, reports may be generated but written to unexpected locations or removed before artifacts are collected. Checking the working directory after test execution and verifying artifact upload steps often reveals the problem.

Differences between local and CI environments can also affect reporting, so running the same command locally with CI settings helps isolate issues quickly.

Best Practices for Playwright Reporting at Scale

  • Keep local reporting simple so developers get quick feedback while running tests.

  • Always generate JSON or HTML reports in CI so tools and pipelines can read the results.

  • Don't enable screenshots, videos, and traces for every run; turn them on only when needed to avoid slow builds.

  • Make sure reports are saved or uploaded in CI even when tests fail, so failure details are not lost.

  • Review failed and flaky tests regularly instead of relying only on retries.

  • Use the same reporting setup in local and CI environments to avoid confusion.

  • Use Playwright reports to debug individual test runs.

  • When test suites grow and you need history, trends, or flaky test tracking, use a tool like TestDino to centralize and analyze Playwright reports over time.

Conclusion

Playwright reporting turns test runs into clear signals your team can trust. With the right mix of built-in reporters, custom logic, and CI-friendly outputs, failures become easier to understand and faster to fix.

Start simple, then scale your reporting as your test suite grows. Use Playwright for accurate run-level insight, and bring in tools like TestDino when you need centralized visibility, trends, and long-term test health.

When reporting is done right, tests stop being noise and start guiding confident releases.

Stop guessing why tests fail
One dashboard for Playwright runs, failures, and trends
Try TestDino CTA Graphic

FAQs

How do I generate an HTML report in Playwright?
Enable a Playwright reporter such as the HTML reporter in your playwright.config or run tests with npx playwright test --reporter=html. This will generate a report file (usually in the playwright-report directory). After the run, open the report using npx playwright show-report.
Should I enable traces for every test?
No. Traces add overhead. A common setup is to record traces only on failure or only in CI.
What is a good reporter setup for CI?
Use a console reporter for logs, generate JUnit or JSON for CI dashboards, and store an HTML report as an artifact for debugging.
When do I need a custom reporter?
Use a custom reporter when you need to send test data to internal systems or produce formats not supported by built-in or third-party reporters.
How does TestDino work with Playwright reporting?
TestDino reads Playwright outputs such as JSON and HTML, uploads them using its CLI, and provides centralized dashboards, analytics, and insights across runs.
Pratik Patel

Founder & CEO

Pratik Patel is the founder of TestDino, a Playwright-focused observability and CI optimization platform that helps engineering and QA teams gain clear visibility into automated test results, flaky failures, and CI pipeline health. With 12+ years of QA automation experience, he has worked closely with startups and enterprise organizations to build and scale high-performing QA teams, including companies such as Scotts Miracle-Gro, Avenue One, and Huma.

Pratik is an active contributor to the open-source community and a member of the Test Tribe community. He previously authored Make the Move to Automation with Appium and supported lot of QA engineers with practical tools, consulting, and educational resources, and he regularly writes about modern testing practices, Playwright, and developer productivity.

Get started fast

Step-by-step guides, real-world examples, and proven strategies to maximize your test reporting success