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!
Jeśli jesteś zainteresowany usługami testowania wydajności, to zapraszamy do zapoznania sie z nasza ofertą -> Testowanie wydajnościowe
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:
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
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
0 komentarzy