5

Wie testen Sie Unit Python DAL, die Postgresql verwendet.Datenbank testen in Python, Postgresql

In sqlite können Sie für jeden Test eine In-Memory-Datenbank erstellen, dies kann jedoch nicht für postgresql durchgeführt werden.

Ich möchte eine Bibliothek, die verwendet werden könnte, um eine Datenbank einzurichten und zu reinigen, sobald der Test abgeschlossen ist.

Ich benutze Sqlalchemy als mein ORM.

Antwort

2

Sie können nose verwenden, um Ihre Tests zu schreiben, dann verwenden Sie einfach SQLAlchemy, um die Testdatenbank in Ihren setup/teardown Methoden zu erstellen und zu bereinigen.

+0

@Luper Rouch: Wie sollte ich bereinigen, so dass die Datenbank im gleichen Zustand ist, sobald der Test beendet ist. Ich glaube nicht, dass das Starten/Rollback einer Transaktion die Lösung ist. – StackUnderflow

+0

Sie können beginnen, indem Sie die gesamte Datenbank im Teardown löschen. –

+0

Also müsste ich eine neue Datenbankinstanz für jeden Test erstellen .. Wäre das nicht sehr langsam? .. Ich möchte nur alle Daten in der Datenbank löschen ... Ich denke, ich kann SQL schreiben, um alle zu bereinigen Tabellendaten in Teardown .. Obwohl ich nach etwas wie SQLUnit suchte – StackUnderflow

3

pg_tmp(1) ist ein Dienstprogramm, das diese Aufgabe einfach machen soll. Hier ist, wie Sie vielleicht eine neue Verbindung mit SQLAlchemy starten:

from subprocess import check_output 
from sqlalchemy import create_engine 

url = check_output(['pg_tmp', '-t']) 
engine = create_engine(url) 

Dies wird eine neue Datenbank Spin-up, die automatisch in 60 Sekunden zerstört wird. Wenn eine Verbindung offen ist, wartet pg_tmp, bis alle aktiven Verbindungen geschlossen sind.

0

Es gibt auch QuickPiggy, die nach sich selbst aufräumen kann. Aus der Dokumentation:

Eine provisorische PostgresSQL Instanz kann sehr leicht erreicht werden:

Schwein = quickpiggy.Piggy (volatile = True, CREATE_DB = 'somedb')

conn = psycopg2.connect (pig.dsnstring())