Tes Stres Fastapi

Dec 05 2022
Pengujian Skalabilitas Locust Python adalah bagian penting untuk menyiapkan produksi layanan web. Ada banyak alat untuk pengujian beban, seperti Gatling, Apache JMeter, The Grinder, Tsung dan lainnya.

Piton belalang

Pengujian skalabilitas adalah bagian penting untuk menyiapkan produksi layanan web. Ada banyak alat untuk pengujian beban, seperti Gatling, Apache JMeter, The Grinder, Tsung dan lainnya. Ada juga satu (dan favorit saya) yang ditulis dengan Python dan dibangun di atas pustaka Permintaan : Locust .

Seperti yang terlihat di situs web Locust:

Fitur mendasar dari Locust adalah Anda menjelaskan semua pengujian Anda dalam kode Python. Tidak perlu UI yang kikuk atau XML yang membengkak, cukup kode biasa.

Instalasi belalang

Pengujian kinerja modul python Locust tersedia di PyPI dan dapat diinstal melalui pip atau easy_install.

pip install locustio or: easy_install locust

Contoh locustfile.py

Kemudian buat locustfile.py mengikuti contoh dari docs. Untuk menguji proyek Django saya harus menambahkan beberapa header untuk dukungan csrftoken dan permintaan ajax. Final locustfile.py bisa seperti berikut:

# 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

Untuk menjalankan Locust dengan file locust python di atas, jika diberi nama locustfile.py , kita dapat menjalankannya (dalam direktori yang sama dengan locustfile.py ):

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

Saat aplikasi pengujian beban python Locust dimulai, Anda harus mengunjungihttp://127.0.0.1:8089/dan di sana Anda akan menemukan antarmuka web dari instance Locust kami. Kemudian masukkan Jumlah pengguna untuk disimulasikan (mis. 300) dan Laju penetasan (pengguna yang dihasilkan/detik) (mis. 10) dan tekan Mulai berkerumun . Setelah itu Locust akan mulai "menetas" pengguna dan Anda akan dapat melihat hasilnya di tabel.

Visualisasi Data Python

Jadi, tabelnya bagus tapi kami lebih suka melihat hasilnya di grafik. Ada masalah di mana orang meminta untuk menambahkan antarmuka grafis ke Locust dan ada beberapa proposisi bagaimana menampilkan grafik untuk data Locust. Saya telah memutuskan untuk menggunakan pustaka visualisasi interaktif Python Bokeh .

Sangat mudah untuk menginstal pustaka grafik python Bokeh dari PyPI menggunakan pip:

pip install bokeh

Berikut adalah contoh menjalankan server Bokeh.

Kita bisa mendapatkan data Locust dalam format JSON dengan mengunjungihttp://localhost:8089/stats/requests. Data harus ada seperti ini:

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

Menjalankan semua bersama-sama

Jadi Locust kita sedang berjalan (jika tidak, mulailah dengan locust --host=http://example.com) dan sekarang kita harus mulai Bokehserverdengan bokeh servelalu jalankan plotter.py kita dengan python plotter.py. Seperti yang ditunjukkan oleh panggilan skrip kami , tab browser secara otomatis dibuka ke URL yang benar untuk melihat dokumen.

Jika Locust sudah menjalankan pengujian, Anda akan segera melihat hasilnya di grafik. Lain memulai tes baru dihttp://localhost:8089/dan kembali ke tab Bokeh dan lihat hasil pengujian secara real time.

Itu dia. Anda dapat menemukan seluruh kode di github . Jangan ragu untuk mengkloningnya dan menjalankan contohnya.

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