Samouczek dotyczący testowania wydajności

Testowanie obciążenia

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ści koncentruje się na sprawdzaniu oprogramowania

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

Dlaczego testy wydajnościowe?

Funkcje i funkcjonalność obsługiwane przez system oprogramowania nie są jedynym problemem. Wydajność aplikacji, na przykład czas reakcji, niezawodność, wykorzystanie zasobów i skalowalność, mają znaczenie. Celem testów wydajnościowych nie jest znalezienie błędów, ale wyeliminowanie wąskich gardeł wydajności.

Testowanie wydajności jest przeprowadzane w celu dostarczenia interesariuszom informacji o ich aplikacji w zakresie szybkości, stabilności i skalowalności. Co ważniejsze, testowanie wydajności ujawnia, co należy poprawić przed wprowadzeniem produktu na rynek. Bez testowania wydajności oprogramowanie prawdopodobnie będzie cierpieć z powodu takich problemów, jak: wolne działanie, gdy kilku użytkowników korzysta z niego jednocześnie, niespójności w różnych systemach operacyjnych i słaba użyteczność.

Test wydajności

Testy wydajności pozwolą określić, czy ich oprogramowanie spełnia wymagania dotyczące szybkości, skalowalności i stabilności przy oczekiwanych obciążeniach. Aplikacje wysyłane na rynek ze słabymi wskaźnikami wydajności z powodu nieistniejących lub słabych testów 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 Szacuje się, że Google.com (19-13-XNUMX) 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 wytrzyma oczekiwane obciążenie przez długi okres czasu.
  • Testowanie skoków – testuje reakcję oprogramowania na nagłe, duże skoki obciążenia generowane przez użytkowników.
  • Testowanie głośności – W ramach testów objętościowych duży nr. z. Dane są umieszczane w bazie danych i monitorowane jest ogólne zachowanie systemu oprogramowania. Celem jest sprawdzenie wydajności aplikacji przy różnych objętościach baz danych.
  • Testowanie skalowalności – Celem testowania skalowalności jest określenie efektywności aplikacji w zakresie „skalowania” w celu obsługi zwiększonego obciążenia użytkowników. Pomaga zaplanować zwiększenie wydajności systemu oprogramowania.

Typowe problemy z wydajnością

Większość problemów z wydajnością dotyczy 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 straci potencjalnych użytkowników. Testowanie wydajności zapewnia, że ​​aplikacja działa wystarczająco szybko, aby utrzymać uwagę i zainteresowanie użytkownika. Przyjrzyj się poniższej liście typowych problemów z wydajnością i zauważ, jak szybkość jest wspólnym czynnikiem w wielu z nich:

  • Długi czas ładowania – Czas ładowania to zwykle początkowy czas potrzebny na uruchomienie aplikacji. Ogólnie rzecz biorąc, należy to ograniczyć 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 odpowiedzi to czas, jaki upływa od momentu wprowadzenia przez użytkownika danych do aplikacji do chwili, gdy aplikacja wygeneruje odpowiedź na te dane wejściowe. Generalnie powinno to nastąpić bardzo szybko. Ponownie, 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 pogarszają ogólną wydajność systemu. Wąskie gardła mają miejsce, gdy błędy w kodowaniu lub problemy sprzętowe powodują spadek przepustowości przy określonych obciążeniach. Wąskie gardła są często spowodowane przez jedną błędną sekcję kodu. Kluczem do rozwiązania problemu wąskiego gardła jest znalezienie sekcji kodu powodującej spowolnienie i próba naprawienia tego w tym miejscu. Wąskie gardła zazwyczaj rozwiązuje się poprzez naprawienie źle działających procesów lub dodanie dodatkowego sprzętu. Niektóre typowe wąskie gardła wydajności jest
    • 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 znajduje się ogólny proces przeprowadzania testów wydajności

Proces testowania wydajności
Proces testowania wydajności

