Samouczek dotyczący testowania wydajności

⚡ Inteligentne podsumowanie

Testowanie wydajności to proces testowania oprogramowania, który ocenia szybkość działania aplikacji, czas reakcji, stabilność, skalowalność i wykorzystanie zasobów przy określonych obciążeniach. Identyfikuje i eliminuje wąskie gardła przed wdrożeniem, zapewniając niezawodność w warunkach rzeczywistych.

  • Określ zakres na wczesnym etapie: Zanim zaprojektujesz jakiekolwiek testy wydajnościowe, określ środowisko testowe, kryteria akceptacji i kluczowe scenariusze.
  • 🔄 Obejmuje wszystkie typy testów: Zastosuj testy obciążenia, naprężenia, wytrzymałości, skoków, objętości i skalowalności w celu oceny różnych trybów awarii.
  • 📊 Monitoruj kluczowe wskaźniki: Tracwykorzystanie procesora, zużycie pamięci, czas reakcji, przepustowość i wskaźniki błędów podczas każdego wykonania testu.
  • ⚠️ Systematycznie diagnozuj wąskie gardła: Zbadaj wykorzystanie procesora, pamięci, sieci i dysku, aby ustalić przyczynę pogorszenia wydajności.
  • 🔁 Iteruj i testuj ponownie: Analizuj wyniki, dostosowuj konfiguracje i przeprowadzaj ponowne testy, aż wydajność spełni zdefiniowane kryteria akceptacji.
  • 🤖 Wykorzystaj analizę opartą na sztucznej inteligencji: Wykorzystaj sztuczną inteligencję do predykcyjnego wykrywania anomalii, automatycznej analizy przyczyn źródłowych i inteligentnego przydzielania zasobów podczas testów.

Samouczek dotyczący testowania wydajności

Co to jest testowanie wydajności?

Test wydajności to proces testowania oprogramowania stosowany do testowania szybkości, czasu reakcji, stabilności, niezawodności, skalowalności i wykorzystania zasobów aplikacji przy określonym obciążeniu. Głównym celem testów wydajnościowych jest identyfikacja i eliminacja wąskich gardeł wydajnościowych w aplikacji. Jest to podzbiór inżynierii wydajności i jest również znany jako „Testowanie wydajności”.

Testowanie wydajnościowe ma na celu sprawdzenie:

  • Prędkość – Określa, czy aplikacja reaguje szybko
  • Skalowalność – Określa maksymalne obciążenie użytkownika, jakie może obsłużyć aplikacja programowa
  • Stabilność – Określa, czy aplikacja jest stabilna przy zmiennych obciążeniach
Najszczęściej wybierane
PFLB

PFLB koncentruje się na precyzyjnych testach wydajności, które pomagają systemom zachować stabilność pod nieprzewidywalnymi obciążeniami. Usługi PFLB obejmują testy obciążeniowe, testy skoków obciążenia oraz pomiary opóźnień, ze szczególnym naciskiem na identyfikację spadku wydajności, zanim wpłynie on negatywnie na użytkowników końcowych.

Odwiedź PFLB

Dlaczego testowanie wydajności jest ważne?

Funkcje i funkcjonalność obsługiwane przez system oprogramowania to nie jedyny problem. Wydajność aplikacji, taka jak czas reakcji, niezawodność, wykorzystanie zasobów i skalowalność, również ma znaczenie. Celem testów wydajnościowych nie jest wyszukiwanie błędów, lecz eliminowanie wąskich gardeł wydajnościowych.

Testowanie wydajności ma na celu dostarczenie interesariuszom informacji o ich aplikacji, takich jak szybkość, stabilność i skalowalność. Co ważniejsze, testowanie wydajności pozwala wykryć elementy wymagające poprawy przed wprowadzeniem produktu na rynek. Bez testowania wydajności oprogramowanie prawdopodobnie będzie narażone na problemy, takie jak powolne działanie przy jednoczesnym korzystaniu z niego przez wielu użytkowników, niespójności w różnych systemach operacyjnych oraz niska użyteczność.

Dlaczego testowanie wydajności jest ważne

