Testowanie obciążenia API za pomocą Locust

Testowanie obciążenia API za pomocą Locust

Testowanie obciążenia interfejsu API za pomocą szarańczy: wprowadzenie

Prawdopodobnie byłeś już w takiej sytuacji: piszesz kod, który coś robi, na przykład punkt końcowy. Testujesz swój punkt końcowy za pomocą Postmana lub Insomnia i wszystko działa dobrze. Przekazujesz punkt końcowy programiście po stronie klienta, który następnie korzysta z API i wdraża aplikację. Ale potem interfejs API kończy się niepowodzeniem, gdy użytkownicy korzystają z aplikacji.

Może to być bardzo irytująca sytuacja, nie wspominając już o kosztach dla firmy. Właśnie dlatego twórcy oprogramowania przeprowadzają różnorodne testy systemów oprogramowania, aby upewnić się, że działają one zgodnie z oczekiwaniami. Interfejsy API nie różnią się. Przed wdrożeniem należy wykonać co najmniej testy wydajnościowe i testy bezpieczeństwa.

Testy wydajności można podzielić na testy funkcjonalności i testy obciążenia. Testy funkcjonalności są tym, do czego zwykle używasz Postmana lub Insomnia. Zapewniają, że Twój interfejs API działa zgodnie z oczekiwaniami. Z drugiej strony testy obciążenia bardziej dotyczą tego, jak twój interfejs API działa w rzeczywistym użyciu i szczytowym obciążeniu, i właśnie o tym jest ten artykuł. Przyjrzyjmy się bardziej szczegółowo testom obciążenia.

Co to jest testowanie obciążenia interfejsu API?

Testy obciążenia interfejsu API to rodzaj testów używanych przez programistów do symulacji normalnego i szczytowego obciążenia punktów końcowych. Ten rodzaj testów pozwala programistom ocenić rzeczywistą wydajność interfejsu API przed jego wdrożeniem. Pomaga im określić maksymalną wydajność operacyjną systemu, ewentualne wąskie gardła i spadek wydajności. Testy obciążenia interfejsu API są zwykle przeprowadzane poprzez tworzenie wirtualnych użytkowników, a następnie używanie ich do jednoczesnego testowania funkcjonalności interfejsu API. 

Testy obciążenia API mierzą metryki, takie jak czas odpowiedzi, jednoczesnych użytkowników, przepustowość, poziomy wykorzystania zasobów, średni czas między awariami (MTBF), średni czas do awarii (MTTF) i tak dalej. Wszystkie te metryki można wykorzystać do określenia, jak dobrze działa interfejs API.

Rodzaje testowania obciążenia

Istnieje kilka rodzajów testów obciążenia, z których każdy ma swoje przypadki użycia. Przyjrzyjmy się niektórym z nich.

Testowanie obciążenia: Jest to podstawowa forma testu obciążenia. Służy do oceny wydajności systemu (w tym przypadku interfejsu API) przy normalnym obciążeniu i oczekiwanym obciążeniu szczytowym.

Test naprężeń: Służy do oceny wydajności systemu pod bardzo dużym obciążeniem. Celem tego testu jest sprawdzenie, czy system odzyskuje sprawność po awarii i jak długo to trwa. Obciążenie jest zwykle zwiększane powoli, aż przekroczy możliwości systemu.

Testowanie skoków: Jest to trochę podobne do testów warunków skrajnych, z wyjątkiem tego, że duże obciążenie jest przykładane nagle, w przeciwieństwie do powolnego zwiększania. Ten rodzaj testu pokazuje, co się stanie, gdy nastąpi nagły wzrost średniej liczby użytkowników lub gości lub gdy nastąpi atak DDoS na Twój system.

Testowanie namoczenia: Ten test różni się od pozostałych powyżej. Sprawia, że ​​​​twój system jest poniżej 80% (lub mniej więcej) normalnego obciążenia i pozostawia go działającym przez długi czas, powiedzmy od 12 do 14 godzin. Ten rodzaj testu określa, jak niezawodny jest system w czasie.

Załaduj testowanie interfejsów API za pomocą Locust

