45 Stimmen

Gibt es so etwas wie "autotest" für Python unittests?

Im Grunde genommen, Growl-Benachrichtigungen (oder andere Rückrufe), wenn Tests abbrechen oder bestehen. Gibt es so etwas?

Wenn nicht, sollte es ziemlich einfach zu schreiben sein.. Am einfachsten wäre es, wenn

  1. laufen. python-autotest myfile1.py myfile2.py etc.py
    • Überprüfen Sie, ob die zu überwachenden Dateien geändert wurden (möglicherweise nur, wenn sie gespeichert wurden).
    • Führen Sie alle Tests in diesen Dateien aus.
    • Wenn ein Test fehlschlägt, aber beim letzten Durchlauf bestanden wurde, wird ein "Growl Alert" erzeugt. Dasselbe gilt für Tests, die erst fehlschlagen und dann bestehen.
    • Warten Sie, und wiederholen Sie die Schritte 2-5.

Das Problem, das ich dabei sehe, ist, dass die Tests in einer anderen Datei stehen. Die einfache Lösung wäre, alle Tests nach jedem Speichern auszuführen aber bei langsameren Tests könnte dies länger dauern als die Zeit zwischen den Speichern und/oder viel CPU-Leistung verbrauchen etc.

Der beste Weg, es zu tun wäre, tatsächlich zu sehen, welche Bits des Codes geändert haben, wenn Funktion abc() geändert hat, nur Tests ausführen, die mit diesem interagieren. Das wäre zwar toll, aber ich denke, es wäre extrem komplex zu implementieren?

Zusammengefasst:

  • Gibt es so etwas wie das Ruby-Tool autotest (Teil des ZenTest-Paket ), aber für Python-Code?
  • Wie kann man überprüfen, welche Funktionen sich zwischen zwei Revisionen eines Skripts geändert haben?
  • Ist es möglich zu bestimmen, welche Funktionen ein Befehl aufrufen wird? (So etwas wie ein Reverse Traceback)

0 Stimmen

Ich glaube nicht, dass es möglich ist, richtig zu testen, wenn Sie nur Tests ausführen, die sich direkt auf die geänderte Funktion beziehen. Sie testen dann nicht, wie die Funktion mit dem Rest des Codes interagiert. Sie könnte beispielsweise den Test bestehen, aber in der Praxis versagen, weil sich ihr Verhalten auf subtile Weise geändert hat

29voto

jkp Punkte 74580

Ich fand Autonose ziemlich unzuverlässig zu sein, aber Schnüffler scheint sehr gut zu funktionieren.

$ pip install sniffer
$ cd myproject

Anstatt "nosetests" auszuführen, führen Sie dann:

$ sniffer

Oder anstelle von nosetests --verbose --with-doctest rennen Sie:

$ sniffer -x--verbose -x--with-doctest

Wie in der readme ist es eine gute Idee, eine der plattformspezifischen Bibliotheken zur Überwachung des Dateisystems zu installieren, pyinotify , pywin32 o MacFSEvents (alle installierbar über pip usw.)

16voto

dbr Punkte 158949

Autonose erstellt von gfxmonk :

Autonose ist ein Autotest-ähnliches Werkzeug für Python, das die ausgezeichnete nosetest-Bibliothek verwendet.

autotest verfolgt Änderungen im Dateisystem und führt automatisch alle geänderten Tests oder Abhängigkeiten erneut aus, wenn eine Datei hinzugefügt, entfernt oder aktualisiert wird. Eine Datei gilt als geändert, wenn sie selbst geändert wurde oder wenn eine Datei, die import s hat sich geändert.

...

Autonose hat derzeit eine native GUI für OSX und GTK. Wenn Ihnen keines dieser beiden zur Verfügung steht, können Sie stattdessen die Konsolenversion ausführen (mit der Option --console).

3voto

mattorb Punkte 3065

Ich habe gerade das hier gefunden: http://www.metareal.org/p/modipyd/

Ich verwende derzeit thumb.py, aber da mein aktuelles Projekt von einem kleinen zu einem mittelgroßen Projekt übergeht, habe ich nach etwas gesucht, das eine etwas gründlichere Abhängigkeitsanalyse durchführen kann, und mit ein paar Anpassungen konnte ich modipyd ziemlich schnell zum Laufen bringen.

3voto

Jim Stewart Punkte 16275

Wache ist ein hervorragendes Werkzeug, das Dateiveränderungen überwacht und automatisch Aufgaben auslöst. Es ist in Ruby geschrieben, kann aber als eigenständiges Tool für jede Aufgabe dieser Art verwendet werden. Es gibt eine guard-nosetests Plugin zur Durchführung von Python-Tests über Nase .

Guard unterstützt plattformübergreifende Benachrichtigungen (Linux, OSX, Windows), einschließlich Growl, sowie viele andere großartige Funktionen. Eines meiner unentbehrlichen Entwicklungswerkzeuge.

3voto

Oto Brglez Punkte 3864

Ein sehr nützliches Werkzeug, das Ihnen das Leben erleichtern kann, ist entr . Geschrieben in C, und verwendet kqueue o inotify unter der Haube.

Der folgende Befehl führt Ihre Testsuite aus, falls vorhanden *.py Datei in Ihrem Projekt geändert wird.

ls */**.py | entr python -m unittest discover -s test

Funktioniert für BSD, Mac OS und Linux. Sie können erhalten entr von Homebrew.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X