Testy warunków skrajnych Fastapi
Pyton szarańczy
Testowanie skalowalności jest ważną częścią przygotowania do produkcji usług internetowych. Istnieje wiele narzędzi do testowania obciążenia, takich jak Gatling, Apache JMeter, The Grinder, Tsung i inne. Jest też jeden (i mój ulubiony) napisany w Pythonie i zbudowany na bibliotece Requests : Locust .
Jak zauważono na stronie Locust:
Podstawową cechą Locust jest to, że opisujesz wszystkie swoje testy w kodzie Pythona. Nie ma potrzeby niezgrabnych interfejsów użytkownika ani rozdętego kodu XML, wystarczy zwykły kod.
Instalacja szarańczy
Moduł Pythona do testowania wydajności Locust jest dostępny na PyPI i może być zainstalowany przez pip lub easy_install.
pip install locustio or: easy_install locust
Przykład locustfile.py
Następnie utwórz locustfile.py zgodnie z przykładem z dokumentów. Aby przetestować projekt Django musiałem dodać kilka nagłówków dla obsługi csrftoken i żądań ajax. Końcowy plik locustfile.py może wyglądać następująco:
# locustfile.py
from locust import HttpLocust, TaskSet, task
class UserBehavior(TaskSet):
def on_start(self):
self.login()
def login(self):
# GET login page to get csrftoken from it
response = self.client.get('/accounts/login/')
csrftoken = response.cookies['csrftoken']
# POST to login page with csrftoken
self.client.post('/accounts/login/',
{'username': 'username', 'password': 'P455w0rd'},
headers={'X-CSRFToken': csrftoken})
@task(1)
def index(self):
self.client.get('/')
@task(2)
def heavy_url(self):
self.client.get('/heavy_url/')
@task(2)
def another_heavy_ajax_url(self):
# ajax GET
self.client.get('/another_heavy_ajax_url/',
headers={'X-Requested-With': 'XMLHttpRequest'})
class WebsiteUser(HttpLocust):
task_set = UserBehavior
Aby uruchomić Locust z powyższym plikiem locust python, jeśli nazywał się locustfile.py , moglibyśmy uruchomić (w tym samym katalogu co locustfile.py ):
locust --host=http://example.com
Po uruchomieniu aplikacji Locust do testowania obciążenia Pythona powinieneś odwiedzićhttp://127.0.0.1:8089/i tam znajdziesz web-interfejs naszej instancji Locust. Następnie wprowadź Liczba użytkowników do symulacji (np. 300) i Współczynnik wylęgu (użytkownicy spawnowani/sekundę) (np. 10) i naciśnij Start swarming . Następnie Locust zacznie „wykluwać” użytkowników i będziesz mógł zobaczyć wyniki w tabeli.
Wizualizacja danych w Pythonie
Tak więc tabela jest ładna, ale wolelibyśmy zobaczyć wyniki na wykresie. Istnieje problem , w którym ludzie proszą o dodanie interfejsu graficznego do Locust i istnieje kilka propozycji, jak wyświetlić wykresy dla danych Locust. Zdecydowałem się na interaktywną bibliotekę wizualizacji Python Bokeh .
Łatwo jest zainstalować bibliotekę graficzną Pythona Bokeh z PyPI za pomocą pip:
pip install bokeh
Oto przykład uruchomienia serwera Bokeh.
Możemy uzyskać dane Locust w formacie JSON odwiedzająchttp://localhost:8089/stats/requests. Dane powinny mieć coś takiego:
{
"errors": [],
"stats": [
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "/",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": "GET",
"num_requests": 9
},
{
"median_response_time": 350,
"min_response_time": 311,
"current_rps": 0.0,
"name": "Total",
"num_failures": 0,
"max_response_time": 806,
"avg_content_length": 17611,
"avg_response_time": 488.3333333333333,
"method": null,
"num_requests": 9
}
],
"fail_ratio": 0.0,
"slave_count": 2,
"state": "stopped",
"user_count": 0,
"total_rps": 0.0
}
Bieganie razem
Tak więc nasza Locust działa (jeśli nie, zacznij od locust --host=http://example.com) i teraz powinniśmy zacząć Bokehserverod bokeh serve, a następnie uruchomić nasz plotter.py z python plotter.py. Jak pokazują nasze wywołania skryptu , karta przeglądarki jest automatycznie otwierana pod właściwym adresem URL, aby wyświetlić dokument.
Jeśli Locust już przeprowadza test, natychmiast zobaczysz wyniki na wykresach. W przeciwnym razie rozpocznij nowy test o godzhttp://localhost:8089/i wróć do zakładki Bokeh i obserwuj wyniki testów w czasie rzeczywistym.
Otóż to. Cały kod można znaleźć na githubie . Możesz go sklonować i uruchomić przykład.
git clone https://github.com/steelkiwi/locust-bokeh-load-test.git
cd locust-bokeh-load-test
pip install -r requirements.txt
locust --host=<place here link to your site>
bokeh serve
python plotter.py

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