Testowanie wydajności określa, czy oprogramowanie spełnia wymagania dotyczące szybkości, skalowalności i stabilności przy przewidywanym obciążeniu. Aplikacje wprowadzane na rynek z niskimi wskaźnikami wydajności z powodu braku lub słabego testowania wydajności prawdopodobnie zyskają złą reputację i nie osiągną oczekiwanych celów sprzedażowych.

Tak więc, aplikacje o znaczeniu krytycznym jak programy wystrzeliwania w przestrzeń kosmiczną lub sprzęt medyczny ratujący życie, należy przetestować pod kątem działania, aby zapewnić, że będą działać przez długi czas bez odchyleń.

Według Dunn & Bradstreet, 59% firm z listy Fortune 500 doświadcza szacunkowo 1.6 godziny przestoju tygodniowo. Biorąc pod uwagę, że przeciętna firma z listy Fortune 500 zatrudniająca co najmniej 10,000 56 pracowników płaci 896,000 USD za godzinę, część kosztów pracy przestoju dla takiej organizacji wyniosłaby 46 XNUMX USD tygodniowo, co przekłada się na ponad XNUMX milionów USD rocznie.

Tylko 5-minutowa przerwa of GoogleSzacuje się, że domena .com (19 sierpnia 13 r.) będzie kosztować giganta wyszukiwania tyle samo, $ 545,000.

Szacuje się, że firmy straciły wartość sprzedaży 1100 USD za sekundę z powodu niedawnego Amazon Awaria usług internetowych.

Dlatego ważne jest testowanie wydajności. Aby pomóc Ci w tym procesie, sprawdź tę listę narzędzia do testowania wydajności.

Rodzaje testów wydajności

W testowaniu oprogramowania wyróżnia się sześć głównych typów testów wydajnościowych, które zostały wyjaśnione poniżej.

  • Testowanie obciążenia – sprawdza zdolność aplikacji do działania przy przewidywanym obciążeniu użytkownika. Celem jest identyfikacja wąskich gardeł wydajnościowych przed uruchomieniem aplikacji.
  • Test naprężeń - polega na testowaniu aplikacji pod ekstremalnym obciążeniem, aby sprawdzić, jak radzi sobie z dużym ruchem lub przetwarzaniem danych. Celem jest zidentyfikowanie punktu krytycznego aplikacji.
  • Testy wytrzymałościowe – Ma to na celu zapewnienie, że oprogramowanie będzie w stanie obsłużyć oczekiwane obciążenie przez długi czas. Pomaga wykryć problemy, takie jak wycieki pamięci i wyczerpywanie się zasobów, które pojawiają się tylko podczas długotrwałego działania.
  • Testowanie skoków – Testuje reakcję oprogramowania na nagłe, duże skoki obciążenia generowane przez użytkowników. W przeciwieństwie do testów obciążeniowych, testy skokowe koncentrują się na tym, jak system radzi sobie z nagłymi, krótkotrwałymi skokami obciążenia i jak się po nich odzyskuje.
  • Badanie objętości – Polega na wypełnieniu bazy danych dużą ilością danych i monitorowaniu zachowania całego systemu oprogramowania. Celem jest sprawdzenie wydajności aplikacji przy zmiennej objętości bazy danych.
  • Testowanie skalowalności – Określa skuteczność aplikacji w „skalowaniu” w celu obsługi rosnącego obciążenia użytkowników. Pomaga zaplanować rozbudowę systemu oprogramowania.

Typowe problemy z wydajnością

