en

W ramach rozbudowanego procesu budowania aplikacji i portali internetowych powszechnym działaniem jest przeprowadzanie szeregu testów w celu zapewnienia jak największej jakości funkcjonowania danej aplikacji. Jednymi z nich są testy wydajnościowe odpowiedzialne za gwarancję działania aplikacji oraz infrastruktury serwerowej wybranej do udostępniania tej aplikacji przy wysokim obciążeniu.

W jakim celu przeprowadzane są testy wydajnościowe?

Budowane aplikacje i portale internetowe w wielu przypadkach nie są odpowiednio przetestowane pod kątem wydajnościowym, co związane jest z brakiem świadomości uwarunkowań istnienia portalu w Internecie. Często też są one pomijane, gdyż dzisiejszy sprzęt i zasoby obliczeniowe dostarczane przez firmy hostujące są zupełnie wystarczające dla standardowego ruchu. Jednakże w sytuacji kiedy na skutek kampanii marketingowych lub innych nieprzewidzianych działań (w tym także ataków hakerskich typu DDOS) liczba internatów odwiedzających portal w tym samym czasie może być tak duża, że spowoduje nadmierne obciążenie serwera. To w konsekwencji może być przyczyną powolnego ładowania się strony lub wręcz nie ładowania się wcale i powodować ryzyko utraty zrezygnowanego i zniecierpliwionego odbiorcy.

W sytuacji znacznego spadku prędkości ładowania stron wielu użytkowników próbuje załadować je ponownie w przeglądarce co powoduje zwielokrotnienie obciążenia i zapotrzebowania na zasoby serwera. W rezultacie działająca w taki sposób aplikacja/portal internetowy może doprowadzić do zawieszenia się lub przeciążenia serwera. Nie realizuje przy tym założonego celu, a więc nie dociera do odbiorców i poniesiony koszt kampanii nie przynosi oczekiwanych wymiernych korzyści.

Dlatego aby uniknąć wyżej opisanego ryzyka i odpowiednio wcześniej wykryć tego typu zachowania przeprowadzane są testy wydajnościowe mające na celu zasymulowanie tak dużej liczby odwiedzin na stronie, która pozwoli zbadać wytrzymałość aplikacji na spodziewany  efekt jej użyteczności.

Rodzaje testów wydajnościowych

Testy wydajnościowe możemy podzielić na:

  • Performance testing (testy wydajnościowe)
    • Porównywanie czasu odpowiedzi symulacji przejścia pojedynczego użytkownika do wielu użytkowników przez aplikację.
    • Badanie czasu odpowiedzi aplikacji procesów krytycznych dla biznesu funkcji systemu.
    • Badanie procesów pod kątem wykonania w akceptowalnym czasie.
  • Stress testing (testy przeciążeniowe)
    • Zasymulowanie dużej liczby jednocześnie działających użytkowników, przekraczających zasoby serwera i badanie czy system zareaguje w odpowiedni sposób.
    • Wyszukiwanie defektów aplikacji podczas utraty danych.
  • Load testing (testy obciążeniowe)
    • Zasymulowanie dużej liczby jednocześnie działających użytkowników oraz utrzymanie takiego stanu przez określony w scenariuszu czas.
    • Zbadanie jak wiele zapytań (requests) jest w stanie obsłużyć system w określonym przedziale czasu.

Dlaczego testy w środowisku rozproszonym ?

Sam proces przygotowania scenariuszy testów to dopiero pierwszy etap do zbadania wydajności systemu. Żeby wygenerować dużą liczbę użytkowników poruszających się w systemie, niezbędne są spore zapasy zasobów wymaganych do takiej czynności. Największym problemem są tutaj zbyt "wąskie gardła" łącz internetowych, które miałyby zasymulować ruch np. 100 tyś użytkowników w danym czasie. Rozwiązaniem owego problemu jest przeprowadzenie scenariuszy testów przy użyciu ‘chmury’. W ten sposób możemy osiągnąć pożądany efekt i zasymulować odpowiedni ruch na stronie.

