2011-01-05 4 views
13

Ich möchte in der Lage sein, eine vorhandene Testdatenbank zu verwenden, um meine Tests auszuführen und nicht, dass Django jedes Mal eine Datenbank erstellt und löscht, wenn ich die Tests ausführen möchte. Ist das möglich?Wie kann ich eine Datenbank angeben, die von Django Tests verwendet werden soll, anstatt sie jedes Mal erstellen zu lassen?

+0

warum möchten Sie das? Sie möchten auch die Datenbankerstellung testen ... –

+6

Nicht wenn es Stunden dauert zu bauen. –

+0

Sie können verschiedene DB-Engine für Tests wählen (sqlite hat viel schnellere DB-Erstellung) –

Antwort

14

Es ist möglich, hier ist ein Weg:

1) Ihre eigenen Testläufer here wie zu sehen, schauen definieren.

2) Für ihren Test Runner Blick in den default test runner, können Sie einfach kopieren und den Code und kommentieren gerade diese Zeile: connection.creation.destroy_test_db(old_name, verbosity), die für die Zerstörung der Test-Datenbank verantwortlich ist, und ich denke, dass Sie die connection.creation.create_test_db(..) Spiel setzen sollte in ein Versuch, außer etwas ähnlichem vielleicht:

try: 
    # Create the database the first time. 
    connection.creation.create_test_db(verbosity, autoclobber=not interactive) 
except ..: # Look at the error that this will raise when create a database that already exist 
    # Test database already created. 
    pass 

3) TEST_RUNNER in setting.py zu Ihrem Testläufer Bound.

4) Jetzt ist Ihr Test wie folgt ausführen: ./manage.py Test

+0

Das sieht also gut aus aber ich muss noch die Verbindung zum lokalen Test aufbauen db nein? –

+0

@Ryan Detzel: Ich habe gerade meine Antwort für weitere Details bearbeitet, über Ihre Frage, ich denke mit dem Code über der Testdatenbank wird das erste Mal erstellt, dass der Test ja ausgeführt wird, wird diese Testdatenbank atomar von Django erstellt hier aussehen: http://docs.djangoproject.com/de/dev/topics/testing/?from=olddocs#the-test-database – mouad

+0

@mouad, kann ich es so konfigurieren, dass es nicht einmal die Fixtures lädt/spült es? –

6

Wer Django verwenden> = 1,8

python manage.py test --keepdb 

--keepdb die Testdatenbank zwischen Testläufen Behält. Dies hat den Vorteil, dass sowohl die Erstellungs- als auch die Löschaktionen übersprungen werden, was die Zeit zum Ausführen von Tests stark verkürzen kann, insbesondere in einer großen Testsuite. Wenn die Testdatenbank nicht existiert, wird sie beim ersten Durchlauf erstellt und dann für jeden weiteren Lauf beibehalten. Alle nicht angewendeten Migrationen werden auch auf die Testdatenbank angewendet, bevor die Testsuite ausgeführt wird.

+0

Wie für Django 1.6 ?? Gibt es einen ähnlichen Weg ??? –

Verwandte Themen