Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
modul:m122:learningunits:lu09:aufgaben:pytests [2024/12/10 07:07] – angelegt msuter | modul:m122:learningunits:lu09:aufgaben:pytests [2024/12/17 08:04] (aktuell) – msuter | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== LU09.A09: Unittests auflisten | + | ====== LU09.A06: Bonus ====== |
<WRAP center round todo 60%> | <WRAP center round todo 60%> | ||
- | Erstelle ein JSON-Array mit allen Unittests in einem Python-Projekt. | + | Ergänze einen Dialog zur Auswahl des Projektordners. |
</ | </ | ||
- | ===== Aufgabe ===== | ||
- | Das Skript durchsucht ein Projekt nach Dateien, die Unittests enthalten. | ||
- | Die Dateinamen müssen '' | ||
- | Zum Beispiel: | ||
- | * **test_**main.py | ||
- | * main**_test**.py | ||
- | Innerhalb dieser Dateien sucht das Skript nach Funktionen, deren Bezeichner mit '' | ||
- | Die Bezeichner dieser Funktionen werden in eine Liste geschrieben. | ||
- | Schlussendlich wird diese Liste sortiert und als JSON-Array ausgegeben. | ||
- | |||
- | ==== Beispiel ==== | ||
- | < | ||
- | [ | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | ] | ||
- | </ | ||
- | |||
- | ==== Wieso Python und Bash? ==== | ||
- | Grundsätzlich könnte man die Aufgabe ausschliesslich mit Python lösen oder als reines Bash-Skript schreiben. | ||
- | Jede Sprache hat jedoch ihre Vorteile, die wir hier ausnutzen wollen: | ||
- | * Dateien durchsuchen: | ||
- | * Arbeiten mit Collections: | ||
- | |||
- | ===== Hinweise===== | ||
- | <WRAP center round tip 60%> | ||
- | Das Python-Skript kann nicht unter Windows ausgeführt werden, da wir Bash-Befehle nutzen. | ||
- | |||
- | Um auf das Windows-Laufwerk '' | ||
- | </ | ||
- | |||
- | ==== Aufruf ==== | ||
- | - Öffne das Windows Subsystem for Linux (WSL). | ||
- | - Wechsel in den Ordner, in dem Ihr Projekt gespeichert ist. Zum Beispiel: '' | ||
- | - Starte das Python Skript mit '' | ||
- | |||
- | ===== Vorgehen ===== | ||
- | Wie immer lohnt es sich, das Projekt schrittweise anzugehen. | ||
- | Jede Funktion innerhalb des Programms kann einzeln realisiert und getestet werden. | ||
- | |||
- | Da wir auf einer reinen Linux-Shell keinen Debugger haben, behelfen wir uns mit '' | ||
- | |||
- | ==== 1. Argument prüfen / übernehmen ==== | ||
- | In der Funktion '' | ||
- | |||
- | * Falls kein Argument übergeben wurde, beendet das Programm mit einer Fehlermeldung | ||
- | * Wechsle in das angegebene Verzeichnis. Nutze dazu den Python-Befehl '' | ||
- | * Falls das Verzeichnis nicht existiert, wird das Skript mit einer Fehlermeldung beendet. | ||
- | |||
- | ==== 2. execute_bash ==== | ||
- | Die Funktion '' | ||
- | Falls ein Fehler auftritt, wird eine Meldung ausgegeben und das Skript beendet. | ||
- | |||
- | * Parameter: Bash-Kommando (String) | ||
- | * Return: Resultat-Objekt | ||
- | |||
- | ==== 3. find_test_modules ==== | ||
- | Diese Funktion sucht mit Hilfe eines **Bash**-Befehls im aktuellen Ordner nach allen Dateien, die PyTests enthalten können. | ||
- | Als Returnwert liefert die Funktion eine Liste aller Dateinamen. | ||
- | |||
- | Diese Dateien können anhand ihres Dateinamens erkannt werden: | ||
- | * '' | ||
- | * ''????? | ||
- | |||
- | <WRAP center round tip 60%> | ||
- | * Ermittle zunächst den Bash-Befehl, | ||
- | * Teste den Befehl auf der Kommandozeile des WSL. | ||
- | </ | ||
- | |||
- | ==== 4. find_test_functions ==== | ||
- | Die Funktion durchsucht alle Dateien in einer Liste nach PyTest-Funktionen. | ||
- | Es sollen alle Zeilen gefunden werden, die '' | ||
- | \\Zum Beispiel: | ||
- | * def test_main(): | ||
- | * def test_something(capsys): | ||
- | * ... | ||
- | |||
- | Die gefundenen Zeilen werden an '' | ||
- | Speichere die " | ||
- | * Argument: Eine Liste mit Dateinamen | ||
- | * Returnwert: Eine Liste mit allen PyTest-Funktionen.\\Zum Beispiel: | ||
- | * test_main | ||
- | * test_something | ||
- | |||
- | ==== 5. sanitize_function_name ==== | ||
- | Die Namen der Testfunktionen soll in dieser Funktion " | ||
- | * Argument: Eine Codezeile mit einer Test-Funktion, | ||
- | * Returnwert: Der Name der Test-Funktion, | ||
- | |||
- | Es werden alle sonstigen Angaben in dieser Zeile entfernt: | ||
- | * Das Schlüsselwort '' | ||
- | * Leerzeichen am Anfang und am Ende. | ||
- | * Die Liste mit den Parametern. | ||
- | * Der Doppelpunkt | ||
- | * Allfällige Zeilenkommentare | ||
- | |||
- | ==== 6. output_json ==== | ||
- | Die Funktion erzeugt ein JSON-Array mit den Namen aller Testfunktionen. | ||
- | Dieses JSON-Array wird in der Konsole ausgegeben. | ||
- | |||
- | * Argument: Liste mit Namen von Testfunktionen. | ||
- | * Returnwert: None | ||
- | |||
- | ===== Bonus-Auftrag ===== | ||
In der Vorlage ist bereits eine Funktion '' | In der Vorlage ist bereits eine Funktion '' | ||
Diese öffnet ein Fenster, in dem der Benutzer das gewünschte Projekt auswählen kann. | Diese öffnet ein Fenster, in dem der Benutzer das gewünschte Projekt auswählen kann. |