Sharing Reports
When to Use
Letting a teammate, designer, or reviewer look at a report you generated.
Pattern: Zip + Send
zip -r playwright-report.zip playwright-report/
Recipient extracts, then runs npx playwright show-report ./playwright-report. A real HTTP server is needed for traces — file:// breaks trace iframes.
Pattern: GitHub Actions Artifact (CI Standard)
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: playwright-report/
retention-days: 30
Reviewers download from the run's Artifacts panel.
Pattern: GitHub Pages (gh-pages Style)
Push playwright-report/ to a gh-pages branch keyed by SHA or PR number; serve via Pages. Each PR gets a stable URL.
Pattern: Static Hosting
Netlify drop, S3 + CloudFront, Cloudflare Pages, internal nginx — just upload the directory.
Pattern: Port Forwarding
ssh -L 9323:localhost:9323 ci-host
# while show-report runs there
Pattern: attachmentsBaseURL for CDN-Offloaded Images
For huge reports where you want the HTML/JS only and offload images/traces to object storage:
reporter: [['html', { attachmentsBaseURL: 'https://cdn.example.com/runs/123/' }]],
The report fetches data/<file> from that base URL instead of looking next to index.html. Trailing slash is required.
Common Mistakes
- Sharing via
file://— recipient sees a broken trace viewer attachmentsBaseURLwithout trailing slash — URL concatenation fails; "404 not found" on every attachment- Uploading
test-results/instead ofplaywright-report/— wrong artifact; report won't render