2010-06-28 11 views
14

Uruchamianie testów jednostkowych Django to zbyt wolne daleko. Zwłaszcza, gdy chcę tylko uruchomić jeden test, ale biegacz testowy chce stworzyć całą bazę danych i zniszczyć całość tylko dla jednego testu.Jak mogę powiedzieć Django, aby zapisać moją testową bazę danych?

W przypadku, gdy nie zmieniłem żadnego z moich modeli, mogłem zaoszczędzić mnóstwo czasu, gdyby Django nie zawracał sobie głowy tworzeniem i niszczeniem całej bazy danych, a zamiast tego zapisał ją na następny raz. Co więcej, byłoby świetnie, gdyby biegacz testowy był w stanie zobaczyć, które modele się zmieniły i tylko zastąpić je przed uruchomieniem testów.

Ja wolałbym nie mieć podklasy biegacza testowego, ale to właśnie będę musiał zrobić, jeśli nie znajdę rozwiązania wkrótce. czy coś takiego już istnieje?

Odpowiedz

8

W django1.8 dodany nowy parametr dla manage.py test polecenia --keepdb

./manage.py test --keepdb 
4

Czy próbowałeś użyć bazy danych SQLite w pamięci do testów? Jest znacznie szybszy niż w przypadku bazy danych na dysku.

+0

ostatni raz próbowałem, spatialite nie grał ładnie na cokolwiek wersja Ubuntu używałem, więc szybko porzucone że. Teraz powinienem spróbować jeszcze raz. –

+3

Myślę, że konieczne jest uruchomienie testów w tej samej bazie danych, co w przypadku live, jeśli nie zawsze, przynajmniej przed każdym zatwierdzeniem. –

+0

Uwaga: SQLite3 obecnie NIE działa wielowątkowo, więc jeśli masz jakieś testy (integracyjne), które polegają na testowaniu współbieżnego dostępu do bazy danych, będą one powodować smutek. – JohnJ

1

Używam Djang nos. Jeśli ustawisz env var REUSE_DB = 1, nie zniszczy DB po uruchomieniu testów i ponownie użyje tego samego DB dla następnego uruchomienia. Za każdym razem, gdy zmienia się schemat, po prostu ustaw REUSE_DB = 0 i wykonaj jedno "pełne" uruchomienie. Po tym zresetuj go do 1 i możesz już iść.

https://github.com/django-nose/django-nose

Powiązane problemy