Deweloperzy mają dostęp do różnych opcji testowania obciążenia swoich interfejsów API. Niektóre popularne narzędzia do testowania obciążenia to Gatling, JMeter i Locust. W tym artykule skupimy się na szarańczy.

Locust to oparte na Pythonie narzędzie do testowania obciążenia typu open source, używane przez czołowe firmy, takie jak Google, Microsoft i Riot Games, do testowania ich interfejsów API. W tym artykule pokażemy, jak załadować testowy interfejs API. 

W tym samouczku stworzę prosty interfejs API za pomocą Flask. Możesz podążać za mną lub po prostu stworzyć swój interfejs API za pomocą Node lub dowolnego frameworka, z którym czujesz się komfortowo.

wymagania

Python 3

Konfiguracja i instalacja

Najpierw musisz skonfigurować środowisko wirtualne na swoim komputerze, aby nie zepsuć globalnego środowiska Pythona. Aby to zrobić, uruchom następujące polecenia. Pamiętaj, że te polecenia dotyczą terminala Windows.

$mkdir projekt

$ cd /d ścieżka\do\projektu

$ python -m venv venv

$ venv\Scripts\aktywacja

 

Najpierw stworzyliśmy tzw projekt informator. Następnie zmieniliśmy nasz bieżący katalog na projekt. Następnie utworzyliśmy i aktywowaliśmy wirtualne środowisko dla Pythona w tym katalogu. 

Teraz przejdziemy do instalacji Kolba(użyjemy go do stworzenia punktów końcowych do przetestowania obciążenia) i Szarańcza sama. 

 

Aby zainstalować Flask, uruchom. Upewnij się, że jesteś w projekt w którym utworzyłeś środowisko wirtualne.

$ pip zainstalować kolbę

 

Aby zainstalować Locust, uruchom

$ pip zainstaluj szarańczę

 

Gdy to zrobisz, wpisz następujące polecenia. Upewnij się, że jesteś w swoim projekt katalog, kiedy to robisz.

$ kopiuj nul __init__.py

Aplikacja $ mkdir

$ kopiuj nul app\app.py

$ skopiuj nul app\__init__.py

 

To polecenie tworzy pliki, których użyjemy do stworzenia naszych punktów końcowych za pomocą Flask. Nawiasem mówiąc, możesz również utworzyć te pliki za pomocą eksploratora plików. Ale co w tym zabawnego? Gdy to zrobisz, skopiuj poniższy kod do aplikacja.py

z kolby import Flask, jsonify, request

app = Flask (__ name__)

modele_samochodów = [

  { 'marka': 'Tesla', 'model': 'Model S'}

]

 

modele_samolotu = [

  { 'marka': 'Boeing', 'model': '747' }

]

 

@app.route('/samochody')

zdecydowanie get_cars():

  zwróć jsonify(modele_samochodów)

@app.route('/samoloty')

def get_planes():

  zwróć jsonify (plane_models)

if __name__ == '__main__':

    app.run(debug=True)  

 

Powyższy kod zawiera metodę pobierz_samochody używany do uzyskiwania listy marek samochodów i ich modeli oraz get_planes służy do uzyskiwania listy marek samolotów i ich modeli. Abyśmy mogli załadować test tego punktu końcowego, musimy uruchomić app.py. Aby to zrobić, uruchom poniższe polecenie.

$ python ścieżka\do\app.py

Po uruchomieniu tego powinieneś zobaczyć coś takiego:

Testowanie obciążenia API 1

Jeśli skopiujesz adres URL z terminala i wpiszesz samochody or samoloty po /, powinieneś być w stanie zobaczyć tam dane. Jednak naszym celem jest przetestowanie punktu końcowego za pomocą szarańczy, a nie przeglądarki. Więc zróbmy to. Uruchom następujące polecenie w katalogu głównym swojego projekt katalogiem.

 

$ skopiuj nul locust_test.py

 

Spowoduje to utworzenie pliku „locust_test.py” w katalogu głównym twojego projekt informator. Gdy to zrobisz, otwórz plik i wklej poniższy kod. Wkrótce to wyjaśnimy.

 

czas importu

z szarańczy import HttpUser, zadanie, pomiędzy

 

