Kiểm tra căng thẳng Fastapi

Dec 05 2022
Kiểm tra khả năng mở rộng Locust Python là một phần quan trọng để sẵn sàng sản xuất dịch vụ web. Có rất nhiều công cụ để kiểm tra tải, như Gatling, Apache JMeter, The Grinder, Tsung và những công cụ khác.

Trăn châu chấu

Kiểm tra khả năng mở rộng là một phần quan trọng để sẵn sàng sản xuất dịch vụ web. Có rất nhiều công cụ để kiểm tra tải, như Gatling, Apache JMeter, The Grinder, Tsung và những công cụ khác. Ngoài ra còn có một (và yêu thích của tôi) được viết bằng Python và được xây dựng trên thư viện Yêu cầu : Locust .

Như được chú ý trên trang web Locust:

Một tính năng cơ bản của Locust là bạn mô tả tất cả bài kiểm tra của mình bằng mã Python. Không cần giao diện người dùng cồng kềnh hoặc XML cồng kềnh, chỉ cần mã đơn giản.

cài đặt châu chấu

Kiểm tra hiệu suất mô-đun python Locust có sẵn trên PyPI và có thể được cài đặt thông qua pip hoặc easy_install.

pip install locustio or: easy_install locust

Ví dụ locustfile.py

Sau đó, tạo locustfile.py theo ví dụ từ tài liệu. Để kiểm tra dự án Django, tôi phải thêm một số tiêu đề để hỗ trợ csrftoken và yêu cầu ajax. Locustfile.py cuối cùng có thể giống như sau:

# 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

Để chạy Locust với tệp python locust ở trên, nếu nó có tên là locustfile.py thì chúng ta có thể chạy (trong cùng thư mục với locustfile.py ):

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

Khi ứng dụng thử nghiệm tải python Locust được bắt đầu, bạn nên truy cậphttp://127.0.0.1:8089/và ở đó bạn sẽ tìm thấy giao diện web của phiên bản Locust của chúng tôi. Sau đó, nhập Số lượng người dùng để mô phỏng (ví dụ: 300) và Tỷ lệ nở (người dùng được sinh ra/giây) (ví dụ: 10) và nhấn Bắt đầu swarming . Sau đó Locust sẽ bắt đầu “khai thác” người dùng và bạn sẽ có thể xem kết quả trong bảng.

Trực quan hóa dữ liệu Python

Vì vậy, bảng này rất đẹp nhưng chúng tôi muốn xem kết quả trên biểu đồ hơn. Có một vấn đề trong đó mọi người yêu cầu thêm giao diện đồ họa vào Locust và có một số đề xuất về cách hiển thị biểu đồ cho dữ liệu Locust. Tôi đã quyết định sử dụng thư viện hình ảnh tương tác Bokeh của Python .

Thật dễ dàng để cài đặt thư viện đồ họa python Bokeh từ PyPI bằng cách sử dụng pip:

pip install bokeh

Dưới đây là một ví dụ về việc chạy máy chủ Bokeh.

Chúng tôi có thể lấy dữ liệu Locust ở định dạng JSON khi truy cậphttp://localhost:8089/stats/requests. Dữ liệu nên có một cái gì đó như thế này:

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

Chạy tất cả cùng nhau

Vì vậy, Locust của chúng ta đang chạy (nếu không, hãy bắt đầu với locust --host=http://example.com) và bây giờ chúng ta nên bắt đầu Bokehservervới bokeh serverồi chạy plotter.py của mình với python plotter.py. Khi lệnh gọi tập lệnh của chúng tôi hiển thị , một tab trình duyệt sẽ tự động được mở tới đúng URL để xem tài liệu.

Nếu Locust đã chạy thử nghiệm, bạn sẽ thấy kết quả trên biểu đồ ngay lập tức. Khác bắt đầu một bài kiểm tra mới tạihttp://localhost:8089/và quay lại tab Bokeh và xem kết quả thử nghiệm trong thời gian thực.

Đó là nó. Bạn có thể tìm thấy toàn bộ mã tại github . Vui lòng sao chép mã đó và chạy ví dụ.

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