Zum Hauptinhalt springen

Tests

Die Auswertung kann über verschiedene Wege getestet werden, ohne dass Subato aufgesetzt werden muss.

Manuell

Playground

Es gibt ein webbasiertes Demosystem (eva.playground), welches mit Streamlit gebaut wurde. Hiermit kann die Lösungsauswertung getestet werden. Es ermöglicht die Auswahl von STEF-Aufgaben und erlaubt die temporäre Veränderung der Dateien. Das System kann lokal mit dem Befehl python -m streamlit run app.py im Verzeichnis eva.playground/eva/playground gestartet werden.

note

Streamlit bietet für die lokale Entwicklung ein Auto-Reload Feature, womit Quelldateien bei Änderungen neu geladen werden können. Es kommt allerdings bei der Deserialisierung der Session zu Problemen, wenn auf Reload gedrückt wird:

pydantic_core._pydantic_core.ValidationError: 6 validation errors for EvalRequest
solution_files.0
Input should be a valid dictionary or instance of EvaFile [type=model_type, input_value=EvaFile(path='Zeit.java',...nute+min)%60);\n

Streamlit verwendet pickle, wodurch das Problem entsteht. In dem Fall einfach die Seite einmal neu laden. Das betrifft nur die lokale Entwicklung, beim regulären Betrieb gibt es das Problem nicht.

Jupyter Notebooks

Alternativ können Jupyter Notebooks verwendet werden. Für ein Beispiel siehe exceptions.ipynb. Hierfür muss cd eva.pltform && poetry install --with test ausgeführt werden, damit Jupyter installiert wird. Anschließend:

jupyter notebook /home/fischer/Repositories/SLS/eva2/eva.pltform/tests/integration/coverage/exceptions.ipynb

Automatisch

In den Komponenten des Systems (Dispatcher, Registry, ...) werden Unit-Tests im jeweiligen tests Verzeichnis organisiert. Übergreifende Integration- bzw. Systemtests, welche die korrekte Funktionsweise der Evaluators sicherstellen, werden unter eva.pltform/tests/integration organisiert.

Integration-Tests

Damit die Integration-Tests aufgerufen werden können, muss das Poetry-Projekt eingerichtet werden:

cd eva.pltform && poetry install --with test

Es wird pytest als Testframework verwendet. Die Tests lassen sich so starten:

poetry run pytest tests/integration/evaluator -v
PyCharm

Unter "Settings" -> "Python Integrated Tools" muss eventuell der Testrunner auf pytest umgestellt werden. Auch gibt es aktuell einen Bug, bei fehlschlagenden Asserts manchmal nicht die Message ausgegeben wird (PY-50396). Workaround: --tb=short in der Run Configuration als Argument für pytest mitgeben.

Sollen vorher die Umgebungen im environments-Verzeichnis gebaut werden, muss --build mitgegeben werden. Zusätzlich kann über --log_level das Logging konfiguriert werden. Mit DEBUG sieht man alle Befehle mit deren Ausgaben, die der Evaluator auf der Umgebung ausführt.

Man kann natürlich auch nur bestimmte Testfälle aufrufen und weiter eingrenzen:

poetry run pytest --env java19 tests/integration/evaluator/java/compile.py -v

Die Fixtures für die Tests werden unter tests/integration/fixtures organisiert. Dabei sollten jeweils minimale Beispiele für Lösungen und Testfälle verwendet werden. Zudem sollte darauf geachtet werden, die Funktionsweise der Evaluators als Blackbox zu sehen und nicht jedes Detail separat zu testen um Komplexität zu reduzieren. Detailierte Tests von Schnittstellen gehören in die entsprechenden Komponenten, nicht in die übergreifenden Tests.