JMeter i testy wydajności w chmurze - przepis na sukces

JMeter i testy wydajności w chmurze - przepis na sukces
W świecie IT już od dobrych kilku lat słychać o tzw. „rewolucji chmurowej”, która przynosi ze sobą spektakularne zmiany pod względem dostępu do przeróżnych usług i ogromnej mocy obliczeniowej. Potrzebne maszyny serwerowe można w bardzo krótkim czasie wynająć, a w razie zmniejszonego zapotrzebowania wyłączyć, płacąc jedynie za czas ich działania.
 

Takie rozwiązania sprzyjają m.in. działaniu start-upów, które są w stanie szybko wystartować i rosnąć w ramach potrzeb bez dużych nakładów finansowych na własną infrastrukturę serwerową.

Udogodnienia związane z chmurą znajdują również zastosowanie w świecie testów wydajnościowych. Za jej pomocą wreszcie można przeprowadzić testy z wielu miejsc na świecie, bez potrzeby posiadania i utrzymywania tam fizycznych maszyn. Bardzo ułatwia to na przykład poznanie czasu odpowiedzi aplikacji dla użytkowników w różnych miejscach globu, czy sprawdzenie działania serwera CDN znajdującego się w pobliżu miejsca uruchomienia takiego testu. Prostsze i tańsze stało się również przeprowadzanie testów z bardzo dużym obciążeniem, wystarczy teraz kilka kliknięć myszką, aby wynająć dowolną ilość wydajnych serwerów do jego wygenerowania.

Od kilku lat powstają kolejne serwisy uruchamiające testy wydajnościowe z chmury, które jeszcze upraszczają korzystanie z jej dobrodziejstw. Pobierając opłaty, takie serwisy biorą na siebie kwestię wynajęcia odpowiednich maszyn oraz uruchomienia testu, udostępniają ponadto narzędzia ułatwiające analizę wyników testów, czy też automatycznie generują podstawowe raporty.

Również wśród naszych klientów zaczęliśmy obserwować rosnące zainteresowanie usługami testowania wydajnościowego z chmury. Odpowiadając na ich potrzebę zrobiliśmy rozpoznanie rynku, najbliżej przyglądając się usługom opartym na bardzo dobrze znanym i używanym przez nas narzędziu JMeter. Najchętniej nie rezygnowalibyśmy z użycia JMetera przy „przesiadce” do chmury, a potrzebowaliśmy usługi, która jest w stanie uruchomić test z wielu miejsc na świecie, tak jakbyśmy robili to w naszej infrastrukturze, przy okazji oferując użyteczne opcje analizy wyników takich testów.

Z naszego porównania ostatecznie wyeliminowaliśmy usługi, które nie używają JMetera, a potrafią obciążać ruchem pojedyncze URL-e (np. LoadImpact, Loader). Do końcowej konfrontacji wybraliśmy aplikacje: Blazemeter, Flood IO, RedLine13, OctoPerf, CloudLoadIO i Visual Studio Team Services.

 

Zaczęliśmy od przyjrzenia się serwisowi Blazemeter, z którego usług chcieliśmy skorzystać już kilka lat wcześniej, jednak wtedy nie spełniał on naszych oczekiwań. Okazało się, że ludzie stojący za Blazemeterem nie próżnowali - serwis znacznie się rozbudował i dostarcza teraz nie tylko platformę do uruchamiania skryptów JMetera, ale także opcję uruchomienia testów Selenium czy testowania wydajnościowo konkretnych URL-i. Zdecydowanie wyróżnia go też bardzo dobra dokumentacja i liczne artykuły na temat możliwości zastosowań JMetera. Ponadto świetnie wyglądają opcje analizy wyników testów, gdzie możemy w łatwy sposób zestawiać różne czynniki mające wpływ na wydajność serwera. Bardzo przydatna jest opcja porównania wielu wyników testów (do 5) w celu przeanalizowania trendów w wynikach.

Testując usługę Blazemetera możemy wybrać jedną z wielu wersji JMetera czy Javy, na których chcemy uruchomić testy. Serwis współpracuje z największą ilością dostawców usług chmurowych, dzięki czemu mamy bardzo szeroki wybór lokalizacji źródła generowanego obciążenia. 

Innym serwisem, który konkuruje już od kliku lat z Blazemeterem jest australijski Flood IO. Zaletą Flood IO jest to, że możemy dodać do naszych testów wszystkie dodatkowe pliki konfiguracyjne (pozwoli to na m.in. skuteczne uwierzytelnienie w Kerberosie) oraz biblioteki. Ciekawą opcją jest walidacja skryptu przed uruchomieniem, która może szybko wykryć błędy w skrypcie lub jego niekompatybilność z serwisem.

Panel analizy wyników serwisu wygląda bardzo przyjemnie dla oka, ale biorąc pod uwagę dłuższą obecność Flood IO na rynku, zaskakuje brak możliwości porównania wyników kilku testów czy wygenerowania pewnych linii trendu. Dziwią również podstawowe błędy, które od czasu do czasu utrudniają pracę z serwisem.

Na nieco innych zasadach w porównaniu do innych serwisów funkcjonuje RedLine13. Żeby uruchomić test za jego pomocą należy być zarejestrowanym użytkownikiem chmury AWS (Amazon). Serwis wykorzystuje nasze konto do wynajęcia serwerów AWS i uruchomienia na nim testów. Co prawda płacimy za każdy test Amazonowi, ale za to możemy uruchamiać dowolną ilość testów z dowolną ilością wirtualnych użytkowników. Serwis nie narzuca żadnych limitów na te elementy testu. 

