2016-08-09 66 views
0

Ich erstelle Tests für eine API. Ich möchte die DB einrichten und für jeden Test aufräumen. Das Problem ist, dass meine Datenbank sehr komplex und umfangreich ist. Daher würde ich gerne wissen, ob es eine Möglichkeit gibt, die gesamte Test-DB, die nicht zu schwer ist, komplett einzurichten und zu bereinigen. Danke für deine Empfehlungen. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen. Falls das hilft, verwende ich phpunit für die Tests und benutze Symphony als mein Framework.Einrichten und Reinigen einer Datenbank nach dem Test Postgress und PHP

+0

Was ist mit der DB zu duplizieren und nach jedem Test können Sie nur DB überschreiben, die Sie gerade mit dem ursprünglichen (anderen) verwendet haben. Sie können es ziemlich schnell klonen, d. H. Von phpMyAdmin. – MilanG

+0

Danke @MilanG für Ihre schnelle Antwort. Ich habe auch darüber nachgedacht. Die Sache ist, dass der Test von anderen Leuten auch verwendet wird, also muss ich es vor dem Test auch einstellen. Ich bin auf der Suche nach einer Möglichkeit zum Hochladen der gesamten SQL-Datei mit PHP und in einer Weise, die nicht zu schwer auf dem System sein wird, da die DB viele Tabellen und viele Daten hat. Nun, dieser Teil ist relativ, aber sagen wir groß für mein System. – Eli

+1

Sie können dann MySQL-Datenbank-Dump und dann von PHP-Konsole mysql Befehl zu importieren, um diese Dump in db zu importieren. Wann immer Sie Ihre Tabelle "zurücksetzen" wollen, führen Sie einfach "exec" oder einen ähnlichen Befehl aus, um mysql aufzurufen, db erneut zu importieren. – MilanG

Antwort

1

Dies ist sehr einfach mit Template-Datenbanken.
Sie erstellen und füllen die gewünschte Testdatenbank, nennen wir sie test_template.
Dann stellen Sie sicher, dass niemand eine Verbindung herstellen können:

ALTER DATABASE test_template ALLOW_CONNECTIONS false IS_TEMPLATE true; 

Dann mit

CREATE DATABASE test123 TEMPLATE test_template; 

Für Reinigung Ihrer Testdatenbank erstellen, geben Sie einfach die Datenbank löschen. Sie müssen sicherstellen, dass niemand verbunden ist, wenn Sie es fallen lassen, verwenden Sie die Funktion pg_terminate_backend, um alle verbleibenden Verbindungen zu beenden.

+0

Danke Laurenz, das war sehr hilfreich. Ich benutze dies und nach dem pg_restore für die Wartung der Test-DB sauber. – Eli