Testy wydajnościowe

sie 20, 2021

Testy wydajnościowe

W tym materiale chciałbym przybliżyć Wam tematykę testów wydajnościowych. Testy wydajnościowe te są dość specyficznym, ale jednocześnie popularnym i bardzo ważnym rodzajem testów w przekroju całego procesu testowego niemal każdego oprogramowania. Testowanie wydajności to proces testowania oprogramowania stosowany do weryfikacji szybkości, czasu odpowiedzi, stabilności, niezawodności, skalowalności i wykorzystania zasobów aplikacji pod określonym obciążeniem. Firmy przeprowadzą testy wydajności w celu zidentyfikowania wąskich gardeł związanych z wydajnością oprogramowania. Testy wydajnościowe to forma weryfikacji oprogramowania, która koncentruje się na tym, jak system, działa pod określonym obciążeniem. Nie chodzi stricte o znajdowanie błędów, defektów oprogramowania. Testy wydajnościowe należą do grupy testów niefunkcjonalnych. Warto również już na samym początku wspomnieć, że testów wydajnościowych nie przeprowadzimy ‘manualnie’, musimy skorzystać z dedykowanego do tego celu oprogramowania, technicznych kompetencji ludzkich, czy zagadnień z dziedziny automatyzacji testów. Testy wydajnościowe wymagają od specjalistów konkretnych, technicznych umiejętności i sporego doświadczenia, ale do tego jeszcze dojedziemy!



Rodzaje testów wydajności


Testy wydajnościowe dzielimy na kila rodzajów, które można zastosować podczas weryfikacji oprogramowania. Główne z nich to:


• Load testing (Testy obciążeniowe) — weryfikują zdolność aplikacji do działania przy przewidywanym, standardowym obciążeniu ze strony użytkowników. Celem jest zidentyfikowanie wąskich gardeł związanych z wydajnością
Stress testing (Testy przeciążeniowe) — weryfikują działanie aplikacji przy ekstremalnych obciążeniach, (na granicy wydajności i poza nią), aby zobaczyć, jak aplikacja radzi sobie z dużym ruchem lub przetwarzaniem danych. Celem jest zidentyfikowanie punktu krytycznego aplikacji, czyli „punktu przeciążenia”
• Endurance testing (Testy wytrzymałościowe) – są wykonywane, aby upewnić się, że oprogramowanie poradzi sobie z oczekiwanym obciążeniem przez długi czas
• Spike testing – testy reakcji oprogramowania na nagłe, duże skoki obciążenia generowane przez użytkowników
Scalability testing (Testowanie skalowalności) — Testowanie skalowalności służy do określenia, czy oprogramowanie skutecznie obsługuje rosnące obciążenia. Można to określić, stopniowo zwiększając obciążenie użytkownika lub ilość danych, jednocześnie monitorując wydajność systemu. Ponadto obciążenie może pozostać na tym samym poziomie podczas zmiany zasobów, takich jak procesory i pamięć.

Najczęstsze problemy, które mogą wykryć testy wydajnościowe


Problemy z szybkością działania aplikacji (powolne ładowanie / otwieranie dostępnych zasobów czy usług, długie czasy odpowiedzi na żądania przesłane przez użytkowników)
„Wąskie gardło” występuje, gdy przepływ danych zostanie przerwany lub zatrzymany, ponieważ nie ma wystarczającej pojemności, aby obsłużyć obciążenie. Niektóre typowe wąskie gardła wydajności to:
Zużycie procesora
– Wykorzystanie pamięci
– Wykorzystanie sieci
– Ograniczenia systemu operacyjnego
– Użycie dysku


Słaba skalowalność — jeśli oprogramowanie nie może obsłużyć żądanej liczby jednoczesnych zadań, wyniki mogą być opóźnione, mogą uwidaczniać się błędy lub może wystąpić inne nieoczekiwane zachowanie aplikacji
Problemy z konfiguracją oprogramowania — często ustawienia nie są skonfigurowane na wystarczającym poziomie, aby obsłużyć wymagane obciążenie
Niewystarczające zasoby sprzętowe — testy wydajności mogą ujawnić problemy sprzętowe takie jak: ograniczenia pamięci fizycznej czy mało wydajne procesory

Proces testowania wydajności


Metodologie testowania wydajności mogą się różnić w zależności od koncepcji, planu oraz potrzeb projektowych. Niemniej jednak poniżej postaram się nakreślić standardowy proces, który możecie zastosować w swoim projektach:

Testy wydajnościowe - proces testowania


1. Zidentyfikuj, określ środowisko testowe — poznaj środowisko testowe, środowisko produkcyjne i dostępne narzędzia testowe. Zapoznaj się ze szczegółami konfiguracji sprzętu, oprogramowania i sieci używanych podczas testowania przed rozpoczęciem procesu testowania. Na tym etapie, tak zdobyte informacje pomogą zidentyfikować możliwe wyzwania, które testerzy mogą napotkać podczas testów wydajnościowych

