Jakie macie problemy z testowaniem aplikacji napisanych w RoR?

Jeśli zechcecie się podzielić z nami Waszymi doświadczeniami, będziemy wdzięczni (i może jakoś zaradzimy).

Pracuję w projekcie który ma 13,103 linii kodu i 25,405 linii testów. Samo rake environment zajmuje ~ 10s. Uruchomienie testów jednostkowych, funckonalnych i integracyjnych > 20minut. Przy sync do zdalnego testserver z 8 rdzeniami i parralem test jest to 8minut. Mergowanie i deployment zajmuje na stałe jednego z programistów. Zastanawiam się co można zrobić, aby continous integration znów było przyjemnością. Póki co próbujemy rozbić aplikację na 2-3 mniejsze. Czy macie doświadczenie z tego typu problemami?

Mamy. Rozwiązanie to SOA.

dziwna sprawa pracuję nad jednym z projektów który jest trochę większy od Twojego i wszystkie testy zajmują jakieś 4minuty na wirtualce z 4gb ramu i procku z 2ma rdzeniami dziwna sprawa pooglądaj testy gdzieś musi coś być że to tak wolno działa

Pytanie ile i jakich masz testów czACha. Bardzo łatwo jest napisać wolne testy. Nie pamiętam dokładnie liczb ale kiedyś w projekcie z około 5kLOC i chyba 8kLOT (głównie cucumber), testy zajmowały prawie 20 minut na jednym rdzeniu. Obecnie staram się pisać testy omijające Railsy, (wbrew pozorom sporo tak można testować) i mam moduł, który się wykonuje poniżej 1 sekund. Możesz osiągnąć świetne wyniki jeśli nie korzystasz z bazy danych, plików, sieci i Railsów.

Polecam prezentację Corey Hainesa http://www.youtube.com/watch?v=bNn6M2vqxHE

własnie w tym jest cały trick, żeby napisać testy i żeby były szybkie jak tylko to możliwe ( i bez przesadyzmu w który jak mi się wydaje popadł Corey )

Wydaje mi się, że jest problem z szybkimi testami. Jeśli piszesz dużo testów które odpalają się w Selenium, jest to praktycznie niemożliwe. Niestety ciężko symulować akcje normalnego użytkownika w tempie kilkukrotnie większym, nie mówiąc już o szybkości działania Selenium pod niektórymi przeglądarkami (czyt. IE).

Ja akurat bardzo lubię jak mi się przeklika w Firefoksie, i zazwyczaj te testy zajmują najwięcej czasu.

13k linii kodu to już całkiem spora aplikacja, więc rozbicie na kilka mniejszych wydaje się dobrym pomysłem. Jeśli chodzi o testy to z reguły najwolniesze są testy integracyjne, bo muszą uruchomić praktycznie całe środowisko aplikacji.

Nie napisałeś czym i jak testujecie więc trochę pospekuluję. Warto:

  • używać headless webkit (np. phantomjs) zamiast np. selenium
  • mockować co się da: zewnętrzne api, filesystem (szczególnie przy zapisywaniu rekordów z załącznikami)
  • używać transakcyjnych fixtures
  • factory girl build_stubbed

Uzywamy capybara + webkit do js + standardowe test-unit. Faktycznie najwiekszy problem to testy integracyjne. Ich wykonanie zajmuje 65% czasu wykonania wszystkich testów . Uwazam, ze Sharnik ma tutaj 100% racji- rozbicie aplikacji na kilka mniejszych będzie tu zbawieniem.

Ostatnio dziwne rzeczy dzieją sie w moich testach z użyciem selenium (wydaje mi się , że to od momentu kiedy capybare do 2.0 upgradewalem ale głowy nie dam). Bardzo duża część testów która wysyła coś ajaxem - czy to formularze z remote: true submituje, czy też po prostu puszczam jakiegos GETa/POSTa ajaxem , to w testach wysypują mi się Timeout Errory np. na linijcie
click_link(‘Open modal’) który w zasadzie otwiera tylko jakis modal renderujac w srodku partial . (oczywiście w developmencie wszystko śmiga jak trzeba).

A tak troche w temacie samej dyskusji na temat używanych narzędzi do testowania: Nie boli mnie to jakoś strasznie że selenium nie jest najszybsze na świecie, bo nawet jeżeli mają mi wszystkie testy leciec 10 minut, to mogę sobie herbatkę zrobić w tym czasie, a wszystkie puszczam dopiero po jakimś wiekszym featurze. Z tymże ostatnio więcej walcze z samym selenium niż faktycznie implementuje rozwiązanie danego problemu , także z niecierpliwością czekam na kolejne posty na temat tego czego używacie i dlaczego ;]

Pozdrawiam

@sarin, możesz spróbować pokombinować z wersją ff - to też ma spore znaczenie.

To samo doradził mi Hubert , także coś w tym musi być ;]

No to jest straszny ból na travisie na przykład. Ogólnie już się cieszyłem, że mi w większości przypadków przechodzą wszystkie testy, a tu nagle każdy build oznaczony jako failed. I teraz się zbieram, zeby tam się wbić na serwa i ff wersję zmienić, bo tak samo z siebie to nie powinno przestać działać ;]

Downgrade do 14stki pomógł ;]

o, proszę, ja się nie dokopałem jeszcze. Zdaje się że z ftp.mozilla.org można pobrać tarballe z firefoxem. Niestety to dość często się zdarza że selenium-webdriver nie nadąża za wersjami FF.

Hmm wydaje mi się , ze pytanie które mam nadaje sie do tego topicu.

Od capybary 2.0 nie ma już wait_until, czytałem kilka postów jnicklas mówiących o tym , ze nie powinno się już wcześniej wait_until używać.
Czego używacie więc aby sprawdzić czy po kliknięciu w jakiś ajaxowy link zaczekać aż zwróci odpowiedź i sprawdzić czy zmiany w DOM są takie jak oczekiwano?

Pozdrawiam

miałam takei same…