Co to jest test stresowy w testowaniu oprogramowania?

⚡ Inteligentne podsumowanie

Podczas testów obciążeniowych aplikacja jest poddawana testom wykraczającym poza jej normalne granice działania, aby znaleźć punkt krytyczny, potwierdzić, że awarie są obsługiwane prawidłowo, oraz udowodnić, że system bez problemu odzyskuje sprawność po usunięciu ekstremalnego obciążenia.

  • 🔘 Definicja: Testy obciążeniowe mierzą odporność i obsługę błędów przy obciążeniu znacznie większym niż to, jakie zwykle występuje w środowisku produkcyjnym.
  • ️ Cel: Test lokalizuje dokładny punkt awarii i weryfikuje możliwość odzyskania sprawności po powrocie obciążenia do normy.
  • ✅ Zakres: Warianty rozproszone, aplikacyjne, transakcyjne, systemowe i eksploracyjne kładą nacisk na różne warstwy systemu.
  • 🧪 Proces: Zaplanuj, napisz scenariusz, wykonaj, przeanalizuj, a następnie dostosuj — zwykle zajmuje to trzy lub cztery pełne cykle, zanim osiągnięte zostaną cele wzorcowe.
  • 🛠️. Obróbka: LoadRunner, Apache JMeter, StressTester i NeoZaładuj, generuj równoczesnych użytkowników wirtualnych i przechwytuj dane odpowiedzi.
  • 📊 Metryka: Przepustowość, liczba stron na sekundę, czas trafienia, czas do pierwszego bajtu i nieudane połączenia pozwalają określić wynik.

Testowanie obciążeniowe w testowaniu oprogramowania

Co to jest test warunków skrajnych?

Testy warunków skrajnych to rodzaj testowania oprogramowania, który weryfikuje stabilność i niezawodność aplikacji. Celem testów obciążeniowych jest ocena odporności oprogramowania i możliwości obsługi błędów w warunkach ekstremalnie dużego obciążenia oraz zapewnienie, że oprogramowanie nie ulegnie awarii w sytuacjach kryzysowych. Testy te są celowo przeprowadzane poza normalnymi punktami operacyjnymi i oceniane jest zachowanie oprogramowania w ekstremalnych warunkach.

W ramach testów obciążeniowych testowana aplikacja (AUT) jest poddawana krótkiemu obciążeniu w celu sprawdzenia jej wytrzymałości. Najbardziej powszechnym zastosowaniem testów obciążeniowych jest określenie granicy, powyżej której system, oprogramowanie lub sprzęt ulegają awarii. Testy te sprawdzają również, czy system wykazuje skuteczne zarządzanie błędami po przekroczeniu tej granicy.

In Inżynieria oprogramowaniaTestowanie warunków skrajnych jest często wymieniane obok Testy wytrzymałościowe, ale różnią się one od siebie: w testach wytrzymałościowych stosuje się nienormalnie wysokie obciążenie w krótkim czasie, aby znaleźć punkt krytyczny, podczas gdy w testach wytrzymałościowych (wytrzymałościowych) utrzymuje się umiarkowane obciążenie przez wiele godzin, aby wykryć stopniową degradację.

Zrzut ekranu poniżej przedstawia duży blok danych kopiowany ze strony internetowej.

Kopiowanie bardzo dużego bloku danych ze strony internetowej w celu obciążenia aplikacji na komputerze stacjonarnym

Testowana aplikacja jest obciążana, gdy 5 GB danych zostaje skopiowane ze strony internetowej i wklejone do Notatnika. Notatnik jest teraz obciążony i zwraca komunikat o błędzie „Brak odpowiedzi”, dokładnie tak, jak pokazano na kolejnym zrzucie ekranu.

Notatnik wyświetla komunikat o błędzie „Brak odpowiedzi” po wklejeniu do niego 5 GB danych

Tę samą zasadę można zastosować bezpośrednio w systemach po stronie serwera.

Potrzeba testów obciążeniowych

Rozważ poniższe przykłady z czasu rzeczywistego, w których zastosowanie testów wytrzymałościowych staje się oczywiste:

  • W czasie trwania festiwalu sklep internetowyping witryna może odnotować wzrost ruchu lub ogłoszenie wyprzedaży.
  • Kiedy w wiodącej gazecie pojawia się wzmianka o blogu, następuje nagły wzrost ruchu.

Przeprowadzenie testów obciążeniowych jest konieczne, aby sprostać takim nagłym wzrostom ruchu. Niezastosowanie się do tego nagłego wzrostu ruchu może skutkować utratą przychodów i reputacji.

