2009-03-05 13 views
7

Mentre sto sviluppando i test unitari per la mia applicazione django, mi ritrovo a eseguire il test manage.py più e più volte. Sto usando un backend MySQL e ho molti modelli nel progetto, quindi il tempo di accelerazione per creare tutti i database di test è di circa 30 secondi.come posso eseguire più velocemente i test dell'unità django (tramite manage.py)

Come posso utilizzare rendere ogni unità test più veloce mantenendo le tabelle del database create e semplicemente cancellandole da tutti i record tra le varie fasi del comando "manage.py test"?

risposta

7

Nota che non è necessario eseguire l'intera suite di test ogni volta. Puoi semplicemente eseguire la suite di test per una singola app eseguendo manage.py test appname (o per più app contemporaneamente con manage.py test app1 app2 ...).

Il mio solito flusso di lavoro consiste nell'eseguire solo i test per l'app su cui sto lavorando mentre lavoro, e l'esecuzione della suite completa prima di eseguire il commit della prossima serie di modifiche.

+0

Tuttavia, crea ancora il database per ciascun modulo in INSTALLED_APPS, che è ciò che richiede più tempo. – Bryce

4

non l'ho provato, ma c'era si suppone che un recente check-in che per aiutare, consentendo le prove da eseguire all'interno di transazioni che vengono poi rollback:

Documentation e developer commentary

1

Io uso un ram-disk per il mio database MySQL, veloce nemmeno lo descrive, combinato con solo test del test specifico all'interno dell'app specifica su cui stai lavorando può ridurre drasticamente il tempo di test. Ci sono alcuni script là fuori che automatizzano la creazione del ramdisk per il tuo database, io uso mysql-ramdisk.py che uno dei miei colleghi ha preparato, questa versione è per Mac OS X. C'è anche una versione per Linux here. Mi ci vogliono circa 30 secondi per impostare tutto su django dev, ei miei test a volte vengono eseguiti in meno di cinque secondi, inclusa la creazione del database di test predefinito. ;)

0

Come ha scritto in questa discussione: How do I run a unit test against the production database?, creo una suite di test che può essere eseguito contro sia il db di produzione (sulla mia macchina dev locali, tramite "guscio manage.py"), o il Django regolare "gestire. py test "suite di test. Per me è stato un vero risparmio di tempo per il controllo rapido della sanità mentale e la convalida del tempo durante lo sviluppo. In entrambi i casi sto correndo contro lo stesso db (MySQL) e ottengo django ORM nei miei test.

Problemi correlati