Testowanie GraphQL z JMeterem

JMeter

Loading

Testowanie GraphQL z JMeterem to wpis który ma za zadanie pomóc Wam testowanie wydajności GraphQLa. W związku z coraz szerszym korzystaniem z tej technologii, konieczne jest testowanie czy zapytania będą wydajne i będą potrafiły obsłużyć wiele zapytań. Dla osób zaczynających testowanie wydajność – koniecznie zapoznaj się z dobrymi praktykami korzystania z JMetera. 

Wprowadzenie

Na początku konieczne jest przygotowanie środowiska pod testy. Zgodnie z dobrymi praktykami konieczne jest posiadanie JMetera w najnowszej wersji – obecnie JMeter 5.4. Aktualna wersja do pobrania znajduje się zawsze na stronie apache jmeter w dziale download. Ponadto wersja 5.4 jest tym bardziej niezbędna, gdyż zgodnie z bugiem 64752, został dodany GraphQL/HTTP Request Sampler. Dzięki dodaniu tego samplera, stworzenie testu będzie o wiele łatwiejsze aniżeli bez posiadania takiej możliwości. Dla zwiększenia możliwości narzędzia, przed przystąpieniem do tworzenia testów, zainstaluj plugin managera i polecane dodatki

Czym jest GrapqQL

Dla osób pierwszy raz stykających się z tym tematem, opiszemy w kilku zdaniach czym jest GraphQL. Zatem GraphQL powstał z potrzeb osób tworzących Facebooka, którzy szukali sposobu na zwiększenie wydajności ładowania newsfeedów na urządzeniach mobilnych. Korzystając z tradycyjnego API, requesty były wysyłane do wielu endpointów by uzyskać oczekiwane dane. Dzięki temu API GraphQL może przyjmować zapytania w jednym endpoincie, gdzie są pobierane te dane o które pytamy. GraphQL jest wspierany przez wiele języków – np. Javascript, PHP, Python, Java, C#, C++, Groovy, Scala, Flutter i wiele innych opisanych szczegółowo tutaj

Tworzymy test

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 z poziomu Theard wybieramy Sampler i wyszukujemy nowy element GraphQL/HTTP Request. Dla pewności potwierdzenia czy requesty zostały wykonane prawidłowo dodajmy dwa listnery – View Results Tree oraz Summary Report. W naszym przypadku konieczne było dodanie HTTP Header Manager gdzie ustawimy odpowiednie wartości. 

Testowanie GraphQL z JMeterem - test plan

HTTP Header Manager

Idąc od góry rozpiszemy krótko poszczególne elementy, by test zadziałał. W HTTP Header Manager by zadziałał nam test konieczne było ustawienie nagłówka. W polu name – content-type, zaś w value application/json. 

Theard Group

W tym miejscu jak w każdym teście podajemy liczbę requestów w jakim czasie te requesty mają zostać wysłane i ile razy taka czynność ma zostać powtórzona. Tutaj nie wykonujemy żadnej niestandardowej czynności,  działamy podobnie jak w zwykłym teście. 

GraphQL HTTP Request

To nowy element w JMeterze 5.4, który stał się podstawą niniejszego posta. Podstawową różnicą do zwykłego HTTP Requesta jest fakt, że radomowo mamy ustawioną metodę POST. Standardowo podajemy nazwę serwera oraz ścieżkę. Poniżej w zakładce QUERY podajemy swoje zapytanie dzięki któremu otrzymamy żądane dane. Gdy już prawidłowo uzupełnisz dane, to dodaj dwa listnery. 

Testowanie GraphQL z JMeterem - query

Listeners

View Results Tree – jest bardzo dobrym elementem pokazującym kilka szczegółów gdy wysyłamy próbnie requesty, weryfikując czy nasze zapytanie jest dobrze napisane. 

Testowanie GraphQL z JMeterem - view results tree

Summary Report – ten element pozwoli nam zweryfikować wstępnie z jaką szybkością odpowiada nam endpoint, czy są jakieś procentowe ilości błędów, by później móc już wykonywać testy zgodnie ze sztuką. Podobnie można też korzystać z ciut bardziej rozbudowanego Aggregate Report

Testowanie GraphQL z JMeterem - summary report

Assertions

Nasz test najlepiej uzupełnić o Assertions, by móc jak najlepiej zweryfikować czy żądane query jest zwracane w naszych zapytaniach. Dodatkowo jak w standardowych testach możemy ustawić asercje czasowe, rozmiarowe czy zwracanych danych. Jedną z popularniejszych i korzystniejszych może być Response Assertion gdzie możemy wybrać:

 

Taka konstrukcja pozwoli Wam sprawdzić zwracane dane w odpowiedzi. W Duration Assertion będziemy mogli sprawdzić czy nasz endpoint odpowiada w określonym przez nas czasie. W połączeniu z wcześniejszą asercją będziemy mieli podwójną weryfikację – sprawdzenie pełności danych i czasu odpowiedzi. Czyli tak jak powinno odpowiadać API – szybko i z dobrymi danymi. 

Podsumowanie

Testowanie GraphQL z JMeterem to kolejna porcja informacji dla testerów chcących zacząć testować wydajność z wykorzystaniem JMetera. Te kilka prostych elementów pozwoli Ci rozpocząć testowanie tego API i mieć pewność, że wywoływane przez Ciebie zapytania są prawidłowe. 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.