Testy wytrzymałościowe są również niezwykle cenne z następujących powodów:

  • Sprawdza, czy system działa w warunkach odbiegających od normy.
  • Potwierdza, że ​​w przypadku obciążenia systemu wyświetlany jest odpowiedni komunikat o błędzie.
  • Awaria systemu w ekstremalnych warunkach może skutkować ogromnymi stratami dochodów.
  • Lepiej przygotować się na ekstremalne warunki, wykonując zawczasu testy wytrzymałościowe.

W następnej sekcji opisano, co musi udowodnić udany test wytrzymałościowy.

Cele testów warunków skrajnych

Celem testów obciążeniowych jest analiza zachowania systemu po awarii. Aby testy obciążeniowe zakończyły się sukcesem, system powinien wyświetlić odpowiedni komunikat o błędzie w ekstremalnych warunkach.

Do przeprowadzania testów obciążeniowych wykorzystuje się czasami ogromne zbiory danych, które mogą zostać utracone w przypadku awarii systemu. Testerzy powinni upewnić się, że dane związane z bezpieczeństwem nie zostaną utracone podczas testów obciążeniowych.

Głównym celem testów obciążeniowych jest upewnienie się, że system odzyska sprawność po awarii. Cecha ta nazywana jest odzyskiwalnością. Testowanie odzyskiwania następnie szczegółowo weryfikuje procedurę przywracania.

Testowanie obciążeniowe a testowanie wytrzymałościowe

Obie techniki należą do Test wydajności rodziny, więc łatwo je pomylić. Poniższy diagram przedstawia porównanie obu profili obciążenia.

Wykres porównujący stały profil obciążenia podczas testów obciążeniowych z rosnącym profilem obciążenia podczas testów obciążeniowych

Testowanie obciążenia Testy warunków skrajnych
Testowanie obciążenia testuje zachowanie systemu w normalnych warunkach obciążenia pracą; symuluje rzeczywiste, oczekiwane obciążenie pracą. Testowanie wytrzymałościowe polega na sprawdzeniu zachowania systemu w ekstremalnych warunkach i jest przeprowadzane aż do momentu awarii systemu.
Testowanie obciążeniowe nie powoduje uszkodzenia systemu. Testowanie obciążeniowe ma na celu celowe uszkodzenie systemu poprzez przeciążenie go danymi lub ograniczenie zasobów.

Powiązane profile obejmują Testowanie Spike'a (nagły krótki wybuch), Testowanie głośności (duże dane, a nie wielu użytkowników) i Testowanie skalowalności (przestrzeń wzrostu).

Rodzaje testów warunków skrajnych

Poniżej przedstawiono rodzaje testów wytrzymałościowych, omówione po kolei.

Rozproszone testy obciążeniowe

W rozproszonych systemach klient-serwer testy przeprowadza się na wszystkich klientach z serwera. Rolą serwera testującego jest dystrybucja zestawu testów testujących do wszystkich klientów testujących i track status każdego klienta. Po nawiązaniu kontaktu z serwerem, serwer dodaje jego nazwę i rozpoczyna wysyłanie danych do testów. Poniższy rysunek pokazuje, jak serwer testowy dociera do niektórych klientów, ale nie do innych.

Konfiguracja rozproszonego testu obciążeniowego, w której serwer obciążeniowy dociera do Klienta 1 i Klienta 2, ale traci kontakt z Klientem 3 i Klientem 4

W międzyczasie komputery klienckie wysyłają sygnał, czyli sygnał „heartbeat”, potwierdzający, że nadal są połączone z serwerem. Jeśli serwer nie odbierze żadnego sygnału z komputera klienckiego, należy go dokładniej przeanalizować w celu debugowania. Na rysunku serwer może połączyć się z dwoma klientami (Klientem 1 i Klientem 2), ale nie może wysłać ani odebrać sygnału od Klienta 3 i Klienta 4.

W przypadku takich scenariuszy testowania obciążeniowego najlepszym rozwiązaniem jest przeprowadzenie testów nocnych. Duże farmy serwerów potrzebują bardziej wydajnej metody określania, które komputery uległy awariom obciążeniowym i wymagają zbadania.

Testowanie obciążeniowe aplikacji

Testowanie to koncentruje się na wyszukiwaniu błędów związanych z blokowaniem danych, problemami sieciowymi i wąskimi gardłami wydajnościowymi w pojedynczej aplikacji.

Testowanie warunków skrajnych transakcji

Przeprowadza testy obciążeniowe jednej lub większej liczby transakcji między dwiema lub większą liczbą aplikacji. Służy do precyzyjnego dostrajania i optymalizacji systemu.

Testowanie warunków skrajnych

To zintegrowane testy obciążeniowe, które można przeprowadzić na wielu systemach współdzielących ten sam serwer. Służy do wykrywania defektów, w których jedna aplikacja blokuje dane innej aplikacji.

