Użycie własnego kodu w JMeterze
- Processes, standards and quality
- Technologies
- Others
Podczas pisania testów w JMeterze, konieczne może być wywołanie własnego kodu wykonującego zadanie niemożliwe do zrealizowania za pomocą standardowych funkcji JMetera.
Powodów, dla których musimy to zrobić, może być wiele np.:
- Konieczność inicjalizacji zmiennych JMetera w niemożliwy dla JMetera sposób (CSV Data Set Config)
- Konieczność parsowania odpowiedzi serwera w sposób niedostępny przy użyciu zwykłych elementów
W celu napisania kodu uruchamianego z JMetera użyjemy środowiska Eclipse. W pierwszej kolejności tworzymy nowy projekt typu Java Project, po czym do Build Patha dodajemy dwie biblioteki JMetera: ApacheJMeter_core.jar i ApacheJMeter_java.jar. Biblioteki te znajdują się w katalogu libext w głównym katalogu JMetera. Następnie tworzymy nową klasę implementującą interfejs org.apache.jmeter.protocol.java.sampler.JavaSamplerClient.
Interfejs składa się z czterech metod, jednak do naszych celów wystarczy implementacja dwóch z nich:
public Arguments getDefaultParameters()
W metodzie tej mamy możliwość dodania argumentów, które będą dostępne w GUI JMetera. Nie jest to konieczne, jednak umożliwia parametryzację naszego rozwiązania lub implementację kilku funkcji za pomocą jednej klasy. Argumenty dodane przez nas będa typu String, a w JMeterze widoczne będą jako zwykłe pola tekstowe. Przykładowy kod definiujący parametry to:
public Arguments getDefaultParameters() { Arguments args = new Arguments(); args.addArgument(new Argument("Argument1", "1", null, "Przykladowy argument1")); args.addArgument(new Argument("Argument2", "2", null, "Przykladowy argument2")); return args; }
W powyższym kodzie definiujemy dwa argumenty o nazwach Argument1 i Argument2, domyślnych wartościach odpowiednio 1 i 2 oraz opisach Przykładowy argument1 i Przykładowy argument2.
Drugą metodą potrzebną do realizacji funkcji, którą chcemy zaimplementować, jest:
public SampleResult runTest(JavaSamplerContext jsc)
W kodzie metody mamy dostęp do:
- wartości zdefiniowanych przez nas parametrów – jsc.getParameter(„Argument1”)
- zmiennych JMetera – JMeterContextService.getContext().getVariables(), możemy odczytywać wartości zmiennych za pomocą metody get lub dodawać nowe (ustawiać nową wartość) za pomocą metody put
- wartości ostaniego Samplera/Requesta
– JMeterContextService.getContext().getPreviousResult().getResponseDataAsString()
Jako wartość zwracaną przez metodę najlepiej pozostawić null.
Przykładowy kod, ustawiający wartość zmiennej JMetera o nazwie podanej w argumencie losowo na jedną z predefiniowanych wartości:
public static String[] parameterValues = new String[]{"Wartosc1", "Wartosc2", "Wartosc3", "Wartosc4"}; public static Random r = new Random(); @Override public SampleResult runTest(JavaSamplerContext jsc) { JMeterContextService .getContext() .getVariables() .put(jsc.getParameter("Argument1"), parameterValues[r.nextInt(parameterValues.length)]); return null; }
Po zakończeniu implementacji naszej funkcji eksportujemy nasz projekt do pliku jar, który musimy umieścić w katalogu libext w głównym katalogu aplikacji JMeter.
W celu użycia naszego kodu w Jmeterze musimy do naszegu testu dodać Sampler typu Java Request i w comboboksie Classname wybrać napisaną wcześniej przez nas klasę:
W oknie konfiguracji naszego requesta powinny się pojawić zdefiniowane przez nas argumenty wypełnione podanymi przez nas domyślnymi wartościami.
Po uruchomieniu testu nasz sampler będzie uruchamiany analogicznie jak pozostałe samplery w JMeterze, czyli zgodnie z położeniem w drzewie testu.