Jmeter: Pierwsze kroki w testowaniu wydajności Anna Kovalchuk 07.05.2014
Plan 1. Wymagania i cele 2. Modelowanie obciążenia 3. Parametryzacja i korelacja scenariuszy 4. Analiza wyników
Help! My boss wants me to load test our web app! Klatka z video: http://youtu.be/bkorp55aqvg
Wydajność Stopień, w jaki system lub moduł, przy zadanych ograniczeniach, spełnia zamierzoną funkcjonalność odnośnie szybkości przetwarzania i przepustowości. [IEEE 610] Patrz także efektywność. Performance: The degree to which a system or component accomplishes its designated functions within given constraints regarding processing time and throughput rate. See also efficiency. http://testerzy.pl/slownik/wydajnosc
Efektywność Zdolność oprogramowania do zapewnienia odpowiedniego poziomu wydajności, relatywnie do ilości zużytych zasobów, w określonych warunkach. [ISO 9126] Zachowanie z czasem (Time behavior) Wykorzystanie zasobów (Resource behaviour) Efficiency: The capability of the software product to provide appropriate performance, relative to the amount of resources used under stated conditions. [ISO 9126] http://testerzy.pl/slownik/efektywnosc
Performance efficiency ISO 25010 : Wydajność w stosunku do ilości zasobów wykorzystywanych pod ustalonymi warunkami Zachowanie z czasem Wykorzystanie zasobów Zgodność The performance relative to the amount of resources used under stated conditions - Time Behaviour - Resource Utilisation - Compliance
Niezawodność ISO 25010 : stopień, w jakim system lub jego element wykonuje określone funkcje w określonych warunkach, w określonym okresie czasu. Stabilność Odporność na błędy Zdolność do przewrócenia stanu początkowego Zgodność Reliability - The degree to which a system or component performs specified functions under specified conditions for a specified period of time. - Maturity - Fault Tolerance - Recoverability - Compliance
Testowanie wydajności = Testowanie efektywności + Testowanie niezawodności *zależy od celów testowania
Przykład wymagań Przy obciążeniu do 100 jednocześnie pracujących klientów z systemem: średni czas odpowiedzi powinien wynosić nie więcej niż 2,5 sekundy.
Przykład wymagań Przy obciążeniu do 100 jednocześnie pracujących klientów z systemem: średni czas odpowiedzi powinien wynosić nie więcej niż 2,5 sekundy. liczba błędów nie powinna przekroczyć 1%
Przykład wymagań Przy obciążeniu do 100 jednocześnie pracujących klientów z systemem: średni czas odpowiedzi powinien wynosić nie więcej niż 2,5 sekundy. liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5%
Przykład wymagań Przy obciążeniu do 100 transakcji na sekundę typu «ping» i 10 transakcji na sekundę typu «akcja»: średni czas odpowiedzi powinien wynosić nie więcej niż 2,5 sekundy. liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5%
Przykład wymagań Przy obciążeniu do 100 transakcji na sekundę typu «ping» i 10 transakcji na sekundę typu «akcja»: średni czas odpowiedzi dla transakcji typu «akcja» powinien być nie więcej niż 2,5 sekundy, a na typu «ping» 1 sekunda liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5%
Przykład wymagań Przy obciążeniu do 100 transakcji na sekundę typu «ping» i 10 transakcji na sekundę typu «akcja»: średni czas odpowiedzi dla transakcji typu «akcja» powinien być nie więcej niż 2,5 sekundy, a na typu «ping» 1 sekunda liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5% Serwer aplikacji powinien zużywać nie więcej niż 75% CPU i nie więcej niż 2,2 GB pamięci RAM
Przykład wymagań Przy obciążeniu do 100 transakcji na sekundę typu «ping» i 10 transakcji na sekundę typu «akcja»: średni czas odpowiedzi dla transakcji typu «akcja» powinien być nie więcej niż 2,5 sekundy, a na typu «ping» 1 sekunda liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5% Serwer aplikacji powinien zużywać nie więcej niż 75% CPU i nie więcej niż 2,2 GB pamięci RAM System powinien nawiązywać nie więcej niż trzy połączenia jednocześnie z DBMS
Jakie wymagania są lepsze? Szczegółowe? VS Nieformalne i rozmyte? Przy obciążeniu do 100 transakcji na sekundę typu «ping» i 10 transakcji na sekundę typu «akcja»: średni czas odpowiedzi dla transakcji typu «akcja» powinien być nie więcej niż 2,5 sekundy, a na typu «ping» 1 sekunda liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5% Serwer aplikacji powinien zużywać nie więcej niż 75% CPU i nie więcej niż 2,2 GB pamięci RAM System powinien nawiązywać nie więcej niż trzy połączenia jednocześnie z DBMS Przy obciążeniu do 100 jednocześnie pracujących klientów z systemem: średni czas odpowiedzi powinien wynosić nie więcej niż 2,5 sekundy.
Cel testowania Sprawdzenie zgodności z wymaganiami
Przykład wymagań Przy obciążeniu do 100 transakcji na sekundę typu «ping» i 10 transakcji na sekundę typu «akcja»: średni czas odpowiedzi dla transakcji typu «akcja» powinien być nie więcej niż 2,5 sekundy, a na typu «ping» 1 sekunda liczba błędów nie powinna przekroczyć 1% rozrzut (dyspersja) nie przekracza 5% Serwer aplikacji powinien zużywać nie więcej niż 75% CPU i nie więcej niż 2,2 GB pamięci RAM System powinien nawiązywać nie więcej niż trzy połączenia jednocześnie z DBMS
Cel testowania Sprawdzenie zgodności z wymaganiami Uzyskać informacje na temat wydajności i dostarczyć zainteresowanym stronom, aby mogły one wykorzystać je do podejmowania decyzji
Cele testowania Wykorzystanie otrzymanej informacji 1. Sprawdzenie zgodności z wymaganiami 2. Porównanie różnych wersji i konfiguracji systemu 3. Identyfikowanie wąskich miejsc (bottlenecks)
Informacja Statyczna VS Dynamiczna Odsetek blędów przy stałym obciążeniu 100 transakcji na sekundę Zużycie pamięci RAM w ustalonym obciążeniu 100 transakcji na sekundę Zależność Ilości błędów od obciążenia Zależność Zużycia RAM od obciążenia
Jakie wymagania są lepsze? Szczegółowe? VS Nieformalne i rozmyte?
Dynamiczna informacja
Trzy bazowe komponenty Generacja obciążenia Monitorowanie charakterystyk wydajności Analiza wyników
Narzędzia dla generowania obciązenia JMeter http://jmeter.apache.org/ grinder http://grinder.sourceforge.net/ multi-mechanize http://testutils.org/multimechanize/ Gatling http://gatling-tool.org/ Tsung http://tsung.erlang-projects.org/ loadui http://www.loadui.org/ curl-loader http://curl-loader.sourceforge.net/
Z chmur BlazeMeter http://blazemeter.com/ Blitz https://www.blitz.io/ Load Impact http://loadimpact.com/ LoadStorm http://loadstorm.com/ SOASTA http://www.soasta.com/
Monitoring Wbudowane narzędzia Narzędzia systemu operacyjnego (Perfmon, SAR) Narzędzia serwerowe, DBMS,... Narzędzia specjalistyczne (Zabbix, Nagios, Hyperic)
Analiza wyników Wbudowane narzędzia Arkusze kalkulacyjne Pakiety dla przetwarzania danych statystycznych
Praktyczna demonstracja
Zadanie Zapisać rekorderem scenariusz dodawania grup Ustawić grupę wątków dla 50 użytkowników i czas trwania testu 180 sec Monitorować zmiany średniego czasu reakcji (response time) z czasem w Graph Result
Plan 1. Wymagania i cele 2. Modelowanie obciążenia 3. Parametryzacja i korelacja scenariuszy 4. Analiza wyników
Model obciążenia Ile i jakich akcji(działań) na system ma być na system w jednostkę czasu Log file Dane historyczne http://www.symplur.com/blog/dayofdiabetes-shared-in-real-time/
Słownik pojęć Profil - zbiór scenariuszy, danych testowych, i opis sposobu uruchomienia scenariuszy Scenariusz sekwencją zapytań, rozdzielonych czasowymi odstępami Zapytanie jednostka interakcji pomiędzy systemem testującym i testowanym systemem
Zależność od czasu Zależność od czasu akcji (dla każdego rodzaju zapytań) stała zmienna
Rodzaj oddziaływań Osobne zapytania Testowanie zorientowane na kliknięcia (hit-oriented testing) Scenariusz (kolejność wniosków) Testowanie zorientowane na scenariusze (scenario-oriented testing)
Przykład zorientowany na hity Osobne akcje Przeglądanie listy grup (2) Otwieranie strony z formularzem (1) Wysłanie wypełnionego formularza (1)
Przykład modelu obciążenia Stałe obciążenie wirtualnych użytkowników lub transakcji Cel: uzyskać informacje o zachowaniu systemu
Praktyczna demonstracja
Praktyczna demonstracja Zmodyfikować przykład 1 a) Ustawić 100 wątków, mają oni być uruchomione po kolei za 1 minutę i obciążenie generowanie przez 10 min b) Ustawić stałe obciążenie 2 zapytania na sekundę w ciągu 10 min
Przykład modelu obciążenia Stale zwiększa obciążenie Cel: Aby wyszukać punkt nasycenia
Praktyczna demonstracja
Praktyczna demonstracja Zmodyfikować przykład 1 Ustawić 600 wątków, mają oni rosnąć z czasem od 0 do 600 i obciążenie generowanie przez 10 min
Przykład modelu obciążenia Stałe obciążenie bliskie do granicznego Cel: Aby sprawdzić stabilność
Praktyczna demonstracja Zmodyfikować przykład 1 Ustawić obciążenie na 10% mniej od krytycznego i testować przez 10 min
Praktyczna demonstracja
Przykład modelu obciążenia Obciążenie z "seriami" Cel: Aby sprawdzić stabilność Plugin Throughput Shaping Timer
Plan 1. Wymagania i cele 2. Modelowanie obciążenia 3. Parametryzacja i korelacja scenariuszy 4. Analiza wyników
Parametryzacja Opcje konfiguracyjne Dane testowe Generowanie danych losowych Dane z tabeli (pliku zewnętrznego)
Praktyczna demonstracja
Korelacja Przekazywanie danych z odpowiedzi na poprzednie zapytanie do jednego z następnych zapytań wyodrębnienie danych z wyniku zapytania wykorzystanie wyodrębnionych danych
Praktyczna demonstracja
Plan 1. Wymagania i cele 2. Modelowanie obciążenia 3. Parametryzacja i korelacja scenariuszy 4. Analiza wyników
To jest testowanie! Problem może być znaleziono lub nie znaleziono zebranych danych nie jest wystarczająco niepoprawna metoda analizy może być że w ogóle nie tego szukaliśmy Nie można udowodnić brak defektów eksperyment pokazuje coś ale mogą istnieć różne interpretacje
Примеры проблем большое время отклика большое количество отказов высокое потребление ресурсов большой разброс значений отдельные значительные отклонения
Przykłady problemów Duży czas reakcji Duża liczba błędów Wysokie zużycie zasobów duży zakres wartości niektóre znaczące odchylenia
brak zasobów Źródło problemów nieoptymalne algorytmy niewłaściwe zbalansowanie niewłaściwe keszowanie niewłaściwa synchronizacja (blokowanie) niewłaściwe zarządzanie kolejką defekty funkcjonalne
Analiza jakościowa Przegląd ręczny danych surowych Budowanie wykresów Szukanie wzorców Szukanie trendy Szukanie anomalie
Analiza ilościowa Średnie jednakowe Gdzie lepsza wydajność
Błędy pierwszego i drugiego rodzaju Fałszywo-pozytywny wynik ma objawy defektu, ale w rzeczywistości nie ma defektu, ale objawy są spowodowane przez coś innego Fałszywo-niegatywny wynik objawy defektu nie pojawiają się lub nie są zauważone, ale w rzeczywistości jest defekt.
Raport Aktualny Trafny (Relevant) Zrozumiały Samowystarczalny Opierający się na danych
Dane żródłowe Nie zapomnij, aby wskazać: kiedy uzyskane dane jakie testy były uruchomione w jaką konfiguracją były uruchomione
Trzeba pamiętać że Dane liczbowe dostarczone w dużej ilości są ciężkie do zrozumienia Ludzie źle znają matematykę Ludzie nie mają intuicyjnego rozumienia zjawisk statystycznych Błędna interpretacja danych prowadzi do błędnych wniosków
Dobry raport zawiera Porównanie czegoś z czymś Jest oczywiste, co jest lepsze a co gorsze Zawiera ustne wyjaśnienia Skala wykresów dobrana odpowiednio Łączy obserwację z celami Zawiera linki do danych źródłowych
Narzędzia Wbuwane pluginy w Jmeter Excel Loadosophia RapidMiner
Przykład analizy
Literatura 1. Jmeter user manual i wiki 2. Apache Jmeter. Emily H. Halili 3. Web Load testing for dummies 4. Performance Testing Guidance for Web Applications (Microsoft) 5. The Art of Application Performance Testing By Ian Molyneaux 6. Data Mining for the Masses by Dr. Matthew A North (Author)
Dropbox link http://goo.gl/lovv18
Pytania?
Dziękuję za uwagę