Użycie własnego kodu w JMeterze

Użycie własnego kodu w JMeterze

data: 1 lipca, 2013
czas czytania: 3 min
autor: Łukasz Pińkowski

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.jarApacheJMeter_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ę:

pinkowski

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.

Newsletter IT leaks

Dzielimy się inspiracjami i nowinkami z branży IT. Szanujemy Twój czas - obiecujemy nie spamować i wysyłać wiadomości raz na dwa miesiące.

Subscribe to our newsletter

Administratorem Twoich danych osobowych jest Future Processing S.A. z siedzibą w Gliwicach. Twoje dane będziemy przetwarzać w celu przesyłania cyklicznego newslettera dot. branży IT. W każdej chwili możesz się wypisać lub edytować swoje dane. Więcej informacji znajdziesz w naszej polityce prywatności.

Subscribe to our newsletter

Administratorem Twoich danych osobowych jest Future Processing S.A. z siedzibą w Gliwicach. Twoje dane będziemy przetwarzać w celu przesyłania cyklicznego newslettera dot. branży IT. W każdej chwili możesz się wypisać lub edytować swoje dane. Więcej informacji znajdziesz w naszej polityce prywatności.