Krok 1) Zidentyfikuj swoje środowisko testowe

Poznaj swoje fizyczne środowisko testowe, środowisko produkcyjne i dostępne narzędzia testowe. Zrozum szczegóły konfiguracji sprzętu, oprogramowania i sieci używanych podczas testowania, zanim rozpoczniesz proces testowania. Pomoże to testerom tworzyć bardziej wydajne testy. Pomoże to również zidentyfikować możliwe wyzwania, na które testerzy mogą natrafić podczas procedur testowania wydajności.

Krok 2) Zidentyfikuj kryteria akceptacji wydajności

Obejmuje to cele i ograniczenia dotyczące przepustowości, czasu reakcji i alokacji zasobów. Konieczne jest także określenie kryteriów sukcesu projektu poza tymi celami i ograniczeniami. Testerzy powinni mieć uprawnienia do ustalania kryteriów wydajności i celów, ponieważ często specyfikacje projektu nie będą obejmować wystarczająco szerokiej gamy testów porównawczych wydajności. Czasem może nie być go wcale. Jeśli to możliwe, dobrym sposobem na określenie celów wydajnościowych jest znalezienie podobnej aplikacji do porównania.

Krok 3) Zaplanuj i zaprojektuj testy wydajności

Określ, jak prawdopodobnie będzie się różnić użytkowanie wśród użytkowników końcowych i zidentyfikuj kluczowe scenariusze do przetestowania pod kątem wszystkich możliwych przypadków użycia. Konieczne jest przeprowadzenie symulacji różnych użytkowników końcowych, zaplanowanie danych z testów wydajności i nakreślenie, jakie metryki będą gromadzone.

Krok 4) Konfiguracja środowiska testowego

Przygotuj środowisko testowe przed wykonaniem. Zorganizuj także narzędzia i inne zasoby.

Krok 5) Zaimplementuj projekt testu

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

Krok 6) Uruchom testy

Wykonuj i monitoruj testy.

Krok 7) Analizuj, dostrój i przetestuj ponownie

Konsoliduj, analizuj i udostępniaj wyniki testów. Następnie dostrój i przetestuj ponownie, aby sprawdzić, czy nastąpiła poprawa lub spadek wydajności. Ponieważ ulepszenia zazwyczaj zmniejszają się z każdym ponownym testem, zatrzymaj się, gdy wąskie gardło jest spowodowane przez procesor. Następnie możesz rozważyć opcję zwiększenia mocy procesora.

Metryki testowania wydajności: Monitorowane parametry

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

metryki 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óre nie mogą być współużytkowane przez inne procesy. Służą one do pomiaru wycieków i wykorzystania pamięci.
  • Pamięć zaangażowana – ilość wykorzystanej pamięci wirtualnej.
  • Strony pamięci/sekundę – liczba stron zapisanych na dysku lub odczytanych z dysku w celu usunięcia twardych błędów strony. Błędy strony twardej mają miejsce, gdy kod nie z bieżącego zestawu roboczego jest wywoływany z innego miejsca i pobierany z dysku.
  • Błędy stron/sekundę – ogólna szybkość przetwarzania stron błędów przez procesor. To samo dzieje się, gdy proces wymaga kodu spoza swojego zestawu roboczego.
  • Przerwania procesora na sekundę – jest średnią liczbą przerwań sprzętowych, które procesor odbiera i przetwarza w ciągu sekundy.
  • Długość kolejki dyskowej – jest średnią liczbą żądań odczytu i zapisu oczekujących w kolejce dla wybranego dysku w danym przedziale czasowym.
  • Długość sieciowej kolejki wyjściowej – długość wyjściowej kolejki pakietów w pakietach. Wartość większa niż dwa oznacza opóźnienia i należy położyć kres powstawaniu wąskich gardeł.
  • Łączna liczba bajtów sieciowych na sekundę – szybkość wysyłania i odbierania bajtów przez interfejs, łącznie ze znakami ramek.
  • Czas odpowiedzi - czas od wprowadzenia żądania przez użytkownika do 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ń – Ma to związek z liczbą 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ę – nie. trafień na serwerze WWW podczas każdej sekundy testu obciążenia.
  • 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 – są monitorowane w celu ustalenia, jaki czas oczekiwania można skrócić w przypadku szybkości pobierania danych z pamięci
  • Liczba wątków – Kondycję aplikacji można mierzyć liczbą nie. wątków, które są uruchomione i aktualnie aktywne.
  • Zbieranie śmieci - Chodzi o zwracanie nieużywanej pamięci do systemu. Zbieranie śmieci musi być monitorowane pod kątem wydajności.