Większość problemów z wydajnością koncentruje się wokół szybkości, czasu reakcji, czasu ładowania i słabej skalowalności. Szybkość jest często jednym z najważniejszych atrybutów aplikacji. Wolno działająca aplikacja traci potencjalnych użytkowników. Testowanie wydajności zapewnia, że ​​aplikacja działa wystarczająco szybko, aby utrzymać uwagę i zainteresowanie użytkownika. Poniżej przedstawiono typowe problemy z wydajnością, w których szybkość jest czynnikiem powtarzającym się:

  • Długi czas ładowania – Czas ładowania to zazwyczaj czas potrzebny na uruchomienie aplikacji. Powinien on być ograniczony do minimum. Chociaż niektórych aplikacji nie da się załadować w czasie krótszym niż minuta, czas ładowania powinien być, w miarę możliwości, krótszy niż kilka sekund.
  • Słaby czas reakcji – Czas reakcji to czas od momentu wprowadzenia danych przez użytkownika do aplikacji do momentu wygenerowania przez nią odpowiedzi na te dane. Zazwyczaj powinien on być bardzo krótki. Jeśli użytkownik musi czekać zbyt długo, traci zainteresowanie.
  • Słaba skalowalność – Oprogramowanie ma słabą skalowalność, gdy nie jest w stanie obsłużyć oczekiwanej liczby użytkowników lub nie obsługuje wystarczająco szerokiego grona użytkowników. Testowanie obciążenia należy to zrobić, aby mieć pewność, że aplikacja obsłuży przewidywaną liczbę użytkowników.
  • Wąskie gardła – Wąskie gardła to przeszkody w systemie, które obniżają jego ogólną wydajność. Wąskie gardło występuje, gdy błędy kodowania lub problemy sprzętowe powodują spadek przepustowości przy określonych obciążeniach. Wąskie gardło jest często spowodowane przez jeden wadliwy fragment kodu. Kluczem do rozwiązania problemu wąskiego gardła jest znalezienie fragmentu kodu powodującego spowolnienie i próba jego rozwiązania w tym miejscu. Wąskie gardło zazwyczaj eliminuje się poprzez naprawę źle działających procesów lub dodanie dodatkowego sprzętu. Niektóre typowe wąskie gardła wydajności należą:
    • Zużycie procesora
    • Wykorzystanie pamięci
    • Wykorzystanie sieci
    • OperaOgraniczenia systemu
    • Użycie dysku

Jak przeprowadzić testy wydajności

Metodologia przyjęta do testów wydajności może się znacznie różnić, ale cel testów wydajności pozostaje ten sam. Może pomóc wykazać, że system oprogramowania spełnia określone wcześniej kryteria wydajności. Może też pomóc w porównaniu wydajności dwóch systemów oprogramowania. Może także pomóc w zidentyfikowaniu części systemu oprogramowania, które pogarszają jego wydajność.

Poniżej przedstawiono ogólny proces przeprowadzania testów wydajnościowych.

Proces testowania wydajności
Proces testowania wydajności

Krok 1) Zidentyfikuj swoje środowisko testowe

Poznaj swoje fizyczne środowisko testowe, środowisko produkcyjne oraz dostępne narzędzia testowe. Przed rozpoczęciem procesu testowania zapoznaj się ze szczegółami konfiguracji sprzętu, oprogramowania i sieci używanych podczas testowania. Pomoże to testerom tworzyć bardziej wydajne testy. Pomoże to również zidentyfikować potencjalne wyzwania, z którymi testerzy mogą się spotkać podczas procedur testowania wydajności.

Krok 2) Zidentyfikuj kryteria akceptacji wydajności

Obejmuje to cele i ograniczenia dotyczące przepustowości, czasów reakcji i alokacji zasobów. Konieczne jest również określenie kryteriów sukcesu projektu wykraczających poza te cele i ograniczenia. Testerzy powinni mieć możliwość ustalania kryteriów i celów wydajnościowych, ponieważ specyfikacje projektu często nie obejmują wystarczająco szerokiego zakresu testów wydajnościowych. Czasami może ich w ogóle nie być. Jeśli to możliwe, znalezienie podobnej aplikacji do porównania jest dobrym sposobem na wyznaczenie celów wydajnościowych.

Krok 3) Zaplanuj i zaprojektuj testy wydajności

Określ, jak prawdopodobnie będzie się różnić wykorzystanie wśród użytkowników końcowych i zidentyfikuj kluczowe scenariusze do przetestowania dla wszystkich możliwych przypadków użycia. Konieczne jest symulowanie różnych użytkowników końcowych, zaplanowanie danych do testów wydajności i określenie, jakie metryki będą gromadzone.

