Kiểm tra căng thẳng Fastapi
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

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































