Browser Test Reports
What does a TestRelic browser test report contain, and how do I analyze the navigation timeline, network stats, and failure diagnostics?
Browser test reports provide analytics for E2E tests — a navigation timeline, network statistics per page visit, test results, and failure diagnostics, all written to a single JSON file.
A hand-recreated slice of the report's navigation timeline — click a step to expand its network stats and resource-type breakdown, the same way the real report's drawer does.
What does a report contain?
- Navigation timeline — every URL visited during each test, in chronological order
- Network statistics — request counts, bytes transferred, and resource-type breakdowns per navigation
- Test results — pass/fail/flaky/skipped status, duration, retry count, and tags
- Failure diagnostics — error messages, source snippets pointing to the failure line, and optional stack traces
- CI metadata — auto-detected provider (GitHub Actions, GitLab CI, Jenkins, CircleCI) with build ID, commit SHA, and branch
- Visual comparisons — baseline, actual and pixel diff per snapshot, with the differing-pixel count and the elements that changed. See Visual Testing
- API assertions — every assertion made against a tracked API call, with its expression, expected and received values, and the source line
- Artifacts — screenshot, video and trace per test, each reachable from the detail page
Reading the report
The overview leads with a verdict band — a headline saying what broke, a proportion bar, and counts, with empty statuses collapsed to a single line rather than given a card each. Below it, a Needs attention block promotes failures to the top of the page with their cause, the evidence captured for them, and the pixel diff itself, so a visual regression is legible without opening anything.
Test rows carry two things at the same row height: evidence chips saying what was captured for that test, and a duration bar relative to the slowest test currently shown.
Opening a test replaces the results view with a page, not an overlay. It gets its own URL (#test/<id>) and history entry, so a link to a failing test opens that test and the browser's Back button returns you to the list with your scroll position intact. The page carries prev/next through the currently filtered list and a section rail with counts — jump to Visual or Elements instead of scrolling past the failure.
Two report modes
reportMode: 'streaming' (the default) writes a .testrelic-report/ directory served by npx testrelic serve. reportMode: 'embedded' writes one self-contained HTML file you open directly from disk. Every section described here renders identically in both.
Report schema
{
"schemaVersion": "1.7.0",
"testRunId": "797128f5-c86d-466c-8d6d-8ec62dfc70b6",
"startedAt": "2026-02-07T10:41:28.759Z",
"completedAt": "2026-02-07T10:41:36.794Z",
"totalDuration": 8035,
"summary": { "total": 6, "passed": 5, "failed": 1, "flaky": 0, "skipped": 0 },
"ci": { "provider": "github-actions", "buildId": "12345678", "commitSha": "abc123def456", "branch": "main" },
"timeline": ["..."]
}| Field | Type | Description |
|---|---|---|
schemaVersion | string | Report format version. Currently 1.7.0; every field added since 1.0.0 is optional, so a consumer written against an earlier version keeps working. |
testRunId | string | Auto-generated UUID for this run (overridable) |
summary | object | Counts of total, passed, failed, flaky, skipped |
ci | object | null | Auto-detected CI environment details, or null outside CI |
timeline | array | Chronological list of page navigations with associated tests |
Each timeline entry is a single navigation:
{
"url": "https://en.wikipedia.org/wiki/Main_Page",
"navigationType": "goto",
"visitedAt": "2026-02-07T10:41:29.844Z",
"duration": 216,
"specFile": "tests/homepage.spec.ts",
"networkStats": { "totalRequests": 40, "failedRequests": 0, "totalBytes": 1289736, "byType": { "document": 1, "script": 9 } },
"tests": [{ "title": "homepage.spec.ts > Homepage > loads correctly", "status": "passed", "duration": 1028, "failure": null }]
}navigationType is one of goto, link_click, back, forward, spa_route, hash_change. When a test fails, failure includes a message, a snippet (file, line, surrounding source with a >>> marker on the failing line), and an optional stack.
Analyzing reports
Read my TestRelic browser report at test-results/analytics-timeline.json and:
1. Print the test summary (total, passed, failed, flaky, skipped)
2. List the 5 slowest page navigations (url + duration)
3. List all failed tests with their error messages
Write a Node.js script that does all of this.Write a bash script that reads my TestRelic report (test-results/analytics-timeline.json)
and exits with code 1 if summary.failed > 0, printing the number of failures.
Use jq. The script should be suitable for a GitHub Actions step.CI quality gates
- name: Run Tests
run: npx playwright test
- name: Check for failures
run: |
FAILED=$(jq '.summary.failed' test-results/analytics-timeline.json)
if [ "$FAILED" -gt 0 ]; then
echo "Tests failed: $FAILED"
exit 1
fiNext steps
Visual Testing
Catch unintended UI changes with visual baselines — how TestRelic captures Playwright's screenshot comparisons, what lands in the report, and how to keep baselines stable.
API Test Reports
What does a TestRelic API test report contain, and how do I analyze request/response data, assertions, and failures?