Die Browser-Tests legten ihre Konten, Kategorien und Buchungen bei jedem Lauf neu an, weggeräumt hat sie niemand: Zuletzt standen über dreitausend Zeilen Testdaten in der Datenbank – vierzig „E2E Bankprovision …“ hintereinander im Kategoriefilter, und kein Bildschirmfoto eines fehlgeschlagenen Tests war mehr zu gebrauchen. scripts/e2e-aufraeumen.php räumt weg, was am Testnutzer hängt – nicht, was nach Testdaten aussieht. Ein Namensmuster übersähe die Buchung „Supermarkt“ und träfe irgendwann etwas Echtes; die Fremdschlüssel dagegen sagen genau, was zu diesem Nutzer gehört, und nehmen über ihre Kaskaden auch die Zeilen ohne eigene benutzer_id mit. Der Nutzer selbst bleibt stehen, und er muss den Anzeigenamen tragen, den scripts/e2e-benutzer.php setzt: Wer E2E_USER versehentlich auf seinen eigenen Zugang stellt, bekommt einen Abbruch statt eines leeren Datenbestands. Aufgerufen wird es vor dem Lauf, nicht danach – ein abgebrochener Lauf hinterlässt sonst einen Bestand, an den niemand mehr denkt, und so bleiben die Daten des letzten Laufs bis zum nächsten für die Fehlersuche stehen. Das deckte auf, dass sieben Tests auf den Resten früherer Läufe standen: Die Auswertungen prüfen, dass ein Bericht eine Tabelle statt eines Platzhalters zeigt, das Cockpit, dass „Übrige Konten“ eine Ebene tiefer führt – Daten dafür legte keiner von ihnen an. scripts/e2e-grundbestand.php stellt deshalb einen festgelegten Bestand her, dessen Zuschnitte an genau diesen Tests hängen: mehr Konten als Vermoegensentwicklung::SERIEN, Buchungen in jedem Monat des laufenden Jahres, ein Vorjahr für den Vergleichsbericht, ein Depot mit Wertpapiergeschäft. Test 41 prüft jede dieser Grenzen einzeln und nennt den Test, der daran hängt. 87 E2E-Tests grün, in 1,3 statt 2,7 Minuten – die Listen rendern keine Tausenden Altzeilen mehr. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AQ57wQWZ4xKHcKmp26bzgr
50 lines
2.2 KiB
Bash
Executable file
50 lines
2.2 KiB
Bash
Executable file
#!/bin/sh
|
||
# E2E-Tests über den generischen e2e-runner ausführen.
|
||
#
|
||
# Die Tests sind OPTIONAL: Fehlt die Infrastruktur (Docker, Runner-Projekt,
|
||
# gepulltes Playwright-Image), wird nur gewarnt und mit Exit-Code 0
|
||
# übersprungen — es wird nichts nachinstalliert oder gepullt.
|
||
set -eu
|
||
|
||
TEST_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||
RUNNER_DIR=${E2E_RUNNER_DIR:-$HOME/projects/e2e-runner}
|
||
BASE_URL=${BASE_URL:-http://host.docker.internal:8000}
|
||
|
||
skip() {
|
||
echo "WARNUNG: $1 — E2E-Tests werden übersprungen." >&2
|
||
exit 0
|
||
}
|
||
|
||
command -v docker >/dev/null 2>&1 || skip "Docker nicht gefunden"
|
||
docker info >/dev/null 2>&1 || skip "Docker-Daemon nicht erreichbar"
|
||
[ -f "$RUNNER_DIR/docker-compose.yml" ] || skip "e2e-runner-Projekt nicht gefunden ($RUNNER_DIR)"
|
||
|
||
IMAGE=$(sed -n 's/^ *image: *//p' "$RUNNER_DIR/docker-compose.yml" | head -n1)
|
||
[ -n "$IMAGE" ] || skip "Playwright-Image im Compose-File nicht ermittelbar"
|
||
docker image inspect "$IMAGE" >/dev/null 2>&1 \
|
||
|| skip "Playwright-Image $IMAGE nicht vorhanden (docker pull $IMAGE)"
|
||
|
||
# Vor dem Lauf aufräumen, nicht danach: Ein abgebrochener Lauf hinterlässt sonst
|
||
# einen Bestand, an den niemand mehr denkt – und bis hierher bleiben die Daten
|
||
# des letzten Laufs für die Fehlersuche stehen. E2E_KEIN_AUFRAEUMEN=1 lässt sie
|
||
# stehen, wer sie über den nächsten Lauf hinaus braucht.
|
||
if [ "${E2E_KEIN_AUFRAEUMEN:-0}" != "1" ]; then
|
||
PROJEKT=$(CDPATH= cd -- "$TEST_DIR/../.." && pwd)
|
||
fm() { (cd "$PROJEKT" && docker compose exec -T -u www-data php php "$@"); }
|
||
|
||
# Der Grundbestand nur nach erfolgreichem Aufräumen: Sonst stünde er ein
|
||
# zweites Mal neben dem alten und verfälschte, was die Tests vorfinden.
|
||
if fm scripts/e2e-aufraeumen.php --still; then
|
||
fm scripts/e2e-grundbestand.php --still \
|
||
|| echo "WARNUNG: Grundbestand fehlgeschlagen — Tests, die einen Bestand erwarten, fallen aus." >&2
|
||
else
|
||
echo "WARNUNG: Aufräumen fehlgeschlagen — der Lauf beginnt auf dem alten Bestand." >&2
|
||
fi
|
||
fi
|
||
|
||
# Zugangsdaten des Testnutzers durchreichen; der Runner kennt nur BASE_URL.
|
||
cd "$RUNNER_DIR"
|
||
TEST_DIR="$TEST_DIR" BASE_URL="$BASE_URL" exec docker compose run --rm \
|
||
${E2E_USER:+-e E2E_USER="$E2E_USER"} \
|
||
${E2E_PASSWORD:+-e E2E_PASSWORD="$E2E_PASSWORD"} \
|
||
playwright
|