Deterministic, parser based unified test reporting with Grafana dashboards. No LLMs.
- API: FastAPI with REST ingestion
- Storage: Postgres
- Visualization: Grafana dashboards provisioned from JSON
ZIP report
|
v
REST API /push
|
v
ZIP extract -> parser -> normalized schema
|
v
Postgres storage
|
v
Grafana dashboards (provisioned)
Data flow:
- POST /push with framework and ZIP report
- ZIP is extracted and parsed by the framework parser
- Data is normalized into a framework agnostic schema
- Grafana reads from Postgres with provisioned dashboards
- Start the stack
docker-compose up --build
- Push a report ZIP
curl -X POST http://localhost:8080/push \
-F "framework=junit" \
-F "report=@sample_data/sample_reports.zip"
- Open Grafana
- URL: http://localhost:3000
- Username: admin
- Password: admin
Dashboard: Unified Test Reporting
- Request: multipart/form-data
- Fields:
- framework: allure | junit | testng | cypress | playwright | go-test | ginkgo
- report: ZIP file
Errors:
- 400 if framework is unsupported
- 400 if ZIP does not contain matching report files
- Returns API and database status
Each ingested ZIP is treated as one suite.
Fields per test case:
- name
- start_time
- end_time
- duration_ms
- status (PASS | FAIL | SKIP)
- failure_reason
Missing data uses "NA".
- Add a parser in
api/app/parsers/ - Implement detect(root) and parse(root)
- Register in
api/app/parsers/registry.py - Add a fixture under
sample_data/and a test intests/test_parsers.py
- Datasource:
grafana/provisioning/datasources/datasource.yml - Dashboards:
grafana/dashboards/test_reporting.json
No manual dashboard edits are required or supported.