Przejdź do treści
TestLine Menu
TestLine
wydajność

Pierwszy test wydajności w JMeter

Jak ustalić cel testu, zbudować model obciążenia i czytać wyniki bez patrzenia na samą średnią.

autor
Artur Machowski, Senior QA Engineer
opublikowano
czytanie
7 min

Zacznij od pytania, a nie od narzędzia

“Sprawdźmy wydajność” to za mało, żeby zaplanować test. Potrzebujesz pytania, na które da się odpowiedzieć liczbą: czy koszyk obsłuży ruch z kampanii, ile użytkowników wytrzyma API, zanim czasy odpowiedzi przestaną być akceptowalne.

Dobry cel ma trzy elementy:

  • obciążenie: ilu użytkowników lub żądań na sekundę,
  • próg: np. 95% odpowiedzi poniżej 800 ms,
  • margines błędów: np. mniej niż 1% żądań zakończonych błędem.

Liczby powyżej są przykładowe. Swoje weź z danych produkcyjnych albo z założeń biznesowych.

Rodzaje testów

  • Test obciążenia sprawdza działanie przy oczekiwanym ruchu.
  • Test przeciążeniowy szuka granicy, po której system zaczyna się psuć.
  • Test wytrzymałościowy trzyma stałe obciążenie przez wiele godzin i pokazuje wycieki pamięci albo połączeń.
  • Test skokowy sprawdza nagły wzrost ruchu, np. po wysłaniu newslettera.

Na początek wystarczy test obciążenia kilku kluczowych usług.

Plan testu w JMeter

Podstawowy plan ma kilka elementów:

  • Thread Group: liczba wirtualnych użytkowników, czas narastania (ramp-up) i czas trwania,
  • HTTP Request: żądania do testowanych endpointów,
  • HTTP Header Manager: nagłówki, np. token autoryzacji,
  • CSV Data Set Config: dane testowe, żeby każdy użytkownik logował się na inne konto,
  • Assertions: sprawdzenie kodu odpowiedzi i treści, bo szybki błąd 500 to wciąż błąd.

Ramp-up ustaw tak, żeby ruch narastał stopniowo. Start wszystkich użytkowników w tej samej sekundzie testuje raczej serwer przyjmujący połączenia niż aplikację.

Uruchamiaj bez GUI

Interfejs JMetera służy do budowania planu. Sam test uruchamiaj z linii poleceń, bo GUI zużywa zasoby i zniekształca wyniki:

jmeter -n -t plan.jmx -l wyniki.jtl -e -o raport/

Flaga -n wyłącza GUI, -l zapisuje surowe wyniki, a -e -o generuje raport HTML. Katalog raportu musi być pusty.

Generator obciążenia nie powinien stać na tej samej maszynie co testowany system. Inaczej mierzysz, jak obie aplikacje walczą o procesor.

Jak czytać wyniki

Średni czas odpowiedzi ukrywa problemy. Jeśli 90 żądań trwa 100 ms, a 10 trwa 5 sekund, średnia wygląda znośnie, a co dziesiąty użytkownik czeka bardzo długo. Dlatego patrz na:

  • percentyle (p95, p99): jak długo czekają najwolniej obsłużeni użytkownicy,
  • przepustowość: ile żądań na sekundę system faktycznie obsługuje,
  • odsetek błędów: rośnie zwykle razem z obciążeniem,
  • zasoby serwera: procesor, pamięć, połączenia do bazy.

Moment, w którym przepustowość przestaje rosnąć, a czasy odpowiedzi idą w górę, wskazuje wąskie gardło.

Środowisko i dane

Wyniki są tyle warte, ile środowisko. Test na małej instancji z pustą bazą nie powie wiele o produkcji. W jednym z moich projektów testowałem wydajność kluczowych usług backendu pod symulowanym obciążeniem produkcyjnym. Przygotowanie realistycznego ruchu to zwykle najbardziej pracochłonna część takiego testu.

Zapisz wersję aplikacji, konfigurację i dane wejściowe. Bez tego nie porównasz dwóch uruchomień.

Podsumowanie

Pierwszy test wydajności nie musi być duży. Jedno pytanie, kilka usług, stopniowe narastanie ruchu i patrzenie na p95 zamiast średniej dają już użyteczną odpowiedź. Jeśli chcesz sprawdzić swój system przed ważnym wydaniem, opisz swój projekt.

Masz release za kilka tygodni?

Opisz projekt w formularzu. Odpiszę z pytaniami o zakres albo z wstępnym planem testów.