Przykładowe przypadki testowe testów wydajnościowych

  • Przypadek testowy 01: Sprawdź, czy czas reakcji nie przekracza 4 sekund, 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 dopuszczalnym zakresie, gdy łączność sieciowa jest wolna
  • 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 aplikacji oraz serwera 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.

Narzędzia do testowania wydajności

Na rynku dostępnych jest wiele różnych narzędzi do testowania wydajności. Narzędzie, które wybierzesz do testów, będzie zależeć od wielu czynników, takich jak rodzaj obsługiwanego protokołu, koszt licencji, wymagania sprzętowe, obsługa platform itp. Poniżej znajduje się lista powszechnie używanych narzędzi testowych.

  • HP LoadRunner - jest obecnie najpopularniejszym narzędziem do testowania wydajności na rynku. Narzędzie to jest w stanie symulować setki tysięcy użytkowników, poddając aplikacje rzeczywistym obciążeniom w celu określenia ich zachowania pod oczekiwanymi obciążeniami. Loadrunner zawiera wirtualny generator użytkowników, który symuluje działania prawdziwych użytkowników.
  • Jmetr – jedno z wiodących narzędzi służących do testowania obciążenia serwerów WWW i aplikacji.

FAQ

Testowanie wydajności jest zawsze wykonywane tylko dla systemów opartych na architekturze klient-serwer. Oznacza to, że żadna aplikacja, która nie jest architekturą opartą na architekturze klient-serwer, nie musi wymagać testowania wydajności.

Na przykład, Microsoft Kalkulator nie jest oparty na kliencie-serwerze ani nie obsługuje wielu użytkowników; dlatego nie jest kandydatem do testów wydajnościowych.

Test wydajności

Ważne jest zrozumienie różnicy między testowaniem wydajności a inżynierią wydajności. Poniżej przedstawiono zrozumienie:

Test wydajności jest dyscypliną związaną z testowanie i raportowanie bieżąca wydajność aplikacji przy różnych parametrach.

Inżynieria wydajności to proces, podczas którego oprogramowanie jest testowane i dostrajane w celu uzyskania wymaganej wydajności. Proces ten ma na celu optymalizację najważniejszej cechy wydajności aplikacji, czyli doświadczenia użytkownika.

Historycznie rzecz biorąc, testowanie i dostrajanie były wyraźnie odrębnymi i często konkurującymi ze sobą dziedzinami. Jednak w ciągu ostatnich kilku lat kilka grup testerów i programistów współpracowało niezależnie, tworząc zespoły tuningowe. Ponieważ zespoły te odniosły znaczący sukces, koncepcja łączenia testowania wydajności z dostrajaniem wydajności przyjęła się i obecnie nazywamy ją inżynierią wydajności.

Podsumowanie

In Inżynieria oprogramowaniaPrzed wprowadzeniem na rynek jakiegokolwiek oprogramowania konieczne jest przetestowanie wydajności. Zapewnia satysfakcję klienta i chroni inwestycję inwestora przed awarią produktu. Koszty testów wydajnościowych są zwykle z nawiązką rekompensowane większym zadowoleniem, lojalnością i utrzymaniem klientów.