JMeter Distributed Testing

JMeter

Loading

JMeter Distributed Testing to artykuł opisujący w jaki sposób wykorzystać większą ilość maszyn do uruchamiania testów wydajnościowych gdzie będziemy wysyłać większą ilość requestów.  Gdy zabierasz się za testowanie wydajność, koniecznie zapoznaj się z dobrymi praktykami korzystania z tego narzędzia.

 

W jakim celu

JMeterem w zależności od naszego sprzętu i róznych ustawień możemy efektywnie uruchomić określoną ilość wątków (threads). W tym celu jeżeli posiadasz więcej niż jedną maszynę masz możliwość stworzenia testów w ramach Distributed Testing. System ten polega na stworzeniu maszyny do uruchamiania testów i przetwarzania wyników (Master) a także innych maszyn które służyć będą do wysyłania requestów (Slave). Dzięki takiej konstrukcji będziemy mieli możliwość wysyłania realnie większej ilości wątków a dzięki temu stworzyć rzeczywiste stress testy. 

JMeter Distributed Testing - target slaves master

Na powyższym screenie widzimy przykład z dwoma maszynami typu slave, które będą wysyłać requesty do maszyny Target – np. wskazany adres www. 

 

Konfiguracja

Musisz mieć dostęp zarówno do maszyny Master a także pozostałych typu slave. Przed przystąpieniem do pracy konieczne jest:

  • każda z maszyn (slave), oraz master muszą posiadać taką samą wersję Javy, oraz JMetera;
  • JMeter powinien posiadać te same pluginy i ustawienia na każdej z maszyn;
  • sprawdź adresy IP każdej z maszyn slave i zapisz gdzieś bo będę za chwilę potrzebne.
  • na każdej z maszyn może być konieczność wyłączenia firewalla – musisz to zweryfikować samodzielnie;

Na maszynach typu slave musisz odnaleźć plik jmeter.properties. Następnie znajdź linię 257 i wyszukaj fraggment:   

Remote Hosts - comma delimited

Poniżej tej linijki dodaj (podając własne adresy IP maszyn):

remote_hosts=192.168.0.10, 192.168.0.11, 192.168.0.12, 

Po wykonaniu tych czynności na każdej z maszyn (tudzież poprzez przekopiowanie pliku jmeter properties) włącz wersję GUI JMetera. W zakładce Run, będzie widoczna opcja Remote Start i adresy IP każdej ze wskazanych maszyn.

JMeter Distributed Testing - remote gui mode

 

Następnie w pliku user.properties musisz odnaleźć linijkę i zmienić ponownie na każdej z maszyn:  

server.rmi.ssl.disable=true

Teraz konieczne jest uruchomienie create-rmi-keystore (.bat lub .sh) by móc umożliwić wykonywanie testów z zewnętrznych maszyn i tak:

JMeter Distributed Testing - rmi keystore

Teraz taki plik stworzony na Masterze (rmi_keystore.jks) trzeba przenieść do każdego urządzenia typu SLAVE (katalog bin w JMeterze). Na tę chwilę powinniśmy mieć już możliwość wykonywania takich testów za pomocą zewnętrznych maszyn.

Maszyny typu slave

Na każdej z maszyn typu slave konieczne jest uruchomienie usługi jmeter-server. Na tej podstawie maszyna typu Master będzie wiedziała z których maszyn typu slave może korzystać. Po uruchomieniu maszyny powinieneś otrzymać podobny widok.

To oznacza, że nasza maszyna typu slave jest gotowa na wysyłanie requestów. 

Uruchomienie testów

Możemy dokonać próbnego uruchomienia testów z poziomu GUI (pamiętaj później będziemy uruchamiać w trybie non-gui). Wejdź do JMetera, otwórz lub utwórz nowy test. Następnie wybierz zakładkę RUN – następnie Remote Start i wybierz czy sprawdzasz połączenie pojedynczej maszyny (polecam na pierwszy raz). Możesz też skorzystać z opcji Remote ALL (CTRL+SHIFT+R). Obserwuj wówczas czy wysłane wątki otrzymały status 200 – możesz zawsze dodać asercję by mieć gotową odpowiedź. Dodatkowo możesz śledzić informacje w consoli na urządzeniach typu slave  (po włączeniu jmeter-server). 

Oczywiście dobrą praktyką jest uruchamianie testów z poziomu linii poleceń. O tym wszystkim pisaliśmy w artykule o dobrych praktykach korzystania z JMetera. Poniżej wersja do uruchomienia testu i tak:

jmeter -n -t test.jmx -R 192.168.0.10
jmeter -n -t test.jmx -R 192.168.0.10,192.168.0.20,192.168.0.30 

W pierwszym przypadku mamy uruchomienie pliku o nazwie test.jmx na jednej maszynie zewnętrznej o podanym adresie IP. Drugi przypadek to ten sam test który wykonuje się z trzech odrębnych maszyn typu slave. 

Oczywiście możemy stworzyć test, który stworzy nam raport w postaci HTMLa, który też pozwoli nam zweryfikować na przestrzeni czasu, czy nasze requesty były wysyłane w pożądany sposób.

jmeter -n -t test.jmx C:\apache-jmeter-5.1.1\JmeterResultsCSV\results.csv” -R 192.168.0.10

Podsumowanie

JMeter Distributed Testing to kolejna lekcja pozwalająca Wam znacznie poszerzyć wiedzę i zastosowanie narzędzia. Dzięki zastosowaniu tej metody, będziecie w stanie tworzyć bardziej stabilne i miarodajne testy wydajnościowe. Ponadto dzięki tym czynnościom możemy też stworzyć wydajne stress testy dla naszej aplikacji. Szerzej o JMeterze piszemy w dziale dedykowanym dla tego narzędzia.