Eksploracyjne testy obciążeniowe

Ten rodzaj testów obciążeniowych służy do testowania systemu przy nietypowych parametrach lub warunkach, które są mało prawdopodobne w rzeczywistych warunkach. Służy do wykrywania defektów w nieoczekiwanych sytuacjach, takich jak:

  • Jednocześnie zalogowała się duża liczba użytkowników.
  • Skaner antywirusowy uruchamiany jest na wszystkich komputerach jednocześnie.
  • Baza danych przechodząca w tryb offline podczas próby uzyskania do niej dostępu ze strony internetowej.
  • Jednoczesne wprowadzanie dużej ilości danych do bazy danych.

Bez względu na zastosowaną wersję kolejność wykonywania pozostaje taka sama.

Jak przeprowadzić testy warunków skrajnych?

Proces testowania wytrzymałościowego można przeprowadzić w 5 głównych krokach:

  • Krok 1) Planowanie testu warunków skrajnych: Tutaj zbierasz dane systemowe, analizujesz system i definiujesz cele testów wytrzymałościowych.
  • Krok 2) Utwórz skrypty automatyzacji: W tej fazie tworzysz skrypty automatyzacji testów obciążeniowych i generujesz dane testowe dla scenariuszy obciążeniowych.
  • Krok 3) Wykonanie skryptu: Na tym etapie uruchamiasz skrypty automatyzacji testów obciążeniowych i zapisujesz wyniki testów obciążeniowych.
  • Krok 4) Analiza wyników: Na tym etapie analizujesz wyniki testu wytrzymałościowego i identyfikujesz wąskie gardła.
  • Krok 5) Dostosowywanie i optymalizacja: Na tym etapie dostrajasz system, zmieniasz konfiguracje i optymalizujesz kod, aby osiągnąć oczekiwane wyniki.

Na koniec ponownie uruchamiasz cały cykl, aby sprawdzić, czy wprowadzone zmiany przyniosły oczekiwane rezultaty. Na przykład, nierzadko potrzeba 3 do 4 cykli testów obciążeniowych, zanim cele wydajnościowe zostaną osiągnięte, dlatego skrypty są zazwyczaj aktualizowane równolegle z… regresja na.

Narzędzia zalecane do testów obciążeniowych

Cztery poniższe narzędzia zaspokajają większość potrzeb, od pakietów korporacyjnych po bezpłatne opcje typu open source.

LoadRunner

LoadRunner jest powszechnie używanym narzędziem do testowania obciążenia, obecnie sprzedawanym przez OpenText w edycjach Professional, Enterprise i Cloud po przejściu z HP do Micro Focus OpenTextWyniki testów obciążeniowych wygenerowane przez LoadRunner są traktowane jako benchmark.

JMeter

Apache JMeter jest narzędziem testowym o otwartym kodzie źródłowym. Jest to czyste Java Aplikacja do testów obciążeniowych i wydajnościowych, przeznaczona do testowania takich typów testów, jak obciążenie, funkcjonalność i obciążenie. Aktualne wersje 5.6.x Apache JMeter wymagać Java 8 lub nowszy, z Java Zalecane 17.

Tester stresu

To narzędzie zapewnia kompleksową analizę wydajności aplikacji internetowych, prezentuje wyniki w formie graficznej i jest proste w obsłudze. Nie wymaga pisania skryptów wysokiego poziomu, co pozwala utrzymać zwrot z inwestycji na niskim poziomie.tracidealne dla mniejszych zespołów.

NeoZaładować

NeoZaładować, obecnie część Tricentis portfolio, jest popularnym narzędziem do testowania stron internetowych i aplikacje mobilne. Umożliwia symulację tysięcy użytkowników w celu oceny wydajności aplikacji pod obciążeniem i analizy czasu reakcji. Obsługuje również zintegrowane z chmurą testy wydajności, obciążenia i obciążenia oraz jest dobrze skalowalny.

Więcej opcji znajdziesz w przewodniku narzędzia do testowania wydajności; bez względu na to, którą opcję wybierzesz, jej wynik będzie miał znaczenie tylko w kontekście poniższych wskaźników.

Metryki do testów warunków skrajnych

Metryki pomagają w ocenie wydajności systemu i są zazwyczaj analizowane pod koniec testu obciążeniowego. Powszechnie używane metryki dzielą się na trzy rodziny.

Pomiar skalowalności i wydajności

  • Stron na sekundę: Mierzy liczbę żądanych stron na sekundę.
  • Wydajność: Podstawowa metryka — rozmiar danych odpowiedzi na sekundę.
  • Rundy: Liczba zaplanowanych scenariuszy testowych w stosunku do liczby ich wykonania przez klienta.

