by Logo Technical Blog – Future Processing
01.07.2013
Użycie własnego kodu w JMeterze_

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.

Related Posts

Comments

Cookies

This website stores cookies on your computer. These cookies are used to improve our website and provide more personalized services to you, both on this website and through other media. To find out more about the cookies we use, see our Cookies policy.