Sytuacja kobiet w IT w 2024 roku
24.09.20214 min
Szymon Czarnuch

Szymon CzarnuchDevOps Engineer

Czego potrzebujemy do testów wydajnościowych

Poznaj rodzaje testów wydajnościowych i sprawdź, jak się do nich przygotować.

Czego potrzebujemy do testów wydajnościowych

Testy wydajnościowe należą do grupy niefunkcjonalnych technik testowania, a ich wdrożenie może wymagać użycia narzędzi do symulacji systemu/aplikacji w określonych okolicznościach. W pierwszej kolejności po natknięciu się na zwrot „testy wydajnościowe” można odnieść mylne wrażenie, iż odnoszą się one do prędkości np. szybkość ładowania strony. Poniżej po krótce przedstawiam niektóre rodzaj testów wydajnościowych.

Load tests (testy obciążeniowe)

Ten typ testów sprawdza, jak obciążenie aplikacji przekłada się na czas odpowiedzi. W przypadku testów obciążeniowych wykorzystywane są narzędzia pozwalające na wygenerowanie wzmożonego ruchu użytkowników w celu zbadania, ile zapytań może obsłużyć aplikacja w określonej jednostce czasu.


Stress tests (testy przeciążeniowe)

Na pierwszy rzut oka testy przeciążeniowe są podobne do testów obciążeniowych, z tą różnicą, że „stres testy” odpowiadają na pytanie, jaka jest maksymalna liczba użytkowników, których może obsłużyć aplikacja, zanim ulegnie awarii.  Ponadto uzyskujemy odpowiedź, czy po spowodowaniu awarii, system zachowa się w odpowiedni sposób.


Peak Tests (testy szczytowe)

Opierają się na teście warunków skrajnych w celu symulacji, jak aplikacja zachowa się podczas nagłego obciążenia powtarzanego cyklicznie.


Endurance tests (testy wytrzymałościowe)

Mają na cel sprawdzenie działania systemu przez dłuższy czas przy normalnym obciążeniu.


Scalability tests (testy skalowalności)

Podobnie jak wszystkie poprzednie rodzaje testów testy skalowalności również sprawdzają zachowanie na zwiększone obciążenie. Różnica w tego typu testach polega na stopniowym zwiększeniu obciążenia przy ciągłym monitorowaniu wydajności systemu.

Przygotowanie do testów

Podstawowym krokiem do przeprowadzania testów wydajnościowych jest określenie wymagań, jakie mają spełniać scenariusze testowe. Jako prosty przykład mogą nam posłużyć poniższe wymaganie:

  • Usługa sieciowa musi odpowiadać w ciągu 500 milisekundach przez 95% czasu
  • Żądanie logowania do aplikacji nie może przekraczać 2000 milisekund w 95% czasu
  • Usługa sieciowa musi obsługiwać 500 żądań na minutę


Na podstawie dostępnych wymagań, budujemy scenariusze testowe, które powinny pokryć wymania stawiane przed aplikacja. Kryteria sukcesu testów mogą być określane na podstawie odpowiednych wskaźników:

  • ilość użytkowników aplikacji
  • czas odpowiedzi systemu
  • liczba obsłużonych żądań na sekundę
  • liczba transakcje na sekundę
  • poziom błędu w odniesieniu do całkowitej liczby odpowiedzi na jednostkę czasu
  • zużycie procesora
  • zużycie pamięci
  • wykorzystanie sieci


Kolejnym istotnym elementem wprowadzającym do testów wydajnościowych, jest zdefiniowanie zakresów testów aplikacji. Powinnyśmy w tym kroku odpowiedzieć sobie na niektóre pytania takie jak:

  • Co możemy przetestować podczas testów, a jaki obszar jest niemożliwy do przetestowania?
  • Czy testujemy system od początku do końca, czy koncentrujemy się na poszczególnych funkcjonalnościach systemu?

Narzędzia testowe

