fbpx
wave-1 wave-2

Ile znaczy jedna sekunda – testy wydajnościowe

Ile znaczy jedna sekunda – testy wydajnościowe
Autor:Emil Użdziło Data:7 kwietnia 2020

Czy zastanawiałeś się ile znaczy jedna sekunda, co może się w niej wydarzyć i jaki efekt może to mieć na nasze życie?

Dla każdego z nas sekunda może znaczyć coś innego. Dla sportowca jedna sekunda może przeważyć o zwycięstwie lub pobiciu rekordu. Spóźniając się sekundę możemy nie zdążyć wsiąść do pociągu metra, może także uchronić nas od wypadku na drodze.

Ciężko dokładnie sprecyzować ile dokładnie wynosi jedna sekunda, od 20 maja 2019 międzynarodowy instytut miar określa ją następującą definicją:

Brzmi dość abstrakcyjnie, lecz w życiu codziennym nie potrzebujemy aż tak dokładnych pomiarów.

Pojedyncze sekundy są natomiast bardzo istotne w świecie IT. W szczególności, gdy użytkownik czeka na załadowanie strony lub konkretne interakcje w aplikacji.

Przeprowadzono szereg badań związanych z postrzeganiem przez internautów serwisów i sklepów www. Internauci z definicji są bardzo niecierpliwi, oczekiwanie na wczytanie strony dłużej niż 4 sekundy powoduje opuszczenie strony przez blisko 25 % badanych (badania Kissmetrics):

Idąc dalej tym tropem powyższa sytuacja przekłada się na spadek sprzedaży w sklepach internetowych czy też odbiór danej marki przez pryzmat działania jej głównej strony. Wyniki tych badań wykazały, że blisko 47% użytkowników oczekuje, by czas ładowania stron internetowych nie przekraczał 2 sekund.

Aby sprawdzić jak długo wczytuje się dana strona można skorzystać z opcji DevTools (F12 w każdej przeglądarce). Przykładowy zrzut ekranu dla strony wp.pl poniżej. Widać tu wszystkie zapytania, które wykonywane są po uruchomieniu strony głównej.

W jaki sposób przyspieszyć aplikację? Można wykorzystać gotowe narzędzia, które sprawdzą wydajność strony i zasugerują odpowiednie kroki, w celu jej przyspieszenia. Najpopularniejszym z nich jest PageSpeed Insights – narzędzie od Google’a mierzące wydajność ładowania strony. Uzyskany raport pozwala zdiagnozować problemy techniczne ze stroną jak również z jej budową. Uzyskany wynik jest w skali 100-punktowej – im większy tym lepszy. Raport powstaje w oparciu o strony ładowane na urządzeniach mobilnych i stacjonarnych.

Innym bardzo popularnym narzędziem jest Mobile-Friendly Test. Narzędzie sprawdza aplikację pod kątem wydajności na urządzeniach mobilnych i przygotowuje raport z wydajności strony. Weryfikuje kompletność ładowania strony i wskazuje zasoby, których nie udało się załadować.

Wartym uwagi jest również narzędzie Pingdom Speed. Podobnie jak narzędzie Google’a generuje raport z informacją o możliwości optymalizacji strony. Dodatkowo w Pingdom Speed można wskazać lokalizację z jakiej wykonywany jest test, np. z Australii czy Brazylii.

Niektóre narzędzia, takie jak GTmetrix oprócz przygotowania raportu umożliwiają również eksport raportu do pliku PDF, który można przesłać, np. klientowi.

Powyższe narzędzia proponują szereg rozwiązań, które mogą polepszyć wydajność strony/sklepu, co jednak w przypadku, gdy wykorzystaliśmy już wszystkie sugestie i zastosowaliśmy wszystkie dobre praktyki przyspieszające strony, a aplikacja w dalszym ciągu wolno odpowiada? Z pomocą przychodzą testy wydajnościowe, dzięki którym jesteśmy w stanie sprawdzić jak działa aplikacja od środka.

Testy wydajnościowe należą do grupy testów niefunkcjonalnych, przeprowadza się je w celu sprawdzenia spełnienia takich wymagań jak akceptowalny czas odpowiedzi pod wpływem obciążenia, liczba wykonań danego procesu w jednostce czasu, liczba równoległych użytkowników, którzy mogą korzystać z systemu bez utraty spadku wydajności. Wykonywanie takich testów pomaga organizacjom zapobiec niedostępnościom aplikacji, co bezpośrednio przekłada się na przychody firmy.

