Django 1.7 führte Datenbankmigrationen ein .
Wenn Sie die Komponententests in Django 1.7 ausführen, wird eine Migration erzwungen , die lange dauert. Daher möchte ich die Django-Migrationen überspringen und die Datenbank im Endzustand erstellen.
Ich weiß, dass das Ignorieren der Migrationen eine schlechte Praxis sein kann, da dieser Teil des Codes nicht getestet werden würde. Dies ist jedoch nicht der Fall: Ich führe die vollständigen Migrationen auf dem CI-Testserver (Jenkins) aus. Ich möchte nur die Migrationen in meinen lokalen Tests überspringen, bei denen es auf die Geschwindigkeit ankommt.
Ein Kontext:
Bis Django 1.6 habe ich bei Verwendung von South die Einstellung SOUTH_TESTS_MIGRATE verwendet :
Standardmäßig wendet der Befehl syncdb von South auch Migrationen an, wenn er im nicht interaktiven Modus ausgeführt wird. Dies gilt auch für die Ausführung von Tests. Bei jeder Ausführung Ihrer Tests wird jede Migration ausgeführt.
Wenn Sie möchten, dass der Testläufer syncdb anstelle der Migration verwendet, z. B. wenn Ihre Migrationen viel zu lange dauern, setzen Sie einfach SOUTH_TESTS_MIGRATE = False in settings.py.
Allerdings syncdb existieren mehr nicht, jetzt ist es Migrate .
Und ab Django 1.8 verwende ich den Parameter --keepdb :
Mit der Option --keepdb kann die Testdatenbank zwischen den Testläufen beibehalten werden. Dies hat den Vorteil, dass sowohl die Erstellungs- als auch die Zerstörungsaktionen übersprungen werden, was die Zeit zum Ausführen von Tests erheblich verkürzt, insbesondere in einer großen Testsuite. Wenn die Testdatenbank nicht vorhanden ist, wird sie beim ersten Lauf erstellt und dann für jeden nachfolgenden Lauf beibehalten. Nicht angewendete Migrationen werden auch auf die Testdatenbank angewendet, bevor die Testsuite ausgeführt wird.
Diese Frage ist also auf Django 1.7 beschränkt.
django-test-without-migrations
Paket war wirklich praktisch für mich, vielleicht möchten Sie die akzeptierte Antwort auf stackoverflow.com/a/28993456/200224