JMeter


Opis

JMeter jest narzędziem służącym do testowania wydajności aplikacji. Poczętkowo został napisany do testowania aplikacji webowych, jednakże obecna wersja pozwala testować serwery ftp, http, serwlety, zapytania do baz danych oraz wiele innych. JMeter potrafi symulować duże obciązenie na serwerze, sieci lub bazie danych. Posiada narzędzia do graficznej reprezentacji wyników w postaci wykresów.

Obecna implementacja JMetera charakteryzuje się:
Dodatkową zaletą JMetera jest to iż binarna wersja po ściągnięciu nie potrzebuje żadnej instalacji. Można go uruchomić zaraz po rozpakowaniu archiwum.

Przegląd możliwości


Główne okno JMetera zaraz po uruchomieniu:



Po lewej stronie znajduje się drzewo elementów wchodzących w skład skryptu testowego, po prawej zaś szczegóły wybranego elementu.

Test Plan


Plan testów (test plan) reprezentuje kolejne kroki wykonywane przez skrypt JMeter'a podczas testowania wybranego źródła. W skład planu testów może wejść:
Thread group
Grupa wątków jest elementem początkowym każdego planu testów. Każdy inny element musi być zawarty w jakiejś grupie, co pozwala nam na kontrolę współbieżności wykonywania się wątków. JMeter pozwala na kontrolę nad:

Każdy wątek wykonuje testy niezależnie od innych, dzięki czemu można symulować współbieżność odwołań np do serwisu www. Możliwe jest ustalenie czasu jaki oddziela kolejne uruchomienia wątków w celu odzwierciedlenia jak najbardziej realnych warunków wykorzystania testowanego serwisu.

Logic controller
JMeter posiada dwa typy kontrolerów - logical controllers oraz samplers.

Samplers wysyłają żądanie do serwera, np HTTP. Logic controller daje kontrolę nad logiką testu w postaci decyzji o tym kiedy wysłać żądanie. Logic controller może posiadać "dzieci" w postaci elementów typu: sampler, logic controller lub configuration element. Dzięki takiej architekturze możliwa jest zmiana kolejności żądan przychodzących od potomnych elementów.
Poniżej przedstawiony jest przykładowy plan testów z wykorzystaniem logic controllera:


Sample generating controller
Sample generating controlers lub inaczej samplers to gotowe mechanizmy wysyłania żądań do różnych serwerów. Aktualna implementacja JMetera posiada następujące mechanizmy:

Listener
Listener dostarcza informacji dotyczących wyników testów wykonywanych przez JMeter. Proste listenery np. Graph Result potrafią generować wyniki w postaci graficznej w czasie działania scryptów JMetera.
Dodatkowo listener posiada możliwość zbierania informacji do pliku w celu późniejszego ich wykorzystania.
Listener można dodać w każdym miejscu planu testów.

Timer
Domyślnie wątki JMetera wysyłają żądania w zadeklarowanej kolejności bez robienia przerw pomiędzy żądaniami. Czasami chcielibyśmy. wprowadzić opróźnienie pomiędzy kolejnymi żądaniami -- z pomocą przyjdzie nam Timer. Timer pozwala na ustalenie przerwy czasowej pomiędzy uruchamianymi testami.

Assertion
Asercje pozwalają na kontrolę zwracanych przez serwer wyników. Dzięki asercjom można przetestować aplikację pod kontem poprawności zwracanych danych.
JMeter pozwala na sprawdzanie wyniki zwróconego na konkretne żądanie. Wynik może być przeparsowany w poszukiwaniu wyrażenia regularnego.

HTTP Proxy

Ręczna budowa testów szczególnie skomplikowanych serwisów byłaby bardzo czasochłonna, dlatego JMeter posiada możliwość "nagrania" własnego scenariusza testowego. Jedynie co trzeba zrobić to ustawić w przeglądarce jak serwer proxy ip i port na których nasłuchuje JMeter.
Aby nie zaciemniać wyników testów możliwe jest pomijanie żądań do niektórych plików (np. pliki graficzne).
JMeter pozwala parametryzować wysyłane żądania. Np zamiast konkternego serwera XXX możemy mieć zmienną $(server) i później za pomoca odpowiedniej wbudowanej funkcji pobrać np. z pliku nazwę serwera. To samo dotyczy wartości wysyłanych za pomocą formularza.

Tryb serwera

Aby zbliżyć wyniki testow do rzeczywistych warunków istnieje możliwość podłączenia GUI JMetera do wielu JMeterów pracujących w trybie serwer. Uruchamiając wiele serwerów na różnych maszynach testujących zyskujemy:



Inne narzędzia

  1. ab

    Program posiada też swoją wersję online - http://codeflux.com/exec/ab/

    Apache posiada wbudowane narzędzie ApacheBench. Pozwala ono na mierzenie wydajności serwera poprzez wysyłanie do niego w krótkich okresach czasu żądań HTTP. Po przeprowadzeniu testu zwracana jest szczegółowa statystyka. Program znajduje się w katalogu z Apache'm w folderze bin.

    Program wywołujemy z linii poleceń, jego najważniejsze parametry to:



    Przykładowe wywołanie:

    ab.exe -n100 -c3 -k http://www.example.org/ab_test.php

    Spowoduje ono pobranie pliku ab_test.php z serwera www.example.org 100 razy, przy czym w jednym czasie będą przeprowadzane 3 połączenia..

    Program ten jest często wykorzystywany do przeprowadzania benchmarków wielu skryptów napisanych np. w PHP.

    Sprawdza się doskonale do szybkiego przetestowania wydajności jednego konkretnego adresu. Ta prostota jest przydatna, kiedy chcemy coś szybko sprawdzić a nie chcemy tracić czasu na naukę korzystania z bardziej wyspecjalizowanych narzędzi.


  2. WebInject

    WebInject jest darmowym narzędziem napisanym w Perlu (może być uruchomione na każdej maszynie z zainstalowanym interpreterem Perla). Możliwe jest korzystanie z aplikacji zarówno przy pomocy GUI jak i z linii poleceń. Narzędzie używa plików XML do definiowania swoich testów (config.xml definiujący gdzie znajduje się plik z testami oraz właściwy plik z serią znaczników xml - jeden znacznik odpowiada jednemu testowi) co wiąże się z pracochłonną specyfikacją kolejnych testów. Ponadto narzędzie umożliwia testowanie poprawności odpowiedzi serwera WWW poprzez wyszukiwanie wzorca w zawartości otrzymanej strony oraz mierzenie czasów odpowiedzi.





  3. Badboy

    Badboy prezentuje trochę inne podejście do tematyki testów. Zamiast pisać żmudne scenariusze testowe program umożliwia symulowanie działania przeglądarki - zdarzenia wykonane przez użytkownika są "podsłuchiwane", zapamiętywane a następnie mogą być odtworzone. Niestety do swojej pracy wykorzystuje przeglądarkę Internet Explorer tym samym jest to narzędzie praktycznie nieprzenośne.



Przykłady



Ćwiczenia

Przed rozpoczęciem wykonywania ćwiczeń należy:
- zainstalować na komputerze w laboratorium tomcata (http://tomcat.apache.org/download-55.cgi#5.5.17).
- pobrać plik z testem i rozpakować go w podkatalogu webapps.
- do CLASSPATH dodać plik (tomcat-root)/common/lib/servlet-api.jar
- plik serwletu Sservlet.java znajduje się w katalogu test/WEB-INF/classes (plik jest ten jedynie szkieletem do dalszych działań)
- po dokonaniu zmian w kodzie kompilujemy plik standardowym poleceniem javac Sservlet.java


Bibliografia