5

Come si esegue il test dell'unità il DAL Python che sta utilizzando postgresql.Test del database in python, postgresql

In sqlite è possibile creare database in memoria per ogni test, ma questo non può essere fatto per postgresql.

Desidero una libreria che possa essere utilizzata per impostare un database e pulirlo una volta terminato il test.

Sto usando Sqlalchemy come mio ORM.

risposta

2

È possibile utilizzare nose per scrivere i test, quindi utilizzare SQLAlchemy per creare e pulire il database di test nei metodi setup/teardown.

+0

@Luper Rouch: Come si pulisce in modo che il database si trovi nello stesso stato una volta terminato il test. Non penso che l'avvio/rollback di una transazione sia la soluzione. – StackUnderflow

+0

Puoi iniziare facendo cadere l'intero database nel teardown. –

+0

Quindi dovrei creare una nuova istanza di database per ogni test .. non renderà i test molto lenti? ... Vorrei solo pulire tutti i dati nel database ... Credo di poter scrivere SQL per pulire tutto dati della tabella in teardown .. Sebbene stavo cercando qualcosa come SQLUnit – StackUnderflow

3

pg_tmp(1) è un'utilità destinata a semplificare questa attività. Ecco come si potrebbe iniziare una nuova connessione con SQLAlchemy:

from subprocess import check_output 
from sqlalchemy import create_engine 

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

Questo girerà un nuovo database che viene distrutto automaticamente in 60 secondi. Se una connessione è aperta, pg_tmp attenderà fino alla chiusura di tutte le connessioni attive.

0

C'è anche QuickPiggy, che è in grado di ripulire se stesso. Dalla documentazione:

Un esempio PostgresSQL improvvisato può essere ottenuta facilmente:

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

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

Problemi correlati