Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: phpunit, zend, doctrine i baza danych

Witam,

ciekaw jestem w jakis sposob testujecie kod uzywajacy bazy danych?
W swoim projekcie chce aby testy nie wplywaly jeden na drugi dlatego przed kazdym testem kontrolera/modelu baza jest tworzona od nowa, oczywiscie dziala to jak nalezy jednak im wiecej testow i im bardziej skomplikowana baza tym dluzej schodzi z testowaniem.

Poki co radze sobie w ten sposob ze testy wszystkiego robi cruise control, a ja wylaczam pozostale te testy ktore mnei aktualnie nie interesuja ale i tak jeden kontroler moze sie testowac przez ponad 30sekund.

Macie pomysl jak to przyspieszyc?
Łukasz Krzysiak

Łukasz Krzysiak programista, o2.pl

Temat: phpunit, zend, doctrine i baza danych

Aby ograniczyć czas ładowania danych testowych:

1. Ładuję tylko te dane, które potrzebne są do tego konkretnego testu, najczęściej wystarczy dodać rekordy do jednej góra dwóch tabel (zamiast do 20 :).

2. Tworzę strukturę bazy danych tylko raz. Przed uruchomieniem wszystkich testów. Później tylko czyszczę tabele w tearDown i dodaje rekordy niezbędne do wykonania następnego testu w setUp.

3. Używam TRUNCATE zamiast DELETE.

4. Często gdy testuje aplikacje uzwajace dużych baz ładuję dane testowe z użyciem natywnego klikenta mysql. Czyli np. w pythonie tak:

os.system("mysql -uUSER -pPASS db_name < dane_testose.sql")

Jest to nieco szybsze niż ładowanie danych w kodzie programu, dodatkowo uniezależnia testy od pozostałych elemetów aplikacji jak podstystem obsługi bazy danych.

Następna dyskusja:

zend Framewodk, baza danych




Wyślij zaproszenie do