{ "dashboard": { "title": "Playwright Test Execution Dashboard", "tags": ["playwright", "testing", "e2e"], "timezone": "browser", "refresh": "30s", "time": { "from": "now-24h", "to": "now" }, "panels": [ { "id": 1, "title": "Test Execution Overview", "type": "stat", "gridPos": { "x": 0, "y": 0, "w": 6, "h": 4 }, "targets": [ { "expr": "count_over_time({job=\"playwright-tests\", event=\"test_end\"}[$__range])", "legendFormat": "Total Tests" } ], "options": { "colorMode": "value", "graphMode": "area", "textMode": "auto" } }, { "id": 2, "title": "Pass Rate %", "type": "stat", "gridPos": { "x": 6, "y": 0, "w": 6, "h": 4 }, "targets": [ { "expr": "(sum(count_over_time({job=\"playwright-tests\", status=\"passed\"}[$__range])) / sum(count_over_time({job=\"playwright-tests\", event=\"test_end\"}[$__range]))) * 100", "legendFormat": "Pass Rate" } ], "options": { "colorMode": "value", "graphMode": "area", "textMode": "auto", "unit": "percent" }, "fieldConfig": { "defaults": { "thresholds": { "mode": "absolute", "steps": [ { "value": 0, "color": "red" }, { "value": 80, "color": "yellow" }, { "value": 95, "color": "green" } ] } } } }, { "id": 3, "title": "Failure Rate %", "type": "stat", "gridPos": { "x": 12, "y": 0, "w": 6, "h": 4 }, "targets": [ { "expr": "(sum(count_over_time({job=\"playwright-tests\", status=\"failed\"}[$__range])) / sum(count_over_time({job=\"playwright-tests\", event=\"test_end\"}[$__range]))) * 100", "legendFormat": "Failure Rate" } ], "options": { "colorMode": "value", "graphMode": "area", "textMode": "auto", "unit": "percent" }, "fieldConfig": { "defaults": { "thresholds": { "mode": "absolute", "steps": [ { "value": 0, "color": "green" }, { "value": 5, "color": "yellow" }, { "value": 20, "color": "red" } ] } } } }, { "id": 4, "title": "Avg Test Duration", "type": "stat", "gridPos": { "x": 18, "y": 0, "w": 6, "h": 4 }, "targets": [ { "expr": "avg_over_time({job=\"playwright-tests\", event=\"test_end\"} | json | unwrap duration_ms [$__range])", "legendFormat": "Avg Duration" } ], "options": { "colorMode": "value", "graphMode": "area", "textMode": "auto", "unit": "ms" } }, { "id": 5, "title": "Test Status Over Time", "type": "timeseries", "gridPos": { "x": 0, "y": 4, "w": 12, "h": 8 }, "targets": [ { "expr": "sum by (status) (count_over_time({job=\"playwright-tests\", event=\"test_end\"} | json [$__interval]))", "legendFormat": "{{status}}" } ], "fieldConfig": { "defaults": { "custom": { "lineInterpolation": "smooth", "fillOpacity": 20 } }, "overrides": [ { "matcher": { "id": "byName", "options": "passed" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "green" } }] }, { "matcher": { "id": "byName", "options": "failed" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "red" } }] }, { "matcher": { "id": "byName", "options": "skipped" }, "properties": [{ "id": "color", "value": { "mode": "fixed", "fixedColor": "yellow" } }] } ] } }, { "id": 6, "title": "Browser Comparison", "type": "bargauge", "gridPos": { "x": 12, "y": 4, "w": 12, "h": 8 }, "targets": [ { "expr": "sum by (browser) (count_over_time({job=\"playwright-tests\", status=\"passed\"} [$__range]))", "legendFormat": "{{browser}}" } ], "options": { "orientation": "horizontal", "displayMode": "gradient" } }, { "id": 7, "title": "Test Duration Distribution", "type": "histogram", "gridPos": { "x": 0, "y": 12, "w": 12, "h": 8 }, "targets": [ { "expr": "{job=\"playwright-tests\", event=\"test_end\"} | json | unwrap duration_ms", "legendFormat": "Duration" } ], "options": { "bucketOffset": 0, "bucketSize": 1000 } }, { "id": 8, "title": "Top 10 Failing Tests", "type": "bargauge", "gridPos": { "x": 12, "y": 12, "w": 12, "h": 8 }, "targets": [ { "expr": "topk(10, sum by (test_name) (count_over_time({job=\"playwright-tests\", status=\"failed\"} | json [$__range])))", "legendFormat": "{{test_name}}" } ], "options": { "orientation": "horizontal", "displayMode": "gradient", "showUnfilled": true } }, { "id": 9, "title": "Recent Test Runs", "type": "table", "gridPos": { "x": 0, "y": 20, "w": 24, "h": 8 }, "targets": [ { "expr": "{job=\"playwright-tests\", event=\"test_end\"} | json", "legendFormat": "" } ], "options": { "showHeader": true, "sortBy": [{ "displayName": "Time", "desc": true }] }, "transformations": [ { "id": "organize", "options": { "excludeByName": {}, "indexByName": { "Time": 0, "test_name": 1, "test_file": 2, "browser": 3, "status": 4, "duration_ms": 5, "branch": 6, "commit": 7 }, "renameByName": { "test_name": "Test Name", "test_file": "File", "browser": "Browser", "status": "Status", "duration_ms": "Duration (ms)", "branch": "Branch", "commit": "Commit" } } }, { "id": "limit", "options": { "limitField": 20 } } ] }, { "id": 10, "title": "Slowest Tests (P95)", "type": "table", "gridPos": { "x": 0, "y": 28, "w": 12, "h": 6 }, "targets": [ { "expr": "topk(10, quantile_over_time(0.95, {job=\"playwright-tests\", event=\"test_end\"} | json | unwrap duration_ms by (test_name) [$__range]))", "legendFormat": "{{test_name}}" } ] }, { "id": 11, "title": "Flaky Tests Detection", "type": "table", "gridPos": { "x": 12, "y": 28, "w": 12, "h": 6 }, "targets": [ { "expr": "(count by (test_name) ({job=\"playwright-tests\", status=\"failed\"} | json) and count by (test_name) ({job=\"playwright-tests\", status=\"passed\"} | json))", "legendFormat": "{{test_name}}" } ], "description": "Tests that have both passed and failed runs (potential flaky tests)" } ] } }