2. Zidentyfikuj kryteria akceptacji wydajności — obejmuje to cele i ograniczenia dotyczące przepustowości, czasów odpowiedzi i alokacji zasobów. Niezbędne jest również określenie kryteriów zakończenia testów. Testerzy powinni mieć uprawnienia do ustalania kryteriów wydajności i celów, ponieważ często specyfikacje projektu nie będą zawierać wystarczająco szerokiej gamy wskaźników wydajności – często zdarza się, że nie ma ich wcale.

3. Planuj i projektuj testy wydajności — zdefiniuj, w jaki sposób użytkownicy końcowy będą korzystać z aplikacji i utwórz scenariusze testowe. Konieczna jest symulacja pracy wielu użytkowników, stworzenie danych testowych (w tym np. użytkowników) i określenie, jakie metryki będą gromadzone

4. Konfigurowanie środowiska testowego — Przygotuj środowisko pod testy wydajnościowe. Ważne, by w trakcie testów wydajnościowych – środowisko testowy było wyizolowane tylko do tego celu. Zorganizuj również narzędzia i inne zasoby.

5. Implementuj testy — przygotuj skrypty testów wydajnościowych zgodnie z wypracowanymi wcześniej założeniami

6. Uruchom testy — uruchamianie, wykonywanie testów

7. Zbieraj wyniki testów, udostępniaj raporty, które będą podstawą do podejmowania świadomych decyzji o przyszłości aplikacji

Metryki testów wydajnościowych


Aby poprawnie ocenić stan wydajności aplikacji, należy kierować się ogólnie przyjętymi metrykami oraz prowadzić szczegółowe pomiary. Na ich podstawie możemy określić aktualny stan, a także śledzić, weryfikować i oceniać wprowadzone poprawki, które mają usprawnić wydajność.
Pomiary — zbierane dane, takie jak sekundy potrzebne do odpowiedzi na żądanie.
Metryki — obliczenie wykorzystujące pomiary do określenia jakości wyników, takie jak średni czas odpowiedzi (całkowity czas odpowiedzi/żądania).
Istnieje wiele sposobów mierzenia szybkości, skalowalności i stabilności, ale nie można oczekiwać, że każda runda testów wydajności będzie wykorzystywać je wszystkie. Wśród wskaźników używanych w testach wydajności często używane są następujące dane:

Czas odpowiedzi
Całkowity czas na wysłanie prośby i otrzymanie odpowiedzi


Czas oczekiwania
Znany również jako średnie opóźnienie daje informacje, ile czasu zajmuje otrzymanie pierwszego bajtu po wysłaniu żądania


Średni czas ładowania
Średni czas potrzebny na dostarczenie żądania, jest głównym wskaźnikiem jakości z perspektywy użytkownika


Szczytowy czas odpowiedzi
Jest to miara najdłuższego czasu potrzebnego na spełnienie żądania. Szczytowy czas odpowiedzi, który jest znacznie dłuższy niż przeciętny, może wskazywać na anomalię, która spowoduje problemy


Wskaźnik błędów
Odsetek żądań zakończonych błędami w porównaniu do wszystkich żądań. Błędy te zwykle występują, gdy obciążenie przekracza możliwości aplikacji


Równocześni użytkownicy
To najczęstsza miara obciążenia — liczb aktywnie pracujących użytkowników w dowolnym momencie


Żądania na sekundę
Ile żądań jest obsługiwanych na zdefiniowaną jednostkę czasu


Transakcje zakończone/nieudane
Miara łącznej liczby udanych lub nieudanych żądań


Zużycie procesora
Ile czasu procesor potrzebuje na przetworzenie żądań


Wykorzystanie pamięci
Ile pamięci jest potrzebne do przetworzenia żądania



Narzędzia do testowania wydajności

Testy wydajności - narzędzia


Na rynku dostępnych jest wiele różnych narzędzi do testowania wydajności. Wybór narzędzia do testowania będzie zależeć od wielu czynników, takich jak: typ aplikacji, koszt licencji, wymagania sprzętowe, obsługa platformy itp. Poniżej wypisałem 3 moim zdaniem najlepsze narzędzia dostępne obecnie na rynku:


1. Apache JMeter
JMeter to popularne narzędzie do testowania wydajności typu open source, które jest przeznaczone do testowania obciążenia i wydajności. Może być używany do analizowania i mierzenia wydajności różnego typu oprogramowania, obejmującego usługi, w tym sieci i serwery.
JMeter to aplikacja platformy Java, którą można zintegrować z planem testów. Umożliwia również tworzenie planu testów funkcjonalnych oprócz planu testów wydajnościowych . Niektóre z kluczowych cech są następujące:
• Obsługuje wiele źródeł obciążenia, którymi można zarządzać za pomocą jednego kontrolera
• Nie wymaga zaawansowanej infrastruktury do prostych testów wydajnościowych
• Wymaga mniejszych nakładów pracy na tworzenie skryptów w porównaniu z innymi narzędziami do testowania wydajności API, ponieważ ma przyjazny dla użytkownika interfejs
• Obsługuje wszystkie aplikacje oparte na Javie
• Łatwa analiza kluczowych statystyk opartych na obciążeniu i monitorach wykorzystania zasobów poprzez prezentowanie prostych wykresów, statystyk i zestawień
JMeter obsługuje między innymi następujące protokoły – HTTPS, HTTP, XML, protokoły oparte na Javie, SOAP i FTP.



