Zum Hauptinhalt springen

Tests und Prüfungen

Die Teststufen​

Die Tests sind in fünf Stufen aufgeteilt, ein Verzeichnis pro Abhängigkeitsgruppe. Jede Stufe entspricht einem CI-Job, und die Jobs wählen Tests nach Verzeichnis aus, sodass eine neue Testdatei ohne jede Änderung an der CI mitläuft.

VerzeichnisBraucht Home AssistantBraucht NetzwerkAbhängigkeitsgruppeBlockiert PRs
tests/parser/neinneinunit-testja
tests/integration/janeinha-testja
tests/reference/neinneinwradlib-comparisonja
tests/live/neinjaunit-testnein, zeitgesteuert
tests/live_wradlib/neinjawradlib-comparisonnein, zeitgesteuert

Der Grundsatz: Tests, die Pull Requests blockieren, sind deterministisch. Alles, was von der Außenwelt abhängt (DWD Open Data, ein neueres Home Assistant), läuft zeitgesteuert und eröffnet bei einem Fehlschlag ein Tracking-Issue, statt Merges zu blockieren.

  • parser: der Code ohne Home Assistant, dazu Prüfungen über das ganze Repository: Die englischen und deutschen Übersetzungen definieren dieselben Schlüssel, die Upgrade-Seite nennt die alte ID jeder umbenannten Entität, und jede Seite dieser Website existiert in beiden Sprachen.
  • integration: die Home-Assistant-Schicht, auf einer echten hass-Instanz.
  • reference: die Parser und die Gitterzellen-Suche im Vergleich mit wradlib, auf eingecheckten echten DWD-Dateien.
  • live: lädt die echten Dateien von heute herunter und parst sie, einschließlich der Range-Anfragen, und prüft, dass RS weiterhin der Summe der Schritte von RV entspricht.
  • live_wradlib: der wradlib-Vergleich auf den Dateien von heute für jedes Produkt. Hier würde sich eine Änderung des DWD-Gitters zeigen, da die Integration selbst ihr folgt.

Lokal ausführen​

# Schnell, deterministisch, ohne Home Assistant
uv run --group unit-test pytest tests/parser
uv run --group wradlib-comparison pytest tests/reference

# Home-Assistant-Laufzeit (nur Linux)
uv run --group ha-test pytest tests/integration

# Live-Prüfungen gegen DWD Open Data
uv run --group unit-test pytest tests/live -m live
uv run --group wradlib-comparison pytest tests/live_wradlib -m live

tests/README.md beschreibt die Fixtures und Factories und wie die Fixtures aus echten Dateien neu erzeugt werden.

Lint- und Typprüfungen​

  • ruff (nur F-Regeln) auf dem Repository: uv run --only-group lint ruff check .
  • pyright (Basic-Modus) auf der Komponente, gegen die eigenen Typen von Home Assistant: uv sync --only-group typecheck && uv run --no-sync pyright. Halte es bei 0 Fehlern: Behebe einen Befund, oder ignoriere ihn in seiner Zeile mit Begründung.

CI-Workflows​

WorkflowWannWas
tests.ymlPRs, Pushes auf mainStufen parser, integration und reference, ruff, pyright
docs-build.ymlPRs, die die Dokumentation berührenbaut diese Website in beiden Sprachen; schlägt bei kaputten Links fehl
docs-deploy.ymlein Release wird veröffentlichtveröffentlicht diese Website auf GitHub Pages
live.ymltäglichLive-Download und -Parsen; eröffnet bei Fehlschlag ein Issue
live-wradlib.ymltäglich oder von Handwradlib-Vergleich auf Live-Dateien; eröffnet bei Fehlschlag ein Issue
ha-compat.ymlwöchentlichdie Stufe integration gegen das neueste und das Dev-Test-Harness von Home Assistant
hassfest.yaml, validate.yamlPushes, PRs, täglichValidierung des Home-Assistant-Manifests und für HACS
release-delay.ymlzeitgesteuertprüft das RELEASE_DELAY jedes Produkts gegen die tatsächliche Veröffentlichung des DWD
release-drafter.ymlPushes auf main, PRsentwirft die nächsten Release Notes

Live-wradlib-Vergleich für deine eigenen Orte​

live-wradlib.yml lässt sich im Reiter „Actions“ von Hand starten (Live wradlib comparison > Run workflow), um deine eigenen Orte gegen die neuesten Dateien zu prüfen, zum Beispiel dort, wo das Radar gerade Regen zeigt. Die Eingabe locations nimmt name=lat,lon oder lat,lon, getrennt durch ;. Die Job-Zusammenfassung bekommt eine Tabelle mit dem Wert jedes Produkts pro Ort. Lokal ist dieselbe Eingabe die Umgebungsvariable DWD_LOCATIONS.

Prüfung der Veröffentlichungsverzögerung​

scripts/check_release_delay.py mittelt die beobachtete Verzögerung aktueller Dateien (ihr Last-Modified-Header minus der Termin im Namen) und markiert ein Produkt, dessen Mittelwert sein konfiguriertes RELEASE_DELAY übersteigt. Der Workflow eröffnet oder aktualisiert ein Tracking-Issue nur, wenn ein Produkt bei zwei aufeinanderfolgenden Läufen markiert wird, sodass einmaliges Rauschen niemanden alarmiert.