JMeter Throughput Controller to krótki wpis przedstawiający Wam możliwość urealnieni ruchu. Dzięki temu Logic Controllerowi, możemy w łatwy sposób rozłożyć ruch tak by procentowo bombardować poszczególne końcówki czy adresy url. Dla osób zaczynających testowanie wydajność – koniecznie zapoznaj się z dobrymi praktykami korzystania z JMetera.
Wprowadzenie
Przeprowadzając testy wydajnościowe testerzy często stają przed zadaniem zweryfikowania w jaki sposób aplikacja czy np. endpointy będą reagować na określony ruch. Problemem jest, że z doświadczenia zauważam, iż testowanie wydajności skupia się na jedym adresie url czy jednej, określonej końcówce. Z perspektywy produkcyjnego korzystanie warto przy takich testach zweryfikować rozłożenie ruchu. W przypadku gdy aplikacja korzysta z zasobów backendowych do prezentowania treści, warto obciążyć różne miejsca w serwisie by zweryfikować jej działanie.
Zarys
Załóżmy, że otrzymujemy zadanie by stworzyć test wydajnościowy, który ma wywołać ruch w ilości 100 requestów na sekundę. W trakcie testu mamy obciążyć 5 adresów URL. Jeden z adresów – przyjmijmy strona główna ma być obciążona w ilości 60% a pozostałe 4 po 10 %. W takim przypadku tworzysz i test i rozdzielasz ruch standardowo:
HP – 60 requestów na sec, URL1-4 10 requestów na sec.
Po co nam zatem podział procentowy, gdy możemy sami szybko przeliczyć obciążenie. Moim zdaniem, jeżeli coś możemy sobie ułatwić to tak róbmy, szczególnie że powyższy przykład był trywialny, jednakże w przypadku bardziej zaawansowanych testów, musielibyśmy więcej się naliczyć by uzyskać określony efekt.
Tworzymy test
Chcą przedstawić w jak najprostszy sposób test, pominiemy tutaj kwestię dodawania adresów url jako zmiennych. Tworzymy nowy projekt i wybieramy Theard i określony sposób wywoływania wątków, u nas będzie to standardowy Thread Group. Następnie idziemy do Logic Controllers i wybieramy Throughput Controller a następnie spośród samplerów – HTTP Request. Teraz możemy stwórzmy w naszej Theard Grupie pięć takich zapytań na różne adresy URL. W ramach Theard Group wpisuję by test wykonał 10r/1s/10 co powinno wywołać łącznie 100 requestów w ramach naszego testu. W ramach testu podzieliłem ruch procentowo 60-10-10-5-15.
Jak możecie zaobserwować ruch został rozłożony bardzo dobrze dla poszczególnych adresów URL. Zaletą tego testu jest fakt, że wystarczy w ramach Throughput Controllera zmienić rozkład procentowy by zweryfikować działanie.
Pamiętamy by dodając jednemu adresowi procentową ilość użytkowników, zmienić też drugiemu by uzyskać 100% i otrzymać rezultaty z testu jaki dokładnie chcieliśmy przeprowadzić.
Może jednak będę liczyć ręcznie requesty?
Rozumiem, że powyższy prosty przykład może nie przekonywać w 100% osób, które chcą sobie szybko przeliczyć requesty na rozkład procentowy. Jasne, jest to zrozumiałe jednakże pozwól, że poproszę Cię o przypomnienie lub zapoznanie sobie z tematem plugin managera i tworzenia innych zapytań. Do czego zmierzam? Zainstaluj dodatki o których pisałem we wskazanym wyżej artykule i dodaj teraz w ramach Theard Group zamiast HTTP Request dodaj bzm – Concurrency Thread Group.
W ramach tego testu będziemy chcieli wywołać 3 minutowy test, który ma za zadanie:
a) obciążać cele przez 2 minuty w ilości 100 requestów na sekundę;
b) dojście do celu będzie w 5 krokach, które mają trwać 1 minutę by dojść do docelowego obciążenia
Na potrzeby kolejnego screena, test będzie uruchomiony ponownie z GUI lecz na mniejszym obciążeniu, by nie raziły Was w oczy ilości errorów. Pamiętaj, by testy standardowo uruchamiać w trybie non-gui.
Na powyższym screenie widać, że przeliczanie ilości sampli liczbowo, zamiast procentowo byłoby już znacznie trudniejsze aniżeli z wykorzystaniem Throughput Controller.
Throughput Controller – Total Executions
Mamy też opcję by limitować ilość requestów na dany adres URL. Jest to przydatne jak w przypadkach jak powyżej lub też gdy chcemy podzielić procentowo rozkład na różne adresy URL lub endpointy, a jeden z nich by miał ich określoną – maksymalną ilość. Podobnie jak w pierwszym przykładzie, rozdzieliliśmy ruch. Chcemy wywołać 10 r/s /1s/10. Łącznie zatem powinno być 100 requestów na wszystkich urlach. Wpiszemy jednak ilość użytkowników dla HP – 100, pozostała część dostanie rozkład procentowy w ilości 10-10-5-15. Zatem jak poradzi sobie z tym test?
Jak widać pierwszy adres otrzymał 100 requestów, w pozostali 40% z żądanego ruchu. To ważne byście wiedzieli, że w przypadku szachowania rozdziałem ruchu procentowym czy limitowaniem requestów per zapytanie mieli świadomość, że tak ta sytuacja się kształtuje. Możesz zauważyć, że Home Page otrzymało 100 requestów, zaś pozostałe URLe 40% z zaplanowanego ruchu. Gdzie pozostałe 60% – nie wykonane, gdyż tego nie zleciliśmy testowi. Nadmiarowe 100 requestów? Nie to jakby odrębna ilość, którą wywołaliśmy w ramach naszego testu – wskazując Total Executions.
Podsumowanie
JMeter Throughput Controller to kolejna porcja informacji dla testerów chcących testować wydajność z wykorzystaniem JMetera. Dzięki temu artykułowi będziesz mógł/a sobie ułatwić tworzenie planu testów. Pamiętaj, że wykonując już rzeczywiste testy nie korzystaj z trybu GUI i korzystaj z dobrych praktyk korzystania z JMetera. Więcej o JMeterze stale piszemy w dziale dedykowanym dla tego narzędzia.