Fastapi Stres Testi

Dec 05 2022
Locust Python Ölçeklenebilirlik testi, web hizmeti üretimine hazır hale gelmenin önemli bir parçasıdır. Gatling, Apache JMeter, The Grinder, Tsung ve diğerleri gibi yük testi için pek çok araç var.

çekirge piton

Ölçeklenebilirlik testi, web hizmeti üretimine hazır olmanın önemli bir parçasıdır. Gatling, Apache JMeter, The Grinder, Tsung ve diğerleri gibi yük testi için pek çok araç var. Ayrıca Python'da yazılmış ve İstekler kitaplığı üzerine oluşturulmuş bir tane (ve benim favorim) var: Locust .

Locust web sitesinde fark edildiği gibi:

Locust'un temel bir özelliği, tüm testinizi Python kodunda tanımlamanızdır. Hantal kullanıcı arayüzlerine veya şişirilmiş XML'e gerek yok, sadece düz kod.

çekirge kurulumu

Performans testi python modülü Locust, PyPI'de mevcuttur ve pip veya easy_install aracılığıyla kurulabilir.

pip install locustio or: easy_install locust

Örnek locustfile.py

Ardından, docs örneğini izleyerek locustfile.py dosyasını oluşturun. Django projesini test etmek için csrftoken desteği ve ajax istekleri için bazı başlıklar eklemek zorunda kaldım. Nihai locustfile.py aşağıdakine benzer bir şey olabilir:

# 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

Locust'u yukarıdaki python locust dosyasıyla çalıştırmak için, eğer dosya locustfile.py olarak adlandırılmışsa , şunu çalıştırabiliriz ( locustfile.py ile aynı dizinde ):

locust --host=http://example.com

Python yük testi uygulaması Locust başlatıldığında ziyaret etmelisinizhttp://127.0.0.1:8089/ve orada Locust örneğimizin web arayüzünü bulacaksınız. Ardından simüle edilecek kullanıcı sayısını (örn. 300) ve Hatch oranını (üreyen kullanıcı/saniye) (örn. 10) girin ve Swarming'i Başlat'a basın . Bundan sonra Locust, kullanıcıları “kuluçkadan çıkarmaya” başlayacak ve sonuçları tabloda görebileceksiniz.

Python Veri Görselleştirme

Yani, tablo güzel ama sonuçları bir grafik üzerinde görmeyi tercih ederiz. İnsanların Locust'a grafiksel arayüz eklemek istedikleri bir sorun var ve Locust verileri için grafiklerin nasıl görüntüleneceğine dair çeşitli önermeler var. Python etkileşimli görselleştirme kitaplığı Bokeh kullanmaya karar verdim .

Python grafik kitaplığı Bokeh'i PyPI'den pip kullanarak kurmak kolaydır:

pip install bokeh

İşte Bokeh sunucusunu çalıştırmanın bir örneği .

Locust verilerini ziyaret ederek JSON formatında alabiliriz.http://localhost:8089/stats/requests. Veriler şöyle bir şey olmalı:

{
       "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
    }

Hep birlikte koşmak

Yani Locust'umuz çalışıyor (hayır ise, ile başlatın ) ve şimdi ile locust --host=http://example.combaşlamalı ve ardından çizici.py ile çalıştırmalıyız . Komut dosyası çağrılarımızın gösterdiği gibi , belgeyi görüntülemek için doğru URL'ye otomatik olarak bir tarayıcı sekmesi açılır.Bokehserverbokeh servepython plotter.py

Locust zaten testi yapıyorsa, sonuçları hemen grafiklerde göreceksiniz. Aksi takdirde şu adreste yeni bir test başlatın:http://localhost:8089/ve Bokeh sekmesine dönün ve test sonuçlarını gerçek zamanlı olarak izleyin.

Bu kadar. Kodun tamamını github'da bulabilirsiniz . Kopyalayıp örneği çalıştırmaktan çekinmeyin.

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