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

3voto

Mark Punkte 929

Sie können verwenden nodemon für die Aufgabe, indem Sie .py-Dateien beobachten und ausführen manage.py test . Der Befehl lautet dann: nodemon --ext py --exec "python manage.py test" .

nodemon ist ein npm-Paket, aber ich gehe davon aus, dass Sie Node installiert haben.

2voto

macarthy Punkte 3076

Vielleicht wäre Buildbot nützlich http://buildbot.net/trac

2voto

Torsten Marek Punkte 78610

Zu Ihrer dritten Frage: Vielleicht ist die trace Modul ist das, was Sie brauchen:

>>> def y(a): return a*a
>>> def x(a): return y(a)
>>> import trace
>>> tracer = trace.Trace(countfuncs = 1)
>>> tracer.runfunc(x, 2)
4
>>> res = tracer.results()
>>> res.calledfuncs
{('<stdin>', '<stdin>', 'y'): 1, ('<stdin>', '<stdin>', 'x'): 1}

res.calledfuncs enthält die Funktionen, die aufgerufen wurden. Wenn Sie angeben countcallers = 1 bei der Erstellung des Tracers können Sie die Beziehungen zwischen Anrufern und Anrufern ermitteln. Siehe die Dokumente des trace Modul für weitere Informationen.

Sie können auch versuchen, die Aufrufe über eine statische Analyse zu erhalten, aber das kann aufgrund der dynamischen Natur von Python gefährlich sein.

2voto

John Millikin Punkte 190278

Der Entwicklungsserver von Django verfügt über einen Datei-Änderungsmonitor, der auf Änderungen achtet und sich automatisch neu lädt. Sie könnten diesen Code wiederverwenden, um Unit-Tests bei Dateiänderungen zu starten.

2voto

GHZ Punkte 3055

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