Wie führe ich Django-Tests auf einer Kopie meiner Produktionsdatenbank aus?

8

Ich habe eine Reihe von Tests für meine Django-App geschrieben und möchte sie auf einer Kopie meiner Produktionsdatenbank ausführen.

Soweit ich das beurteilen kann, ist der beste Weg dies zu tun Fixture Laden so:

  • Führen Sie manage.py dumpdata -o app.dump
  • aus
  • Verschieben Sie die resultierende app.dump-Datei in ein Fixtures-Verzeichnis im Ordner [app name]
  • Geben Sie ein 'fixtures' -Klassenattribut für meine django.test.TestCase-Unterklasse
  • an

Dieser Ansatz ist jedoch umständlich. Ich habe mehrere Apps, die manage.py dumpdata für jeden von ihnen ausführt und jedes Mal, wenn ich meine App manuell testen möchte, die Dateien manuell verschiebe, ist ein Problem.

Gibt es eine einfachere Möglichkeit, automatisch eine Kopie meiner gesamten Produktionsdatenbank zu erstellen und meine Django-Apps dagegen zu testen?

    
Sam 05.05.2017, 23:05
quelle

2 Antworten

3
___ tag123django ___ Django ist ein serverseitiges Open-Source-Webanwendungs-Framework, das in Python geschrieben wurde. Es wurde entwickelt, um den Aufwand für die Erstellung komplexer datengesteuerter Websites und Webanwendungen zu reduzieren, mit besonderem Fokus auf weniger Code, keine Redundanz und expliziter als implizit. ___ qstnhdr ___ Wie führe ich Django-Tests auf einer Kopie meiner Produktionsdatenbank aus? ___ tag123automatedtests ___ Testautomatisierung ist die Verwendung von Software zur Kontrolle der Ausführung von Tests, zum Vergleich von tatsächlichen Ergebnissen mit vorhergesagten Ergebnissen, zur Einrichtung von Testvoraussetzungen und anderen Teststeuerungs- und Testberichtsfunktionen. Üblicherweise beinhaltet die Testautomatisierung die Automatisierung eines bereits vorhandenen manuellen Prozesses, der einen formalisierten Testprozess verwendet (wikipedia.org). ___ tag123fixtures ___ Fixtures sind Bereiche, die zum Ausführen von Tests verwendet werden, die jeden Test von der globalen Namensraumverschmutzung und den Nebenwirkungen früherer Tests isolieren, um falsch positive und falsch negative Ergebnisse zu vermeiden ___ tag123testcase ___ Ein Testfall im Software-Engineering ist eine Reihe von Bedingungen oder Variablen, unter denen ein Tester feststellen kann, ob eine Anwendung oder ein Softwaresystem korrekt funktioniert oder nicht. ___ tag123testing ___ Softwaretesten ist eine Aktivität, die darauf abzielt, ein Attribut oder eine Fähigkeit eines Programms oder Systems zu bewerten und festzustellen, dass es die erforderlichen Ergebnisse erreicht. ___ answer43814965 ___

Sie haben nicht erwähnt, welche Version von Django Sie verwenden, sondern schauen Sie sich die 1.11-Dokumentation an:

Es ist nicht klar, aus den 1.11 Dokumenten über das Laden von Fixtures für Tests ob sie auch in FIXTURE_DIRS aussehen würden. Das könnte Ihr Problem nicht vollständig lösen.

    
___ antwort43873524 ___

Im Allgemeinen wird vom Testen gegen die Live-DB oder eine Kopie der Live-DB abgeraten. Warum? Weil Tests vorhersehbar sein müssen. Wenn Sie eine Kopie der Live-DB erstellen, wird die Eingabe unvorhersehbar. Das zweite Problem ist, dass Sie nicht offensichtlich auf der Live-Site testen können, also müssen Sie die Daten klonen. Das ist langsam für mehr als einige MB Größe.

Auch wenn der DB klein ist, ist loaddata gefolgt von %code% nicht der richtige Weg. Das liegt daran, dass dumpdata standardmäßig in ein JSON-Format exportiert wird, das einen großen Generierungsaufwand verursacht, ganz zu schweigen davon, dass die Datendatei sehr umfangreich ist. Das Importieren mit Ladedaten ist noch langsamer.

Die einzige realistische Möglichkeit, einen Klon zu erstellen, ist die Verwendung von Datenbank-Engines, die im Export- / Import-Mechanismus integriert sind. Im Fall von sqlite, das nur die db-Datei kopiert. Für mysql ist SELECT INTO OUTFILE, gefolgt von LOAD DATA INFILE. Und für postgresql ist es COPY TO gefolgt von COPY FROM und so weiter.

Alle diese Export- / Importbefehle können mit dem in django verfügbaren Lowlevel-Verbindungsobjekt ausgeführt werden und können daher zum Laden von Fixtures verwendet werden.

    
___ qstntxt ___

Ich habe eine Reihe von Tests für meine Django-App geschrieben und möchte sie auf einer Kopie meiner Produktionsdatenbank ausführen.

Soweit ich das beurteilen kann, ist der beste Weg dies zu tun Fixture Laden so:

  • Führen Sie manage.py dumpdata -o app.dump
  • aus
  • Verschieben Sie die resultierende app.dump-Datei in ein Fixtures-Verzeichnis im Ordner [app name]
  • Geben Sie ein 'fixtures' -Klassenattribut für meine django.test.TestCase-Unterklasse
  • an

Dieser Ansatz ist jedoch umständlich. Ich habe mehrere Apps, die manage.py dumpdata für jeden von ihnen ausführt und jedes Mal, wenn ich meine App manuell testen möchte, die Dateien manuell verschiebe, ist ein Problem.

Gibt es eine einfachere Möglichkeit, automatisch eine Kopie meiner gesamten Produktionsdatenbank zu erstellen und meine Django-Apps dagegen zu testen?

    
___
e4c5 09.05.2017, 15:09
quelle
0

Sie haben nicht erwähnt, welche Version von Django Sie verwenden, sondern schauen Sie sich die 1.11-Dokumentation an:

Es ist nicht klar, aus den 1.11 Dokumenten über das Laden von Fixtures für Tests ob sie auch in FIXTURE_DIRS aussehen würden. Das könnte Ihr Problem nicht vollständig lösen.

    
bouteillebleu 05.05.2017 23:13
quelle