Dużym ułatwieniem dla użytkowników jest możliwość automatycznego dodania do testu najbardziej popularnych bibliotek dodatkowych (np. pakiety komponentów z jmeter-plugins.org) czy użyteczne funkcje analizy wyników testów. Minusem serwisu jest słaba dokumentacja oraz irytujące błędy jak np. uznawanie kodu odpowiedzi http 304 za niepoprawny, co skutkuje raportowaniem ogromnej ilości błędów w teście.

Serwisem z dużym potencjałem, szczególnie jeżeli chodzi o analizowanie przeprowadzonych testów, jest CloudLoadIO (najlepsze możliwości pod tym względem obok Blazemetera). Niestety usługa potrafi również sprawiać przykre niespodzianki i np. przydzielać maszyny do testów przez 24h (zdarzyło się to nam kilka razy). Kolejnymi zarzutami do CloudLoadIO może być brak dokumentacji czy proste błędy w interfejsie użytkownika. Niemniej jednak warto obserwować rozwój tego serwisu, który po poprawieniu błędów może stać się jednym z liderów na rynku ze względu na świetne możliwości analizy wyników.

Kolejnym serwisem, który sprawdziliśmy jest OctoPerf. Funkcjonuje on jednak na innych zasadach niż opisane powyżej usługi. Nie uruchamia on skryptu JMetera przygotowanego przez nas wcześniej, lecz pozwala na zbudowanie skryptu online, korzystając z udostępnianych komponentów. Mamy również możliwość zaimportowania gotowego skryptu JMetera i "przetłumaczenia" go na abstrakcyjne elementy OctoPerfa. Niestety serwis dostarcza jedynie najbardziej podstawowe komponenty i zaimportowanie bardziej skomplikowanego skryptu po prostu nie będzie możliwe. OctoPerf zapewnia wsparcie swoich ekspertów w takiej sytuacji, jednak w wielu innych nie będą oni mieli pełni możliwości zasymulowania działania takiego skryptu. Serwis wydaje się być jednak dobrym wyborem, gdy nasze gotowe testy składają się z prostych skryptów opartych na protokole http lub w sytuacji, gdy nie mamy skryptu i/lub wiedzy odnośnie JMetera, a chcielibyśmy przeprowadzić testy wydajnościowe.

OctoPerf udostępnia również bardzo ciekawą opcję monitorowania serwerów testowych, dobrą dokumentację oraz bardzo przydatne narzędzia do analizy wyników testów.

Ostatnią sprawdzoną usługą jest Visual Studio Team Services - 'kombajn do wszystkiego' - od zarządzania projektem, przez pisanie kodu, po uruchamianie testów. Jedną z opcji jest uruchamianie skryptów JMetera z infrastruktury Azure. Obsługa jest bardzo prosta - serwis potrafi uruchomić każdy skrypt JMeterowy, mamy możliwość dołączenia zewnętrznych bibliotek czy plików z ustawieniami. Możemy przeprowadzić również podstawową analizę wyników testów na wykresach, a także porównać dwa uruchomienia testów. Podsumowując, jest to serwis oferujący poprawną funkcjonalność i robi swoje bez wodotrysków. Jeżeli ktoś już obecnie korzysta z VSTS i rozgląda się za platformą do przeprowadzenia testów wydajnościowych z chmury, to może być to najbardziej optymalny wybór.

Pełną prezentację oraz szczegółowe zestawienie wszystkich opisanych narzędzi możecie znaleźć na naszej stronie.

Ocenie poddawaliśmy zarówno podstawowe cechy każdego z serwisów, takie jak plany cenowe, poprawność uruchomienia skryptów testowych, jak i rzadziej wykorzystywane funkcje, np. możliwość dołączenia plików z konfiguracją autentykacji Kerberos.

W porównaniu nie brakuje również ewaluacji integracji z serwerami CI, możliwości wyboru wersji JMetera wykorzystywanej w teście, czy użycia zewnętrznych wtyczek.

Główną zaletą omówionych serwisów do testowania wydajnościowego w chmurze jest to, że testerzy wydajnościowi mogą bardziej skupić się na analizie wyników i przedstawieniu rekomendacji odnośnie testowanej aplikacji, niż na przygotowaniu i utrzymywaniu infrastruktury testowej. Wychodząc naprzeciw oczekiwaniom klientów z każdym miesiącem serwisy te rozszerzają swoją ofertę o nowe funkcjonalności. Biorąc pod uwagę wszystkie te korzyści oraz fakt, że chmura stała się w ostatnim czasie po prostu modna, wydaje się, że jedyną możliwością jest dalszy rozwój tego rynku.

Wydajnych testów z chmury!

 

O autorze

Rafał Szkudlarek

Absolwent Informatyki na Politechnice Wrocławskiej. Od trzech lat związany z firmą Objectivity Bespoke Software Specialists Sp. z o.o., gdzie zajmuje się testami wydajnościowymi back-endu i front-endu. Do tej pory przewinął się przez różne obszary domenowe. Od systemów bankowych, przez branżę automotive czy lotniczą, po oprogramowanie robione na zamówienie w Objectivity. Czas wolny spędza z rodziną oraz grając w koszykówkę.

 

 

Od redakcji

Jeśli chcesz podzielić się swoją wiedzą z innymi testerami, czekamy na Twój artykuł, film, komentarz, pracę dyplomową czy inną formę treści, jaką chcesz opublikować na naszych łamach.
 
 

To powinno Cię zainteresować