5

W jaki sposób testujesz swój python DAL, który używa postgresql.Testowanie bazy danych w python, postgresql

W sqlite można utworzyć bazę danych w pamięci dla każdego testu, ale nie można tego zrobić dla postgresql.

Potrzebuję biblioteki, której można użyć do skonfigurowania bazy danych i wyczyszczenia jej po zakończeniu testu.

Używam Sqlalchemy jako mojego ORM.

Odpowiedz

2

Możesz użyć nose do napisania swoich testów, a następnie użyj SQLAlchemy do stworzenia i wyczyszczenia testowej bazy danych w swoich metodach setup/teardown.

+0

@ Luper Rouch: Jak należy wyczyścić, aby baza danych była w tym samym stanie po zakończeniu testu. Nie sądzę, że rozwiązaniem jest uruchomienie/wycofanie transakcji. – StackUnderflow

+0

Możesz zacząć od zrzucenia całej bazy danych w tym samym czasie. –

+0

Tak więc musiałbym utworzyć nową instancję bazy danych dla każdego testu .. nie spowoduje to, że testy będą bardzo powolne? .. Chciałbym tylko wyczyścić wszystkie dane w bazie danych ... Myślę, że mogę napisać SQL, aby wyczyścić wszystkie dane tabeli w rozpadzie .. Chociaż szukałem czegoś takiego jak SQLUnit – StackUnderflow

3

pg_tmp(1) to narzędzie przeznaczone do ułatwienia tego zadania. Oto w jaki sposób można uruchomić nowe połączenie z SQLAlchemy:

from subprocess import check_output 
from sqlalchemy import create_engine 

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

To będzie spin nową bazę danych, która jest automatycznie zniszczona w 60 sekund. Jeśli połączenie jest otwarte, pg_tmp będzie czekać, aż wszystkie aktywne połączenia zostaną zamknięte.

0

Jest też QuickPiggy, który jest zdolny do czyszczenia po sobie. Z dokumentów:

prowizoryczny przykład PostgresSQL można uzyskać całkiem łatwo:

świni = quickpiggy.Piggy (lotny = prawda create_db = 'somedb')

Conn = psycopg2.connect (pig.dnstring())