JMeter jest darmową aplikacją bardzo przydatną podczas wykonywania “load testing”. Interfejs użytkownika co prawda jest bardzo mało intuicyjny, ale po pewnym czasie można przyzwyczaić się. Aplikacja, po uruchomieniu prezentuje się następująco:
Oczywiście na oficjalnej stronie można znaleźć pełną dokumentację, więc moim celem nie jest opisywanie każdego elementu. Jako próbkę, po prostu spróbujmy stworzyć test, który będzie łączył się z jakąś stroną (np. Google) i symulował zapytania wykonywane przez użytkownika. W tym celu, najpierw dodajemy tzw. Thread Group:
Thread group służy do symulacji ruchu. Po dodaniu elementu, będziemy mogli skonfigurować częstotliwość zapytań:
Number of threads oraz ramp-up period to chyba najważniejsze parametry. Pierwszy z nich to liczba użytkowników (wątków). Drugi z kolei to czas w którym zapytania mają zostać wykonane. Jeśli zatem ustalimy Number of threads na 1000, a ramp-up period na 30, wtedy zostanie wykonanych 1000 akcji (np. zapytań) w ciągu 30 sekund.
Kolejny przydatny element to “Sampler”. W naszym przypadku skorzystamy z HTTP Request:
Po dodaniu elementu zobaczymy, że możemy skonfigurować nazwę serwera, jak i przekazywane parametry. Załóżmy, że chcemy wykonać proste zapytanie GET do Google:
Z powyższego screena widać, że praktycznie każdą składową można skonfigurować. Nie ma zatem problemu z wysłaniem POST z bardziej zaawansowanymi parametrami.
Po wykonaniu zapytania, warto coś zrobić z dostarczoną odpowiedzią. Pierwszym krokiem może być wyświetlenie wyników np. w formie drzewa:
Przydatne jest również wygenerowanie Summary Report:
Niezbędna jest również walidacja odpowiedzi. Musimy wiedzieć, kiedy nasz test powinien zakończyć się sukcesem albo błędem. Z tego względu dodajmy asercję odpowiedzi:
Załóżmy, że jeśli odpowiedź przyjdzie z kodem HTTP 200, wtedy test zakończyć powinien się sukcesem:
Mamy już wszystkie elementy. Wystarczy, że skonfigurujemy Thread Group (liczbę użytkowników oraz ramp-up) i możemy uruchomić testy. Po uruchomieniu i wykonaniu testów, przejdźmy do dodanego wcześniej Results Tree:
Każdą odpowiedź możemy zobaczyć, zarówno w formie dokumentu HTML jak i czystego tekstu. Z kolei Summary Report zawiera informacje takie jak średni czas wykonania zapytania czy procent błędów:
Z powyższego screena wiemy, że wszystkie zapytania zakończyły się sukcesem, a średni czas wykonania to 481 milisekund.
Oczywiście to tylko namiastka możliwości JMeter. W praktyce będziemy musieli użyć więcej elementów. Zwykle serwisy mają mechanizm autoryzacji i wtedy będziemy musieli przechowywać ciasteczka pomiędzy różnymi zapytaniami. Zamiast wysyłać pojedyncze zapytanie, być możemy będziemy chcieli symulować pewną sekwencję zapytań.
Myślę, że przydatny skrót to CTRL+E, który powoduje wykasowanie aktualnych raportów.
Inną przydatną opcją jest możliwość nagrywania sekwencji za pomocą przeglądarki. Wtedy JMeter będzie służył jako serwer proxy i wszelkie zapytania wykonane przez użytkownika w przeglądarce, będą tworzyć odpowiednie elementy w JMeter.
Dzięki za fajny i zwięzły opis. Bardzo się przydał
Jak ustawić, żeby sprawdzić ile maksymalnie użytkowników online wytrzyma strona? Jest automat, czy metodą prób i błędów? Jak wykluczyć sytuację, że hosting wykryje test jako atak?
Czy jest sens testować stronę na localhost? Obciążenie, które generuje jmeter chyba nie da wiarygodnych wyników?