Etapy przeprowadzenia testów.

  1. Dokładne poznanie specyfiki systemu, a więc właściwe opracowanie scenariuszy  testów pod kątem procesów krytycznych dla biznesu. Oznacza to, że testy muszą obciążyć te obszary aplikacji, które odpowiadają za osiąganie celu.
  2. Przygotowanie chmury - na proces ten składa się przede wszystkim stworzenie odpowiednio dużej liczby serwerów (maszyn testujących), w zależności od rodzaju testu.
  3. Przekazanie oraz wykonanie scenariuszy testów do maszyn testujących, które wykonają założone wcześniej kroki. Jest to najważniejszy etap dla całego doświadczenia. W tym czasie ważny jest także dostęp do miar obciążenia serwera, by zweryfikować jego potencjał.
  4. Ostatnim etapem  jest zebranie wyników z maszyn testujących, ich weryfikacja i ocena. W tym momencie odbywa się dokładna analiza dostarczonych danych przez wykonany test i interpretacja wydajności systemu. Jeśli system nie spełni zalecanych wymagań, wprowadzane są poprawki mające na celu optymalizację punktów krytycznych lub podejmowana jest decyzja o zmianie infrastruktury serwerowej. Następnie test zostaje powtórzony.

Przeprowadzony test

Aby lepiej zrozumieć mechanizm działania testu, przeanalizujmy konkretny przykład testowania aplikacji internetowej „Olimpiada Finansowa” powstałej dla Fundacji Kronenberga. Aplikacja ma za zadanie przeprowadzić szereg dynamicznych testów z wiedzy o finansach i inwestowaniu wśród grupy uczniów. Przyjrzyjmy się bliżej logice biznesowej aplikacji i jej najczulszym obszarom działania, podatnym na duże zużycie mocy obliczeniowej. Obszary te są zarazem krytycznymi z punktu widzenia założeń biznesowych aplikacji. W efekcie daje to zbiór elementów do testowania aplikacji których wadliwe działanie oznacza brak zrealizowanego celu biznesowego.

W ramach testu przygotowano następujące scenariusze obciążające:

  1. Ruch użytkowników po stronie
  2. Rejestracja uczniów
  3. Wypełnianie testów przez uczniów

Czas przeprowadzenia testu wyniósł 15 min, przy użyciu 3 maszyn testujących znajdujących się w chmurze Amazon EC2. Wygenerowany ruch przez środowisko testujące to 20 tyś żądań, co daje 22 żądania na sekundę z prośbą o przetworzenie danych wysyłanych przez klienta (ucznia). Czas odpowiedzi przy takim obciążeniu wyniósł średnio 5 sekund, co jest czasem akceptowalnym dla aplikacji internetowych. Zbadane obciążenie serwera w trakcie trwania testu wykazało duże zapotrzebowanie na moc procesora.

W efekcie podjęto kroki mające na celu optymalizację działania aplikacji, a więc zastosowano takie rozwiązania jak: cache’owanie, wcześniejsza agregacja danych, skumulowanie wyników. Zadbano również o proces skalowania aplikacji tak, aby mieć pewność, że w przypadku większego zapotrzebowania na wydajność będziemy mogli w szybkim czasie uruchomić równolegle kolejne maszyny serwujące strony z wykorzystaniem load-balancingu.

Autor: Łukasz Tomczuk, 3e Software House

Zamknij ten komunikat

Nasze strony wykorzystują pliki cookies.

Na naszych stronach używamy informacji zapisanych za pomocą cookies m.in. w celach reklamowych i statystycznych. Mogą też stosować je współpracujące z nami podmioty, takie jak firmy badawcze oraz dostawcy aplikacji multimedialnych. W każdej przeglądarce internetowej można zmienić ustawienia dotyczące cookies. Korzystanie z naszych serwisów internetowych bez zmiany ustawień dotyczących cookies oznacza, że będą one zapisane w pamięci urządzenia.