Odpowiedź aplikacji

  • Czas trafienia: Średni czas pobierania obrazu lub strony.
  • Czas do pierwszego bajtu: Czas potrzebny na zwrócenie pierwszego bajtu danych lub informacji.
  • Czas wyświetlania strony: Czas potrzebny na pobranie wszystkich informacji ze strony.

Awarie

  • Nieudane połączenia: Liczba nieudanych połączeń odrzuconych przez klienta (słaby sygnał).
  • Nieudane rundy: Liczba rund, które się nie powiodły.
  • Nieudane trafienia: Liczba nieudanych prób wykonania przez system (uszkodzone łącza lub nieoglądane obrazy).

W części końcowej wymieniono sytuacje, które najczęściej uzasadniają przeprowadzenie testu warunków skrajnych.

Przykłady testów wytrzymałościowych

Testowanie warunków skrajnych jest bardzo przydatne, gdy spodziewamy się, że jakieś wydarzenie wygeneruje ruch znacznie przekraczający dzienną normę:

  • Strona internetowa e-commerce ogłaszająca wyprzedaż festiwalową.
  • Serwis informacyjny publikujący informacje o ważnym wydarzeniu.
  • Rada edukacyjna publikująca wyniki egzaminów.
  • Serwisy społecznościowe, blogi i aplikacje mobilne w momencie viralu.

W każdym przypadku test monitoruje zasoby, takie jak pamięć, procesor i sieć, sprawdza, czy w warunkach dużego obciążenia pojawiają się odpowiednie komunikaty o błędach, i potwierdza, że ​​system powróci do normy. Pasuje do cykl życia testowania oprogramowania jako niefunkcjonalna kontrola obok Testowanie systemu i szerszy zestaw typy testowania oprogramowania.

FAQ

Nie. Test wytrzymałościowy polega na zastosowaniu nienormalnie dużego obciążenia przez krótki okres czasu, aby zlokalizować punkt pęknięcia. Moczenie lub testy wytrzymałościowe utrzymuje realistyczne obciążenie przez wiele godzin, aby wykryć wycieki pamięci i powolną degradację.

Testowanie Spike'a Testy obciążeniowe powodują nagły, bardzo krótki skok obciążenia systemu i mierzą szybkość jego skalowania i odzyskiwania. Testy obciążeniowe polegają na stopniowym zwiększaniu obciążenia aż do awarii, więc mierzą one limit, a nie szybkość reakcji systemu.

Przeprowadzaj je przed każdą główną premierą, przed przewidywanym szczytem ruchu, takim jak dzień wyprzedaży lub ogłoszenia wyników, oraz po zmianach architektonicznych w zakresie buforowania, pul połączeń lub automatycznego skalowania. Wiele zespołów powtarza je również kwartalnie jako kontrolę bazową.

Użyj środowiska o rozmiarach zbliżonych do produkcyjnych, na ile pozwala budżet, ponieważ zbyt mały sprzęt przesuwa punkt krytyczny. Wypełnij je zamaskowanymi lub syntetycznymi danymi dotyczącymi wolumenu produkcji i nigdy nie kieruj destrukcyjnego obciążenia na bieżące dane klientów.

Modele uczenia maszynowego analizują dane telemetryczne z produkcji, aby tworzyć realistyczne profile szczytowego ruchu, sygnalizować anomalie w krzywych czasu reakcji, których nie dałoby się wykryć przy ustalonym progu, oraz korelować metryki zasobów, aby wskazać wąskie gardło. Wiele platform komercyjnych generuje obecnie scenariusze obciążenia na podstawie zaobserwowanych wzorców użytkowania.

Tak. Projekty drugiego pilota JMeter plany testów, skrypty K6 lub Gatling, sparametryzowane generatory danych i kroki potoku CI z poziomu komunikatu w języku potokowym. Potraktuj wynik jako pierwszy szkic: czasy reakcji, tempo i asercje nadal wymagają weryfikacji przez testera.

Ujawnia rzeczywisty limit wydajności, udowadnia obsługę błędów i zmniejsza ryzyko przestojów w okresach szczytowych. Ograniczeniami są koszty – środowiska produkcyjne i licencje są drogie – a także nakład pracy związany z tworzeniem skryptów i wyniki, które zmieniają się wraz ze zmianą infrastruktury.

Inżynierowie wydajności lub testerzy specjalizujący się w testach są z niego korzystani, zazwyczaj z pomocą programistów i personelu operacyjnego, którzy odczytują metryki serwera. Znajduje się on po testowanie systemu, gdy kompilacja jest na tyle stabilna, że ​​awarie wskazują na ograniczenia wydajności, a nie na błędy.

Podsumuj ten post następująco: