In der Django-Dokumentation ( http://docs.djangoproject.com/de/1.3/topics/testing/#running-tests ) heißt es, dass Sie einzelne Testfälle ausführen können, indem Sie sie angeben:
$ ./manage.py test animals.AnimalTestCase
Dies setzt voraus, dass Sie Ihre Tests in einer tests.py-Datei in Ihrer Django-Anwendung haben. Wenn dies zutrifft, funktioniert dieser Befehl wie erwartet.
Ich habe meine Tests für eine Django-Anwendung in einem Testverzeichnis:
my_project/apps/my_app/
├── __init__.py
├── tests
│ ├── __init__.py
│ ├── field_tests.py
│ ├── storage_tests.py
├── urls.py
├── utils.py
└── views.py
Die tests/__init__.py
Datei hat eine suite () Funktion:
import unittest
from my_project.apps.my_app.tests import field_tests, storage_tests
def suite():
tests_loader = unittest.TestLoader().loadTestsFromModule
test_suites = []
test_suites.append(tests_loader(field_tests))
test_suites.append(tests_loader(storage_tests))
return unittest.TestSuite(test_suites)
Um die Tests durchzuführen, mache ich:
$ ./manage.py test my_app
Der Versuch, einen einzelnen Testfall anzugeben, löst eine Ausnahme aus:
$ ./manage.py test my_app.tests.storage_tests.StorageTestCase
...
ValueError: Test label 'my_app.tests.storage_tests.StorageTestCase' should be of the form app.TestCase or app.TestCase.test_method
Ich habe versucht, das zu tun, was in der Ausnahmemeldung stand:
$ ./manage.py test my_app.StorageTestCase
...
ValueError: Test label 'my_app.StorageTestCase' does not refer to a test
Wie spezifiziere ich einen einzelnen Testfall, wenn sich meine Tests in mehreren Dateien befinden?
quelle
another.test:TestCase
Seit Django 1.6 können Sie einen vollständigen Testfall oder einen einzelnen Test mit der vollständigen Punktnotation für das Element ausführen, das Sie ausführen möchten.
Die automatische Testerkennung findet jetzt Tests in jeder Datei, die mit dem Test beginnt, im Arbeitsverzeichnis. Wenn Sie also die Frage beantworten, die Sie zum Umbenennen Ihrer Dateien benötigen, können Sie sie jetzt im gewünschten Verzeichnis behalten. Wenn Sie benutzerdefinierte Dateinamen verwenden möchten, können Sie ein Muster (Standard-Django-Testläufer) mit dem Optionsflag angeben
--pattern="my_pattern_*.py"
.Wenn Sie sich also in Ihrem
manage.py
Verzeichnis befinden und den Testtest_a
innerhalb derTestCase
UnterklasseA
in einer Dateitests.py
unter der App / dem Modul ausführen möchten,example
würden Sie Folgendes tun:Wenn Sie keine Abhängigkeit einfügen möchten und sich in Django 1.6 oder höher befinden, gehen Sie so vor.
Weitere Informationen finden Sie in der Django-Dokumentation
quelle
error: option --pattern not recognized
invalid command name
Ich hatte dieses Problem selbst und fand diese Frage, falls jemand anderes mitkommt, hier ist, was ich ausgegraben habe. Der DjangoTestSuiteRuner verwendet eine Methode namens build_test (label), die anhand des Labels herausfindet, welche Testfälle ausgeführt werden sollen. Wenn man sich diese Methode ansieht, stellt sich heraus, dass sie ein getattr () für das Modul "models" oder "test" ausführen. Wenn Sie also eine Suite zurückgeben, sucht der Testläufer nicht nach Ihren Testfällen in dieser Suite, sondern nur in einem dieser Module.
Eine schnelle Lösung besteht darin
__init__.py
, Ihre Tests direkt zu importieren, anstatt eine Suite zu definieren. Das macht sie Teil des "Test" -Moduls und so kann build_test (label) sie finden.Für Ihr Beispiel oben
tests/__init__.py
sollte einfach enthalten:Dies ist nicht sehr elegant und natürlich funktioniert dies nicht, wenn Sie versuchen, etwas Komplizierteres mit Ihrer Suite zu tun, aber in diesem Fall.
quelle
Das sollte funktionieren-
quelle
Ich bin auch auf dieses Problem gestoßen und anstatt Django-Nase zu verwenden, bin ich diesem Link hier gefolgt: http://www.pioverpi.net/2010/03/10/organizing-django-tests-into-folders/ . Sie müssen Ihre init .py öffnen und Ihre Tests importieren.
Ex in init .py:
from unique_test_file import *
quelle
Fügen Sie diesen Code in Ihre __init__.py ein und es werden alle Testklassen in das Paket und die Unterpakete importiert. Auf diese Weise können Sie bestimmte Tests ausführen, ohne jede Datei manuell zu importieren.
Ebenso können Sie für Ihre Testsuite einfach Folgendes verwenden:
Jetzt müssen Sie für neue Tests nur noch schreiben und sicherstellen, dass sie sich im Testordner befinden. Keine langwierige Wartung der Importe mehr!
quelle