Autor: Paweł Wesołowski, QA z katowickiego oddziału NBC
3 min read
Autor: Paweł Wesołowski, QA z katowickiego oddziału NBC
3 min read
Czym są testy performance? Dlaczego się je wykonuje oraz jakie są ich główne cele? Jakich podstawowych narzędzi używa się do testowania oraz jak odbywało się ono w przeszłości?
Zaprezentujemy jaki jest główny podział testów performance oraz wskażmy inne ciekawe przypadki z życia, w których to nie były przeprowadzane testy.
W postępie technologicznym wskazujące coraz to bardziej rozbudowane aplikacje łączące się za pośrednictwem Internetu z serwerami, z których są przesyłane oraz pobierane dane. Następnie dane te są przetwarzane oraz przesyłane do zwykłych użytkowników. W większości przypadków aplikacje nie są odpowiednio testowane pod kątem różnych obciążeń. Może wpływać na to:
Testy performance mają przede wszystkim uświadomić nam możliwości oraz kryteria działania aplikacji w warunkach bardzo dużej eksploatacji przez dane grono użytkowników, a także zapobiegać przed nieprzewidzianymi, nieupoważnionymi działaniami, takimi jak ataki typu DDOS prowadzonych przez hakerów.
Pora wzmożonej aktywności, na przykład, gdy duża liczba użytkowników loguje się w jednym czasie, może spowodować, że aplikacja źle przetestowana pod kątem wydajnościowym, z powodu błędów, skutkuje spadkiem ładowania zasobów odzwierciedlonych w prędkości działania aplikacji. Przedkłada się to ostatecznie na całkowite przeciążenie serwera oraz brak przesyłanych do użytkowników informacji.
Każdemu z nas nieraz zdarzyło się przecież klikać wielokrotnie na przycisk podczas ładowania się formularza w przeglądarce internetowej na stronie.
Przykładowo, możemy sobie wyobrazić, że jest prowadzona kampania reklamowa nowego produktu, który jest bardzo pożądany.
Na cel kampanii reklamowej ów produktu firma x zainwestowała dużą część funduszy. Produkt ten można zakupić przedpremierowo z wielkim rabatem, ale tylko poprzez aplikację tej firmy x, która to aplikacja z kolei była robiona po kosztach bez przeprowadzenia odpowiednich testów.
W dniu premiery tą samą czynność wysyłania formularza zakupu powtarza w tym samym czasie bardzo duża liczba ludzi. Requesty (informacje wysyłane przez użytkowników) wysyłane na serwer gromadziły się ponieważ zasoby powiązane z serwerem pozwalają tylko na realizację oraz przetworzenie skończonej ilości zapytań oraz odpowiedzi. Dodatkowo wraz z postępem czasu, zwiększaniem się liczby użytkowników chcących nabyć produkt firmy x, sytuacja wymyka się spod kontroli, czego efektem jest całkowicie zawieszenie aplikacji. Pomimo, że firma x wydała bardzo duże środki pieniężne na kampanie reklamowe produktu oraz przyciągnęła dużo potencjalnych klientów poprzez zaniedbanie nie udało się jej osiągnąć wyznaczonego celu, ucierpiał też jej wizerunek.
Aby uniknąć sytuacji przedstawionej powyżej, powinno się przeprowadzać testy wydajnościowe mającej na celu symulację obciążenia, która pozwoli na zbadanie wytrzymałości aplikacji na zadany, spodziewany ruch.
Wiedząc już co nieco o testach performance i dlaczego się je wykonuje, możemy zastanowić się jakie są przyświecające im główne cele oraz co jest przede wszystkim mierzone ? W testach performance dokonujemy pomiaru:
Dawno, dawno temu nie było tak dużego wyboru narzędzi do wykonywania testów performanceowych jak dzisiaj. Zazwyczaj wszystko odbywało się manualnie i było wykonywane przez grupę zwykłych testerów połączonych za pomocą komputerów do serwera. Grupa ta np. w tym samym momencie wcisnęła przycisk zapisz w aplikacji wysyłając formularz do serwera. W ten sposób było generowane obciążenie. Był to sposób bardzo nieefektywny oraz mało opłacalny. Po pierwsze trzeba było znaleźć „armię” ludzi do testowania oraz posiadać dużo zasobów w postaci sprzętu podłączonego do serwera. Generowało to bardzo duże koszta. Następnym problemem była synchronizacja „armii” testerów, aby wysłali wszystko w jednym czasie, ponieważ chcieliśmy mieć oczywiście jednakowe obciążenie w danej chwili. Również pojawiały się inne problemy typu jak zbierać oraz agregować dane z testów, które były rozproszone oraz jak zrobić taki test, który byłby powtarzalny za każdym razem. Te problemy zostały zniwelowane poprzez pojawienie się specjalnych aplikacji dedykowanych do mierzenie wydajności. Do powszechnie używanych takich narzędzi możemy zaliczyć:
Posiadając już odpowiednie narzędzie do przeprowadzania testów performance (W moim przypadku najczęściej jest to JMeter) , można zastanowić się nad tym jakie testy powinniśmy przeprowadzić oraz jakie dane będą nam potrzebne do przeprowadzenia analizy działania naszej aplikacji w warunkach wzmożonej aktywności. Zatem testy performance możemy podzielić na trzy główne grupy, którymi są:
Jak widać każdy rodzaj przeprowadzonych powyżej testów ma na celu zbadanie innego aspektu działania aplikacji w warunkach wzmożonej aktywności. Daje nam to szczegółowe dane które pozwolą na ulepszenie jej pod kątem działania oraz dopasowanie odpowiednich zasobów.
Tak jak było już wspominane, w życiu możemy się spotkać z wieloma aplikacjami łączącymi się np. z serwerami za pośrednictwem internetu, z których korzysta pewna liczba logujących się odbiorców, czy to w urzędach, czy to w firmach oraz przedsiębiorstwach, czy też w zwykłych witrynach internetowych. Zdarza się, że taka aplikacja lub strona działa bardzo dobrze w ograniczonym środowisku dla niedużej liczby odbiorców jednak pod wpływem wzmożonej aktywności zaczynają się dziać z nią różne ciekawe oraz niemiłe dla odbiorców rzeczy. Jako przykład podajmy firmę zajmującą się grami, która postanowiła wydać grę online o tematyce post-apokaliptycznej.
W pierwszych godzinach po ostatecznym wydaniu produkcji, serwery nie wytrzymały „inwencji twórczej” graczy, podczas której zostało zrzucone w grze kilka pocisków nuklearnych. Duża liczba napływających danych spowodowała przeciążenie oraz całkowite wyłączenie serwerów co skutkowało tym, że gra w którą grała bardzo duża liczba odbiorców została odłączona na kilka / kilkanaście godzin do czasu usunięcia awarii. Jak wiadomo gracze nie byli zadowoleni tym faktem, że po zakupie premierowej produkcji nie mogą w nią zagrać z powodu trudności zalogowania się.
Innym przykładem z życia może być aplikacja rządowa do zliczania głosów poprzez rządowy serwis internetowy. Przed wyborami aplikacja działała wyśmienicie zliczając poprawnie głosy zalogowanych użytkowników, lecz autorzy aplikacji nie spodziewali się, że może ona cieszyć się tak dużym zainteresowaniem podczas wyborów. Również w tym przypadku serwery nie wytrzymały przepływu danych.
Jak można zauważyć nasuwa się pewna analogia. W obu przypadkach zaniedbując testy performance obie firmy „strzeliły sobie w kolano” (podobnie jak już wymieniona wcześniej przykładowa firma x) narażając się na straty finansowe, a przede wszystkim wizerunkowe. Jak wiadomo pierwsze wrażenie jest najważniejsze, a niesmak po zaniedbaniach pozostaje na bardzo długie lata.
Podsumowując testy performance są istotnym elementem w kulturze testowania i powinny być one przeprowadzane w miarę systematycznie z rozwojem aplikacji. Dzięki nim możemy uzyskać potrzebne nam dane do oszacowania odpowiednich optymalnych zasobów do poprawnego działania aplikacji. Także testy te pomagają odszukać nam błędy spowodowane dużym natłokiem danych oraz tworzyć zabezpieczenia przed atakami z zewnątrz.