klasa UserBehaviour(HttpUser):

    czas_oczekiwania = między (5, 10)

 

    @zadanie

    def get_cars(self):

        self.client.get('/samochody')

    

    @zadanie

    def get_planes(self):

        self.client.get('/samoloty')

 

Jest to podstawowy przykład użycia Locust do testowania ładowania interfejsu API. Najpierw tworzymy klasę zachowanie użytkownika, któremu można nadać dowolną odpowiednią nazwę, ale musi on rozciągać się Użytkownik HTTP. Użytkownik HTTP to klasa, która zajmuje się tworzeniem instancji wielu wirtualnych użytkowników do wykonywania zadań określonych w pliku zachowanie użytkownika class. 

Zadanie jest określane przez dekorowanie metody za pomocą @zadanie dekorator. Mamy też funkcję tzw pomiędzy() który pozwala nam określić zakres sekund oczekiwania przed wykonaniem następnego zadania. Jak widać, w naszym kodzie przypisaliśmy temu zakres od 5 do 10 sekund. 

Aby uruchomić kod, upewnij się, że nadal jesteś w środowisku wirtualnym. Jeśli ten, który utworzyłeś, jest używany przez serwer obsługujący API, otwórz nowy terminal, zmień katalog na twój projekt katalogu i aktywuj utworzone środowisko wirtualne. Polecenie aktywacji środowiska wirtualnego znajdziesz powyżej. Teraz wprowadź poniższe polecenie w swoim terminalu.

 

$ szarańcza -f locust_test.py

 

Powinieneś zobaczyć coś takiego:

Testowanie obciążenia API 2

Domyślnie interfejs sieciowy locust znajduje się pod adresem http://localhost/8089. Jeśli odwiedzisz witrynę, powinieneś zobaczyć interfejs podobny do tego:

Testowanie obciążenia API 3

Z poziomu interfejsu możemy określić liczbę użytkowników, współczynnik odradzania (liczba użytkowników tworzonych na sekundę) oraz Host. Możesz uzyskać adres swojego hosta, sprawdzając terminal, na którym działa serwer. W naszym przypadku jest to port 5000. Po kliknięciu Zacznij roić się, zostanie wyświetlony poniższy interfejs.

Testowanie obciążenia API 4

To pokazuje różne przydatne metryki, takie jak liczba nieudanych żądań, średni czas żądania, minimalny czas żądania, żądania na sekundę i tak dalej. Gdy będziesz zadowolony z tego, co widzisz, możesz kliknąć przycisk zatrzymania. 


Ponadto Statistics zakładka, jest Wykresy zakładka, która pokazuje więcej Informacja w formie wykresu, jak na obrazku poniżej.

Tam jest wykres całkowitej liczby żądań na sekundę, wykres czasu odpowiedzi, i wykres liczby użytkowników, wszystko wykreślone z czasem. Korzystając z wykresów, możesz określić, ilu użytkowników jest akceptowalnych przy stałym czasie odpowiedzi, lub możesz obserwować swoje wykresy pod kątem stałego czasu odpowiedzi pomimo rosnącej liczby użytkowników i innych podobnych spostrzeżeń. Jeśli chcesz się nimi podzielić statystyki z kimś innym możesz pobrać raport ze strony Pobierz dane patka.

Podsumowując...

Testowanie obciążenia API to kluczowa czynność w procesie programowania, więc upewnij się, że jest ona włączona do cyklu projektowania. Nawiasem mówiąc, możesz również przeprowadzić inne typy testów obciążenia, zmieniając wartości liczby użytkowników i współczynnika odradzania. 

Jeśli chcesz przeprowadzić test szczytowy, podaj dużą wartość (powiedzmy 2000) dla liczby użytkowników, a następnie równie dużą wartość dla współczynnika odradzania (na przykład 500). Oznacza to, że w ciągu 4 sekund utworzysz wszystkich 2000 użytkowników i uzyskasz dostęp do punktów końcowych. Test warunków skrajnych będzie podobny, ale ze znacznie niższą wartością współczynnika odradzania. Aby dowiedzieć się, co możesz zrobić, sprawdź Szarańczę dokumentacja