Po skompletowaniu wymagań dotyczących przeprowadzania testów, należy zadać sobie pytanie, jakie narzędzie będzie spełniać nasze oczekiwanie co do rozpoczęcia pracy z testami. Musimy rozważyć wykorzystanie narzędzi na licencji open source lub zainwestowanie w rozwiązania komercyjne Poniżej przedstawiam w skrócie dwa z bardziej popularnych narzędzi wykorzystywanych w testach wydajnościowych.

  • Jmeter– chyba jedno z najbardziej popularnych narzędzi, oferujących rozbudowane możliwości na licencji typu open source. Jmeter daje możliwość między innymi przeprowadzania testów ze złożoną logiką i korelacją parametrów dynamicznych, pozwala symulować zachowania wielu użytkowników w równoległych wątkach.
  • HP LoadRunner– kolejne bardzo popularne narzędzie, już bez licencji open source. Swoją popularność zawdzięcza między innymi minimalnemu wykorzystaniu zasobów sprzętowych. LoadRunner oferuje architekturę rozproszoną, a także pozwala na prace z różnymi protokołami.


Ponadto można wyróżnić znacznie więcej narzędzi, takich jak:

    • Grinder
    • WebLoad
    • Gatling
    • LoadComplete 
    • Tsung

Środowisko testów wydajnościowych

Przed rozpoczęciem testów wydajnościowych powinniśmy posiadać wiedzę na temat środowiska produkcyjnego. Umożliwi to nam odwzorowanie w odpowiedni sposób środowiska testowego, gdyż przeprowadzenie testów w dokładnym środowisku produkcyjnym może być niemożliwe. Różnice między środowiskami mogą znacząco wpłynąć na wyniki testów. Zidentyfikowanie dostępnego sprzętu, oprogramowania, konfiguracji sieci i narzędzi, pozwala zaprojektować test i wcześnie zidentyfikować wyzwania związane z wdrożeniem testów wydajnościowych.

Ponadto istotne jest, aby środowisko testowe było odizolowane, tak, aby podczas przeprowadzania testów mieć pewność, że na wyniki nie wpłynie ingerencja innych użytkowników systemu. Testy wydajnościowe generują znaczne obciążenie aplikacji/systemu, co przełoży się na uniemożliwienie dokończenia zadań rozpoczętych przez innych użytkowników.

Istotne jest również zapewnienie izolacji sieci, aby mieć pewność, że na wyniki testów wydajnościowych nie wpływa ograniczona przepustowość sieci. Dlatego zalecane jest, aby zadbać o zapewnienie maksymalnej przepustowości sieci wykorzystywanej w środowisku testowemu, izolując sieć testową od innych użytkowników. Środowisko produkcyjne zwykle współużytkują ze sobą sprzęt i użytkowników.

Środowisko może być również połączone siecią ze światem zewnętrznym, zaporą ogniowa lub maszynami wirtualnymi. Z tego powodu testy mogą wskazać błąd z przyczyn zewnętrznych niezwiązanych z działaniem systemu. Aby testy wydajnościowe były jak najbardziej zbliżone do realistycznych scenariuszy, powinniśmy mieć możliwość posiadania realistycznej ilości danych. W przeciwnym razie możemy przegapić niektóre problemy.

Najczęstsze problemy

Podczas przeprowadzania testów wydajnościowych można natknąć się na wiele problemów znalezionych przez testy. Do najbardziej powszechnych i chyba najłatwiejszych do rozwiązania są te związane ze zbyt długą odpowiedzią, bądź zbyt długim czasem ładowania.

Wystąpić mogą również problemy związane z wąskim gardłem (bottlenecking), o których wspominałem wyżej.

Słaba skalowalność (poor scalability) występuje, jeśli system nie jest w stanie obsłużyć żądanej liczby równoczesnych zadań. Może to powodować opóźnienie w działaniu systemu, jak również może doprowadzić do wystąpienia innych nieoczekiwanych zachowań.

Niewystarczające zasoby sprzętowe - testowanie wydajności, może ujawnić ograniczenia pamięci lub słabo wydajne procesory.

Podsumowanie

Jak widać przy robieniu testów wydajnościowych musisz zwrócić uwagę na kilka kluczowych elementów, aby miały one jakikolwiek sens. Mam nadzieję, że ten artykuł pomoże Ci przygotowywać się do tego adekwatnie.

<p>Loading...</p>