2009-03-05 11 views
7

Podczas opracowywania testów jednostkowych dla mojej aplikacji django, ciągle testuję test manage.py. Używam backendu MySQL i mam wiele modeli w projekcie, więc czas narastania do stworzenia wszystkich testowych baz danych wynosi około 30 sekund.Jak mogę uruchomić testy jednostkowe django (poprzez manage.py) szybciej

Jak mogę przyspieszyć testowanie każdej jednostki, utrzymując tabele bazy danych i usuwając wszystkie rekordy pomiędzy kolejnymi uruchomieniami komendy "manage.py test"?

Odpowiedz

7

Note że nie musisz uruchamiać całego zestawu testów za każdym razem. Możesz po prostu uruchomić pakiet testowy dla pojedynczej aplikacji, uruchamiając manage.py test appname (lub dla wielu aplikacji jednocześnie z manage.py test app1 app2 ...).

Mój zwykły tok pracy to po prostu uruchamianie testów dla aplikacji, nad którą pracuję w trakcie pracy, i uruchomienie pełnego pakietu przed zatwierdzeniem następnego zestawu zmian.

+0

Mimo to nadal tworzy bazę danych dla każdego modułu w INSTALLED_APPS, to zajmuje więcej czasu. – Bryce

1

Używam RAM-dysku dla mojej bazy danych MySQL, szybko jej nawet nie opisuję, w połączeniu z testowaniem tylko konkretnego testu w konkretnej aplikacji, nad którą pracujesz, może znacznie skrócić czas testowania. Istnieje kilka skryptów, które zautomatyzują tworzenie ramdysku dla twojej bazy danych. Używam mysql-ramdisk.py, którą przygotowałem jeden z moich współpracowników, ta wersja jest dla Mac OS X. Istnieje również wersja dla Linuksa here. Zajmuje mi około 30 sekund, aby ustawić wszystko dla django dev, a moje testy czasem trwają w mniej niż pięć sekund, łącznie z tworzeniem domyślnej testowej bazy danych. ;)

0

Opublikowane w tym wątku: How do I run a unit test against the production database?, Tworzę zestaw testów, który można uruchomić na podstawie db produkcyjnej (na mojej lokalnej maszynie dev, za pomocą "powłoki manage.py") lub na zwykłym django "zarządzaj. py test "zestaw testów. To był dla mnie prawdziwy czas na robienie szybkiego sprawdzania poprawności i zatwierdzania czasu w trakcie rozwoju. W obu przypadkach używam tego samego db (MySQL) i otrzymuję ORM django w moich testach.