Krok 4) Skonfiguruj środowisko testowe

Przygotuj środowisko testowe przed rozpoczęciem testów. Zadbaj również o odpowiednie narzędzia i zasoby. Odwzoruj środowisko produkcyjne jak najwierniej, aby zapewnić realistyczne i praktyczne wyniki testów.

Krok 5) Zaimplementuj projekt testu

Utwórz testy wydajnościowe zgodnie z projektem testu.

Krok 6) Uruchom testy

Wykonuj i monitoruj testy.

Krok 7) Analiza, dostrojenie i ponowne przetestowanie

Konsoliduj, analizuj i udostępniaj wyniki testów. Następnie dostosuj i przetestuj ponownie, aby sprawdzić, czy nastąpiła poprawa, czy spadek wydajności. Ponieważ poprawa zazwyczaj maleje z każdym kolejnym testem, przerwij, gdy wąskie gardło jest spowodowane przez procesor. Wtedy może być konieczne rozważenie zwiększenia mocy procesora.

Metryki testowania wydajności: Monitorowane parametry

Do podstawowych parametrów monitorowanych podczas testów wydajnościowych należą:

Metryki i parametry testów wydajnościowych

  • Użycie procesora – ilość czasu, jaką procesor spędza na wykonywaniu wątków, które nie są bezczynne.
  • Wykorzystanie pamięci – ilość pamięci fizycznej dostępnej dla procesów na komputerze.
  • Czas dysku – ilość czasu, przez jaki dysk jest zajęty wykonywaniem żądania odczytu lub zapisu.
  • Pasmo - pokazuje liczbę bitów na sekundę wykorzystywanych przez interfejs sieciowy.
  • Prywatne bajty – Liczba bajtów przydzielonych przez proces, których nie można współdzielić między innymi procesami. Służą one do pomiaru wycieków pamięci i jej wykorzystania.
  • Pamięć zaangażowana – ilość użytej pamięci wirtualnej.
  • Strony pamięci/sekundę – Liczba stron zapisanych na dysku lub odczytanych z dysku w celu rozwiązania twardych błędów stron. Twarde błędy stron występują, gdy kod spoza bieżącego zestawu roboczego jest wywoływany z innego miejsca i pobierany z dysku.
  • Błędy stron/sekundę – Całkowita szybkość przetwarzania stron błędów przez procesor. Dzieje się tak, gdy proces wymaga kodu spoza swojego zestawu roboczego.
  • Przerwania procesora na sekundę – średnia liczba przerwań sprzętowych, które procesor otrzymuje i przetwarza w ciągu sekundy.
  • Długość kolejki dyskowej – średnia liczba żądań odczytu i zapisu w kolejce dla wybranego dysku w trakcie przedziału próbkowania.
  • Długość sieciowej kolejki wyjściowej – Długość kolejki pakietów wyjściowych w pakietach. Wartość powyżej dwóch oznacza opóźnienie i konieczność wyeliminowania wąskiego gardła.
  • Łączna liczba bajtów sieciowych na sekundę – szybkość, z jaką bajty są wysyłane i odbierane w interfejsie, łącznie ze znakami ramkowymi.
  • Czas odpowiedzi - czas od momentu wprowadzenia żądania przez użytkownika do momentu otrzymania pierwszego znaku odpowiedzi.
  • Wydajność - Szybkość, z jaką komputer lub sieć otrzymuje żądania na sekundę.
  • Ilość puli połączeń – liczba żądań użytkowników spełnianych przez połączenia w puli. Im więcej żądań zostanie zrealizowanych przez połączenia w puli, tym lepsza będzie wydajność.
  • Maksymalna liczba aktywnych sesji – maksymalna liczba sesji, które mogą być aktywne jednocześnie.
  • Współczynniki trafień – to dotyczy liczby SQL polecenia, które są obsługiwane przez dane buforowane zamiast kosztownych operacji wejścia/wyjścia. To dobre miejsce na początek rozwiązywania problemów z wąskimi gardłami.
  • Trafienia na sekundę – liczba wyświetleń serwera WWW w każdej sekundzie testu obciążeniowego.
  • Segment wycofania – ilość danych, którą można wycofać w dowolnym momencie.
  • Blokady baz danych – blokowanie tabel i baz danych musi być monitorowane i starannie dostrojone.
  • Najlepsze oczekiwania – monitorowane w celu ustalenia, jaki czas oczekiwania można skrócić, jeśli chodzi o szybkość pobierania danych z pamięci.
  • Liczba wątków – Stan aplikacji można mierzyć liczbą wątków, które są uruchomione i aktualnie aktywne.
  • Zbieranie śmieci - Polega na zwrocie nieużywanej pamięci do systemu. Należy monitorować wydajność procesu zbierania śmieci.