Straty firm w wyniku niedziałania aplikacji przez krótką chwilę mogą sięgnąć milionów złotych. Dlatego tak istotne jest sprawdzenie aplikacji pod kątem wymagań wydajnościowych.

Testy wydajnościowe dzielą się na różne rodzaje i typy, do najczęściej wykonywanych testów zaliczamy:

  • Testy obciążeniowe (Load testing) – najczęściej wykonywane testy służące sprawdzeniu działania aplikacji pod zakładanym obciążeniem. Wykonanie takich testów pozwala określić czasy odpowiedzi aplikacji i umożliwia znalezienie wąskich gardeł w aplikacji, takich jak wycieki pamięci (memory leaks), błędy w kodzie (np. nieskończone pętle, zakleszczanie się wątków) czy błędy związane z konfiguracją serwera aplikacyjnego lub bazy.
  • Testy przeciążeniowe (Stress testing) – testy przeciążeniowe mają na celu sprawdzenie działania aplikacji przy obciążeniu znacznie przekraczającym zakładany ruch. Badane są reakcje systemu w ekstremalnych warunkach.
  • Testy długotrwałego obciążenia (Endurance testing) – testy te weryfikują działanie aplikacji przy stałym, długotrwającym obciążeniu, które może powodować np. powolne wycieki pamięci.
  • Testy skokowego obciążenia (Peak testing) – testy skokowego obciążenia stosuje się, aby zasymulować ruch w sytuacjach wzmożonego wzrostu ruchu, np. podczas kampanii promocyjnej

Do przygotowywania testów wydajnościowych wykorzystuje się między innymi aplikację Apache JMeter – darmowe narzędzie napisane w Javie. Jest to zaawansowany program do mierzenia wydajności elementów statycznych i dynamicznych, umożliwia przeprowadzenie testów wydajnościowych jak i przeciążeniowych. Dzięki bardzo dużej liczbie dodatków można przygotowywać rozbudowane raporty z przeprowadzonych testów. Oprócz JMeter dostępne są również inne open-source’owe narzędzia takie jak Grinder czy Locust, jednak nie dostarczają tak dużo możliwości jak Apache JMeter.

Alternatywą dla narzędzi open source’owych są narzędzia płatne. Wśród testów wydajnościowych na pierwszym miejscu króluje LoadRunner (który istnieje na rynku od ponad 20 lat!), obecnie dostarczany jest przez firmę Micro Focus. Wyniki testów wydajnościowych przeprowadzanych z wykorzystaniem LoadRunnera są bardzo często używane jako punkt odniesienia dla innych narzędzi. LoadRunner składa się z kilku komponentów – VuGen (Virtual User Generator) do tworzenia skryptów testowych, Controller do uruchamiania testów, Analysis do przygotowywania raportów i analizy wyników oraz LoadGenerators służących do generowania ruchu podczas testów.

VuGen umożliwia nagrywanie bardzo dużej liczby protokołów od HTTP poprzez .NET, SAP, RDP, Web Services, Mobile Web i wiele innych. Do skryptów można dopisać własne funkcje, skrypty tworzone są przy użyciu języków C, JavaScript, C #, VB.NET i języków programowania Java (w zależności od wybranego protokołu). LoadRunner doskonale integruje się z innymi narzędziami z rodziny Micro Focus, np. ALM, jak również z narzędziami CI takimi jak Jenkins. VuGen integruje się również z GitHub’em.

Pojedyncze sekundy w świecie IT są bardzo istotne. Nawet opóźnienia w czasie ładowania się strony, czy odpowiedzi aplikacji, może w bardzo negatywny sposób wpłynąć na postrzeganie przez użytkowników danego portalu/aplikacji, co za tym idzie, przełożyć się na wyniki finansowe. Właściciele chcąc zaproponować swoim klientom sprawną i szybką stronę lub aplikację powinni ją sprawdzić pod względem wydajnościowym jak najdokładniej, w celu uniknięcia strat czy negatywnych reakcji użytkowników.

Autor: Emil Użdziło, Performance/Automation Test Engineer