Seite wählen

Python-Unittests mit NOSE organisieren

von | Nov 15, 2012 | Development

In meinem letzten Blogpost habe ich euch etwas über die Vorzüge von Unittests erzählt und was würde da nicht besser passen als ein Blogpost über die Organisation solcher Tests? Betreibt man TDD (Test driven development) nämlich etwas intensiver dauert es meist nicht lange bis man droht den Überblick zu verlieren. Selbstverständlich gibt es auch hierfür nützliche Tools die einem diese Arbeit erleichtern jedoch nicht vollständig abnehmen, denn eine sinnvolle Strukturierung ist nunmal das A und O und kann nur schwer „mal eben so“ der Technik überlassen werden.
In diesem konkreten Fall möchte ich NOSE vorstellen, ein Testing-Framework für und in Python geschrieben: nose.readthedocs.org

NOSE kann man ganz einfach über den Python Package Index (pip) oder per easy_install installieren:
pip install nose
Hat man nun seine Tests schön in einzelne Dateien/Verzeichnisse aufgeteilt und innerhalb dieser evtl. sogar noch spezielle Testfälle, kann man einfach mal im Projektordner folgendes Kommando ausführen:
nosetests
Und schon rattert alles mögliche an Tests den Bildschirm herunter. Standardmäßig sucht NOSE im aktuellen Verzeichnis und dessen Unterverzeichnissen nach Tests. Wie das genau funktioniert steht hier, aber am wichtigsten ist:

If it looks like a test, it’s a test.

Das kann man noch ein wenig feiner kontrollieren, indem man NOSE sagt in welchem Verzeichnis es mit der Suche beginnen soll:
nosetests --where="der/pfad/zu/den/tests"
Möchte man das noch weiter spinnen, kann man auch regular expressions, die Modulpfade der Tests und sogar Attribute der Tests angeben. Nähere Infos zu folgenden Argumenten gibts mit –help:

  • –tests=NAMES
  • -a ATTR, –attr=ATTR
  • -A EXPR, –eval-attr=EXPR
  • -I REGEX, –ignore-files=REGEX
  • -e REGEX, –exclude=REGEX
  • -i REGEX, –include=REGEX

Sobald NOSE alle Tests ausführt die ausgeführt werden sollen, möchte man eventuell die Ausgabe ein wenig verändern wie z.B. zusätzliche Informationen anzeigen. Das geht mit den üblichen Verdächtigen:

  • -v
  • -vv
  • -vvv

Die Ausgabe selbst wird allerdings noch in anderer Weise verändert bzw. kann verändert werden, nämlich durch Plugins. NOSE kann durch Plugins eigens erweitert werden wobei es auch einige wirklich praktische Plugins bereits mit im Paket gibt: Batteries included
Sehr praktisch in dieser Hinsicht ist das Capture-Plugin wodurch jedwede Ausgabe die ein Test produziert zuerst zurückgehalten und erst im Fehlerfall nach Abschluss aller anderen Tests angezeigt wird. Wer das nicht möchte bzw. mit pdb bereits während eines Tests den Fehlerfall inspizieren möchte kann folgendes Argument benutzen:
nosetests -s
Doch so richtig praktisch wirds m.E. erst mit dem coverage skript von Ned. Das kann man, sobald es installiert ist, direkt zusammen mit den Tests ausführen lassen:

  • –with-coverage
  • –cover-min-percentage=COVER_MIN_PERCENTAGE
  • –cover-html

Wenn dann alle Tests ausgeführt, währenddessen genug Informationen angezeigt und im Nachhinein sauber alle abgedeckten Anweisungen aufgeführt werden kann man sich wieder voll und ganz auf das schreiben der eigentlichen Tests konzentrieren. 😀

Johannes Meyer
Johannes Meyer
Lead Developer

Johannes ist seit 2011 bei uns und inzwischen, seit er 2014 die Ausbildung abgeschlossen hat, als Lead Developer für Icinga Web 2, Icinga DB Web sowie alle möglichen anderen Module und Bibliotheken im Web Bereich zuständig. Arbeitet er gerade mal nicht, macht er es sich bei schlechtem Wetter am liebsten zum zocken oder Filme/Serien schauen auf dem Sofa gemütlich. Passt das Wetter, geht's auch mal auf eines seiner Zweiräder. Motorisiert oder nicht.

0 Kommentare

Einen Kommentar abschicken

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mehr Beiträge zum Thema Development

Mein PHP-Trainingsprojekt

PHP Schulung Vor kurzem haben wir begonnen, eine neue Programmiersprache zu lernen – PHP. In der ersten Woche haben wir mit den Grundlagen wie Variablen, Arrays, Schleifen begonnen und uns schrittweise zu komplizierterer Syntax wie Funktionen, Objekten und Klassen...

check_prometheus ist jetzt öffentlich verfügbar!

Monitoring ist komplex, das wissen wir hier bei NETWAYS leider zu gut. Deswegen laufen in der Infrastruktur auch mal gerne mehrere Tools für die Überwachung. Zwei gern gesehene Kandidaten sind dabei Icinga und Prometheus. Icinga und Prometheus erfüllen...