Przykładowe przypadki testowe testów wydajnościowych

Poniżej znajdują się przykładowe przypadki testowe testów wydajnościowych:

  • Przypadek testowy 01: Sprawdź, czy czas reakcji nie jest dłuższy niż 4 sekundy, gdy na stronie internetowej jednocześnie przebywa 1000 użytkowników.
  • Przypadek testowy 02: Sprawdź, czy czas reakcji aplikacji pod obciążeniem mieści się w akceptowalnym zakresie, gdy połączenie sieciowe jest wolne.
  • Przypadek testowy 03: Sprawdź maksymalną liczbę użytkowników, jaką aplikacja może obsłużyć, zanim ulegnie awarii.
  • Przypadek testowy 04: Sprawdź czas wykonania bazy danych w przypadku jednoczesnego odczytu/zapisu 500 rekordów.
  • Przypadek testowy 05: Sprawdź wykorzystanie procesora i pamięci przez aplikację i serwer bazy danych w warunkach szczytowego obciążenia.
  • Przypadek testowy 06: Sprawdź czas reakcji aplikacji w warunkach niskiego, normalnego, umiarkowanego i dużego obciążenia.

Podczas faktycznego wykonywania testu wydajności niejasne terminy, takie jak dopuszczalny zakres, duże obciążenie itp., są zastępowane konkretnymi liczbami. Inżynierowie wydajności ustalają te liczby zgodnie z wymaganiami biznesowymi i technicznym krajobrazem aplikacji.

Najlepsze praktyki testowania wydajności

Przestrzeganie sprawdzonych, najlepszych praktyk gwarantuje, że testy wydajnościowe przynoszą wiarygodne wyniki. Te wytyczne pomagają zespołom unikać typowych pułapek.

  • Odzwierciedla środowisko produkcyjne – Skonfiguruj konfigurację testu tak, aby jak najwierniej odzwierciedlała warunki produkcyjne. Różnice w wersjach sprzętu lub oprogramowania mogą dawać mylące wyniki.
  • Zaprojektuj realistyczne scenariusze testowe – Twórz przypadki testowe symulujące rzeczywiste zachowania użytkowników, w tym czasy reakcji i kombinacje współbieżnych transakcji.
  • Użyj metryk opartych na percentylach – Polegaj na 90. i 95. percentylu czasu reakcji, a nie tylko na średnich. Percentyle ujawniają opóźnienia końcowe, które mogą być ukryte w średnich.
  • Testuj wcześnie i regularnie – Zintegruj testowanie wydajności z procesem CI/CD, zamiast traktować je jako działanie na ostatnim etapie.
  • Dokumentowanie i wyniki bazowe – Rejestruj wyniki każdego testu. Porównywanie nowych wyników z danymi bazowymi ułatwia wykrywanie regresji w kolejnych wersjach.

Jak AI zmienia testowanie wydajności

