Continuous integration - wirtualizacja, małe serwery, duże serwery?

Ostatnio dużo więcej czasu poświęcam na testy integracyjne, głównie za sprawą duetu cucumber + celerity. Daje to bardzo dobre wyniki, bo przeglądarka w pamięci radzi sobie z większością skryptów i zarazem nie trzeba godzinami czekać, tak jak w przypadku uruchamiania wszystkich scenariuszy w realnej przeglądarce.

Możliwości są duże, ale niestety jak na razie wykorzystuję tylko i wyłącznie celerity, a fajnie byłoby mieć feedback z przeglądarek. Tylko komu się będzie chciało zamulać kompa na kilkanaście minut i czekać aż system łaskawie przeklika takiego firefoxa czy operę.

Rozwiązanie jest oczywiście proste - uruchomić testy na serwerze.

Zakładając, że trzeba będzie tych testów trochę odpalić, fajnie byłoby dostać wyniki szybciej, czyli wykonać testy równolegle w kilku przeglądarkach. Dodatkowo nie znalazłem na razie prostej metody na włączenie/wyłączenie javascriptu w przeglądarce z poziomu API watira, więc najlepiej uruchomić testy na 2 przeglądarkach - jednej z włączonym javascriptem (np. te oznaczone tagiem @js) i z wyłączonym. Potrzeba będzie więc do tego jakiegoś serwera lub kilku mniejszych serwerów. I teraz czysto teoretyczne pytanie: Jak najlepiej z punktu widzenia wydajności uruchamiać dużą ilość przeglądarek? Duża liczba małych serwerków dedykowanych, duża liczba małych zwirtualizowanych instancji na jednym mocnym serwerze czy mniejsza liczba mocniejszych serwerów, na których odpalone będzie po kilka przeglądarek?

Wiem, że pytanie jest bardzo teoretyczne i tak czy siak nie będę miał pewnie dostępu do bardziej zmyślnej konfiguracji niż dedyk w ovh (względnie jakieś instancje amazonu ec2), ale problem wydaje mi się dość ciekawy :slight_smile:

Wydaję mi się, że najlepiej by było w takiej kolejności jak to wymieniłeś, czyli:

  1. Duża liczba małych dedyków
  2. Duża liczba wirtualek
  3. Mała liczba mocnych dedyków

W 1 i 2 każda przeglądarka działa w odizolowanym środowisku, no tyle że wirtualki są jednak troszkę wolniejsze. W 3 punkcie jak odpalisz kilka przeglądarek to będą one dzieliły ze sobą jakieśtam zasoby co może zwolnić cały proces. A jak się jakaś zamuli to reszta też średnio będzie działać.

Z ekonomicznego punktu widzenia najlepsze są wirtualki albo ten EC2.

Też sobie to tak układałem :slight_smile:

Ktoś ma jeszcze jakieś ciekawe przemyślenia?

Będę musiał obliczyć ile wyjdzie odpalanie kilku instancji Amazon ec2 na czas testów, może to byłaby niezła opcja. Stworzyć instancje do testowania, odpalać je automatycznie (amazon ma fajne API) i kończyć po skończeniu testów. To wydaje się być całkiem realną opcją przy obecnej cenie dolara.

Może nieciekawe: stos programistyczny RoR zaczyna rosnąć :confused:

Oj, nie jest już taki tani. 2,8757zł NBP

Tak się dzieje z każdą technologią :slight_smile:

Kwestia tego, żeby robić wszystko co się da, żeby bariera wejścia i była jak najniższa.