2. Gatling
Gatling to stosunkowo nowe narzędzie do testowania obciążenia typu open source, które powstało w 2012 roku. Umożliwia przeprowadzanie symulacji obciążenia równoczesnych użytkowników względem systemu za pośrednictwem protokołów JMS, HTTP/S lub JDBC. Możesz użyć tego narzędzia do symulacji użytkowników aplikacji w celu zidentyfikowania wąskich gardeł i ich optymalizacji.
Jest kompatybilny ze wszystkimi systemami operacyjnymi, ponieważ działa w oparciu o Javę. Gatling ma dwa pliki wykonywalne: jeden służy do rejestrowania testów, a drugi do ich wykonywania. Wszystkie testy są rejestrowane w Scali. Po zakończeniu wykonania generowany jest rozbudowany i graficzny raport z testu.
Oto kluczowe cechy Gatlinga:
• Obsługuje dowolny system operacyjny lub przeglądarkę
• Językiem skryptowym jest Scala
• Może wykonywać testy w wielu chmurach testowych
• Możliwość skalowania przez Taurusa za pomocą BlazeMeter lub flood.io
Gatling obsługuje następujące protokoły : HTTP/S, JMS i JDBC.



3. LoadView
LoadView to również bardzo popularne narzędzie do testów wydajnościowych. Różni się od większości innych narzędzi do testowania obciążenia tym, że testowanie przeprowadza się w prawdziwych przeglądarkach. Rezultatem jest ścisła emulacja prawdziwych użytkowników i bardzo dokładne dane. Jest w pełni oparty na chmurze i można go łatwo wdrożyć w ciągu kilku minut. Pozwala tworzyć wieloetapowe skrypty symulujące interakcję użytkownika z aplikacją lub stroną internetową.
Oto niektóre z kluczowych funkcji LoadView:
• Obsługuje zaawansowane funkcje testowania obciążenia, takie jak globalna infrastruktura oparta na chmurze, skrypty typu „wskaż i kliknij” oraz testowanie w rzeczywistej przeglądarce
• Umożliwia błyskawiczne i łatwe tworzenie skryptów testowych bez konieczności kodowania
• Obsługuje bogate aplikacje internetowe, w tym między innymi Java, Flash, HTML5, Ruby, Silverlight i PHMP
• Kilkanaście globalnych lokalizacji Cloud obsługiwanych przez Google Cloud Platform i Amazon Web Services
• Zgodność z dziesiątkami urządzeń stacjonarnych i mobilnych oraz przeglądarek
• Łatwe udostępnianie wskaźników wydajności i raportów
• Identyfikuje wąskie gardła i wspiera skalowalność

Autor: Tomasz Stelmach

Pozostałe:

Typy testów

Testowanie oprogramowania to bardzo rozległy obszar branży IT. Testować aplikacje możemy na wiele sposobów, a same testy mogą mieć różne cele. I to właśnie wspomniane cele testowania, definiują typy testów, jakimi możemy poddać oprogramowanie. Jeśli celem testów jest...

Agile i SCRUM, czyli co?

Agile to ostatnimi czasy bardzo popularny termin. Jest odmieniamy przez wszystkie przypadki. Obecnie zdecydowana większość zespołów developerskich korzysta z Agile w swojej codziennej pracy. O „Agile” i „Zwinnym” podejściu do prowadzenia projektów słyszeli już chyba...

Raport z testów – must have!

Dzisiaj napiszę kilka słów o niezbędnym elemencie w każdym procesie testowym - mowa oczywiście o tytułowym – Raporcie z Testów. Na początek, krótka regułka określająca, czym tak naprawdę jest Raport z Testów: O jakich czynnościach testowych traktuje powyższa...

Testy End to End

W tym materiale postaram się przybliżyć Wam szczególny rodzaj testów, jakim niewątpliwie są testy End To End. Zapewne, jeśli jesteście testerami, czy tez osobami należącymi do zespołów zapewniania jakości, to nieraz słyszeliście termin „End-to-End”, czy...

Jak napisać Plan Testów?

Jeśli jesteś testerem oprogramowania, bądź pracujesz w działach zapewniania jakości oprogramowania, to być może zetknąłeś się już z dokumentem o opisowej nazwie „Plan Testów”. Tego typu dokumentację tworzy się zarówno w dużych, jak i małych firmach, formalnych, jak...