Sztuczna inteligencja to reshaping Testowanie wydajności poprzez automatyzację złożonych zadań analitycznych i umożliwienie predykcji. Narzędzia oparte na sztucznej inteligencji analizują dane historyczne, wykrywają wzorce i dostarczają praktycznych rekomendacji bez konieczności ingerencji człowieka na każdym kroku.

  • Predykcyjne wykrywanie anomalii – Algorytmy sztucznej inteligencji analizują wskaźniki wydajności w czasie rzeczywistym podczas testów obciążeniowych i sygnalizują odchylenia zanim przerodzą się w krytyczne awarie.
  • Automatyczna analiza przyczyn źródłowych – Narzędzia oparte na sztucznej inteligencji zestawiają dane w rozproszonych systemach, aby dokładnie wskazać komponenty powodujące spadek wydajności.
  • Inteligentna optymalizacja testów – Modele uczenia maszynowego identyfikują powtarzające się scenariusze testowe i sugerują optymalne konfiguracje, skracając czas wykonywania testów przy jednoczesnym zachowaniu zasięgu.
  • Skrypty testowe samonaprawiające się – Sztuczna inteligencja dostosowuje skrypty testowe do zmian w interfejsach aplikacji, zmniejszając obciążenie związane z konserwacją zestawów testów wydajnościowych.

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 testów zależy od wielu czynników, takich jak obsługiwane protokoły, koszt licencji, wymagania sprzętowe i obsługa platformy. Poniżej znajduje się lista popularnych narzędzi testowych.

  • HP LoadRunner - to jedno z najpopularniejszych narzędzi do testowania wydajności na rynku. Umożliwia ono symulację setek tysięcy użytkowników, poddając aplikacje rzeczywistym obciążeniom, aby określić ich zachowanie przy przewidywanych obciążeniach. LoadRunner zawiera wirtualny generator użytkowników, który symuluje działania prawdziwych użytkowników.
  • JMeter - Jedno z wiodących narzędzi open source do testowania obciążenia serwerów webowych i aplikacji. Obsługuje wiele protokołów i zapewnia rozbudowane możliwości raportowania.

FAQ

Testy wydajnościowe przeprowadza się wyłącznie dla systemów opartych na architekturze klient-serwer. Aplikacje, które nie korzystają z architektury klient-serwer, takie jak samodzielne kalkulatory stacjonarne, nie wymagają testowania wydajności.

Testowanie wydajności koncentruje się na testowaniu i raportowaniu bieżącej wydajności aplikacji. Inżynieria wydajności idzie o krok dalej, łącząc testowanie z dostrajaniem, aby zoptymalizować ogólne wrażenia użytkownika i wydajność systemu.

Testy obciążeniowe oceniają zachowanie systemu przy oczekiwanym obciążeniu użytkownika w celu znalezienia wąskich gardeł. Testy obciążeniowe obciążają aplikację poza jej normalną wydajność, aby zidentyfikować jej punkt krytyczny i obserwować zachowanie podczas odzyskiwania.

Najważniejszymi parametrami są czas reakcji, przepustowość, współczynnik błędów, wykorzystanie procesora i wykorzystanie pamięci. Tracking Wskaźniki te pomagają zidentyfikować wąskie gardła i sprawdzić, czy aplikacja spełnia kryteria wydajnościowe.

Testowanie wydajności powinno rozpocząć się wcześnie i być prowadzone w sposób ciągły. Zintegrowanie go z procesem CI/CD pozwala zespołom wykrywać regresje w każdej kompilacji, zamiast odkrywać problemy dopiero przed wydaniem.

Sztuczna inteligencja automatyzuje wykrywanie anomalii, analizę przyczyn źródłowych i optymalizację testów. Analizuje dane historyczne, aby przewidywać wąskie gardła i automatycznie dostosowuje skrypty testowe w przypadku zmian w interfejsach aplikacji.

Nie. Sztuczna inteligencja zwiększa wydajność poprzez automatyzację powtarzalnych zadań analizy i wykrywania, jednak ludzka wiedza i doświadczenie są nadal niezbędne do projektowania realistycznych scenariuszy testowych, interpretowania kontekstu biznesowego i podejmowania strategicznych decyzji optymalizacyjnych.

Testowanie w chmurze oferuje skalowalność na żądanie, rozproszone generowanie obciążenia z wielu regionów i niższe koszty infrastruktury. Testowanie lokalne zapewnia większą kontrolę nad środowiskiem testowym, ale wymaga inwestycji w dedykowany sprzęt.

Podsumuj ten post następująco: