C#SelenoidTestowanie automatyczne
Selenoid alternatywa dla Selenium Grida?
Selenoid alternatywa dla Selenium Grida?
W dzisiejszym wpisie chce wam opowiedzieć o alternatywie dla Selenium Grida.
Selenoid – jest to darmowe rozwiązanie. Wystarczy mieć swój serwer, aby móc z niego korzystać. Narzędzie jest jeszcze dość mało znane, więc tym bardziej polecam się z nim zaznajomić. Jeżeli korzystasz z Selenium WebDriver, to ten wpis jest dla Ciebie. 😉 (Selenium WebDriver – wstęp)
Czym jest Selenoid?
Selenium Grid jest hubem, który pozwala uruchamiać testy w Selenium WebDriver.
Domyślnie Selenoid instaluje trzy przeglądarki w dwóch wersjach:
- Chrome
- Firefox
- Operę
Selenoid został zaimplementowany w Go przez firmę Areokube (https://aerokube.com/), która zajmuję się głównie tworzeniem narzędzi do testów. Selenoid posiada możliwość urchomienia go poprzez Dockera. Istnieje również sposób uruchamiania Selenoida bez Dockera. W dzisiejszym wpisie użyjemy tego pierwszego sposobu.
Korzystanie z Selenoida
Gdy korzystamy z Selenoida, a nasze testy są współbieżne, możemy poprzez zastosowanie mocniejszych serwerów skrócić czas egzekucji testów poprzez uruchomienie ich na większej ilości maszyn. Selenoid używa znacznie mniej zasobów niż standardowy Selenium Grid (około 8 razy mniej). Pozwala on także nagrywać video z testów oraz mieć podczas nich VNC – co pozwala na szybkie debugowanie na środowisku, które może być naszym środowiskiem produkcyjnym.
Używam go już od jakiegoś czasu i oprócz tego, że jest stabilny, to nie potrzebuję bardzo wydajnych serwerów.
Serwer, który ma 4 rdzenie oraz 4gb ramu pozwala bezproblemu uruchamiać przynajmniej 4 sesje przeglądarek jednocześnie.
Co z BrowserStack / SauceLabs / TestingBot?
Te rozwiązania są dobre, ale dość drogie, jeżeli mamy większą skalę działania oraz potrzebę używania dużej ilości przeglądarek. Słyszałem o organizacjach, które miały płacić kilkanaście tys. dolarów za miesięczną subskrypcję na SauceLabs. W Selenoidzie potrzebujemy do działania jedynie serwerów. Oczywiście one kosztują, ale znacznie mniej niż korzystanie z dostawców chmur przeglądarek.
Selenoid wspiera również GGRa – narzędzie do tworzenia wielkich clusterów przeglądarek (GGR jest to load balancer dla Selenium WebDrivera), które pozwala mieć nawet klika tys. działających sesji testowych.
Czego potrzebujemy?
Serwera – ja korzystam z serwera na Linuxie (dzięki uprzejmości OVH – polecam te serwery, są relatywnie tanie, a działają stabilnie). Według zaleceń autorów jedna przeglądarka powinna mieć 1 core oraz 1 gb ramu. Osobiście testowałem rozwiązanie 8gb ramu i 2 core i 5 sesji przeglądarek i ta konfiguracja dawała sobie radę. Oczywiście bez nagrywania video. Nagrywanie video podnosi o około 60% zużycie procesora. Polecam poeksperymentować z konfiguracją i sprawdzać po zużyciu procesora czy jest ona dla nas dobra.
Test w Selenium WebDriver– możecie napisać lub skorzystać, z któregoś projektu z mojego repozytorium https://github.com/testingplusme. Ja korzystam z testu, który napisałem przy okazji prezentacji na temat Selenoida.
Mój scenariusz:
Zalety Selenoid
Open source – bardzo aktywna społeczność na mailu, kanał na telegramie – jesteśmy w stanie w kilka minut otrzymać odpowiedź na zadane pytanie.
Wspiera popularne przeglądarki:
- Wersja dockerowa – Chrome, Firefoxa, Opery.
- Wersja niedockerowa – IE, Edge na Windowsie.
Wady Selenoid
Zdarzają się czasami jakieś defekty, ale są szybko naprawiane.
Instalacja Selenoid
Korzystamy z terminala
curl -s https://aerokube.com/cm/bash | bash \ && ./cm selenoid start --vnc --tmpfs 128
Dzięki jednej komendzie możemy zainstalować naszego Selenoida.
Podczas instalacji Selenoid instaluje trzy rodzaje przeglądarki (Chrome, Firefox, Opera) w dwóch wersjach.
Po instalacji przechodzimy do używania Selenoida.
Twórcy Selenoida stworzyli manager dla Selenoida, który nazywa się „cm” – configuration manager. W konsoli wywołujemy go:
./cm
Za pomocą parametru status możemy sprawdzić katalogi, w których selenoid się zainstalował oraz, które kotenery dockerowe powiązane są z Selenoidem.
Selenoid bazuje na pliku browsers.json. Jeżeli chcemy mieć jeszcze dodatkowe wersje przeglądarek, musimy dopisać tę, którą chcemy. Domyślnie tak jak wspominałem pobierane, są trzy rodzaje przeglądarek.
Również w tym miejscu możemy ustawić timezone dla naszej przeglądarki.
Przechodzimy do przeglądarki
W moim przypadku jest to adres:
http://vps545305.ovh.net:4444/wd/hub/
Ukazuje nam się “404 page not found”, jednak jest to adres wyjściowy naszego Selenoida, do którego będziemy się odwoływać.
Selenoid UI
Jest to osobny projekt, który pozwala korzystać z Selenoida poprzez interfejs UI, który pozwala na obserwowanie testów podczas uruchamiania (jeżeli mamy ustawione VNC).
Jak instalujemy Selenoid UI?
Domyślnie Selenoid ustawiony jest na maksymalnie 5 sesji jednocześnie.
Polecam po próbować różnych ustawień, wszystko zależy od tego, jaką maszynę lub maszyny macie. Oczywiście to zależy również od tego, czy np. stosujecie video. Video jest bowiem bardzo zasbożerne. Osobiście używam video, tylko wtedy kiedy chce jakiś problem zbadać dla jednego lub kilku testów, czasami może to pomóc odtworzyć jakiś bardziej złożony błąd, który nie jest deterministyczny.
Przechodzę do projektu, który kiedyś napisałem na potrzebę prezentacji na PTaQu w, której opowiadałem m.in. o Selenoidzie.
Jeżeli nie macie jakiegoś swojego testowego kodu polecam wziąć jakikolwiek z moich projektów, które mam GitHubie.
Jeżeli korzystacie z Selenium WebDriver, dla innej platformy również będzie to działać.
EnableVNC – pozwala mieć dostęp do VNC (remote desktop) dla przeglądarki, w której jest uruchamiany test.
EnableVideo – pozwala nagrywać video z testów. W dość prosty sposób możemy ustawić tak, że przechowywane jest video, tylko z testów, które padły.
Dostęp do video z testów
Dostęp do video z testów możliwy jest pod ścieżką:
urlDoSelnoida:4444/video
W tym miejscu znajdują się wszystkie pliki video w formacie *.mp4, które możemy pobrać.
Działający test
Podczas uruchamianego testu, gdy ustawiamy VNC, możemy go obserwować pod tym samym adresem, tylko ze zmienionym portem na 8080.
Jak zrobić szybki update Selenoida?
Gdy chcemy zaktualizować naszego Selenoida, korzystamy z komendy “update”.
Przechowywanie Video
W sytuacji gdy, chcemy częściej korzystać z video z testów, polecam stworzyć skrypt, który będzie czyścił ten obszar dysku co jakiś czas. Można użyć do tego np. komendy z dokumentacji i zrobić z tego skrypt uruchamiany co jakiś czas:
find /path/to/video/dir -mindepth 1 -maxdepth 1 -mmin +120 -name '*.mp4' | xargs rm -rf
Ta komenda usunie nam wszystkie pliki, które będą starsze niż 2h (o rozszerzeniu mp4), które będziemy mieli we wskazanej ścieżce.
Jak sprawdzić status Selenoida?
http://adresUrlDoSelenoida:4444/status
Otrzymamy takie informacje:
Podsumowanie
W dzisiejszym wpisie poznaliśmy narzędzie, które może zastąpić Wam Selenium Grida. Selenoid jest open source oraz przede wszystkim używa znacznie mniej zasobów niż standardowy Selenium Grid. Dzięki temu, że Selenoid wspiera dockera, możemy w łatwy sposób decydować o ilości sesji na naszym serwerze. Również ciekawym projektem stworzonym przez chłopaków z Areokube jest GGR oraz Moon, który pozwala mieć duże klastery przeglądarek. Polecam obserwować ich działania, bo Selenoid jest swoistym game-changerem, jeżeli chodzi o uruchamianie testów automatycznych. Planuję również opisać jak zrobić podobne działania wraz z Zalenium, które zostało stworzone przez programistów z Zalando i też jest ciekawą odpowiedzią na Selenium Grida.