Skip to content

Latest commit

 

History

History
90 lines (73 loc) · 1.9 KB

File metadata and controls

90 lines (73 loc) · 1.9 KB

Unified Test Reporting Platform

Deterministic, parser based unified test reporting with Grafana dashboards. No LLMs.

Architecture

  • API: FastAPI with REST ingestion
  • Storage: Postgres
  • Visualization: Grafana dashboards provisioned from JSON

Architecture diagram

ZIP report
    |
    v
REST API /push
    |
    v
ZIP extract -> parser -> normalized schema
    |
    v
Postgres storage
    |
    v
Grafana dashboards (provisioned)

Data flow:

  1. POST /push with framework and ZIP report
  2. ZIP is extracted and parsed by the framework parser
  3. Data is normalized into a framework agnostic schema
  4. Grafana reads from Postgres with provisioned dashboards

Quickstart

  1. Start the stack
docker-compose up --build
  1. Push a report ZIP
curl -X POST http://localhost:8080/push \
  -F "framework=junit" \
  -F "report=@sample_data/sample_reports.zip"
  1. Open Grafana

Dashboard: Unified Test Reporting

REST API

POST /push

  • 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

GET /health

  • Returns API and database status

Normalized schema

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".

Extending parsers

  1. Add a parser in api/app/parsers/
  2. Implement detect(root) and parse(root)
  3. Register in api/app/parsers/registry.py
  4. Add a fixture under sample_data/ and a test in tests/test_parsers.py

Grafana provisioning

  • Datasource: grafana/provisioning/datasources/datasource.yml
  • Dashboards: grafana/dashboards/test_reporting.json

No manual dashboard edits are required or supported.