Source: https://www.tuanh.net/blog/devops/locust-for-microservices-testing
Các bạn có lo lắng về khả năng ứng dụng của mình có thể xử lý được đột biến người dùng hay không? Nếu có, các bạn đã đến đúng chỗ! Hôm nay, tôi sẽ giới thiệu một công cụ tên là Locust. Nó giúp bạn kiểm thử ứng dụng dưới tải nặng để phát hiện các vấn đề trước khi ra mắt. Hãy xem nó như một bài kiểm tra sức chịu đựng cho ứng dụng của bạn!
1. Giới thiệu
Sau một số tìm hiểu, tôi đã tìm thấy liên kết chính thức của Locust tại đây. Vui lòng truy cập để biết thêm thông tin. Trong bài viết này, tôi sẽ giới thiệu cơ bản và các khái niệm chính của Locust, cung cấp một cái nhìn tổng quan để giúp bạn hiểu rõ hơn về tài liệu sau này. Hãy bắt đầu! Như đã đề cập ở trên, Locust là một công cụ mã nguồn mở được sử dụng để kiểm thử tải cho ứng dụng và dịch vụ web. Locust được viết bằng Python, làm cho cấu trúc mã nguồn của nó linh hoạt và dễ hiểu. Bạn có thể viết kịch bản kiểm thử tải bằng Python, sử dụng một loạt các tiện ích có sẵn trong thư viện của Locust. Điều này giúp dễ dàng tùy chỉnh kiểm thử tải theo nhu cầu cụ thể của ứng dụng của bạn.
2. Ưu và Nhược Điểm
Ưu điểm:
- Dễ học và sử dụng: Với cấu trúc mở linh hoạt và sử dụng Python làm ngôn ngữ lập trình, Locust dễ học và sử dụng đối với những người quen thuộc với Python.
- Mô phỏng mạnh mẽ: Locust cho phép bạn mô phỏng hàng ngàn người dùng truy cập đồng thời, giúp dễ dàng kiểm thử hiệu năng và tải của hệ thống.
- Tích hợp linh hoạt: Locust có thể tích hợp với nhiều công cụ và dịch vụ khác nhau như Jenkins, Grafana và các hệ thống giám sát khác để phân tích và trực quan hóa hiệu năng.
- Cộng đồng hỗ trợ lớn: Có một cộng đồng người dùng và nhà phát triển lớn, cung cấp quyền truy cập nhanh chóng vào thông tin, hướng dẫn và câu trả lời cho các câu hỏi. Nhược điểm:
- Chỉ hỗ trợ HTTP: Locust chủ yếu được sử dụng cho các ứng dụng web dựa trên HTTP. Đối với các ứng dụng khác như gRPC hoặc WebSocket, bạn cần tự tạo các kịch bản kiểm thử phức tạp hơn.
- Khó xử lý các tác vụ đồng thời phức tạp: Mặc dù Locust mạnh mẽ trong việc mô phỏng hàng ngàn người dùng đồng thời, nhưng việc xử lý các tác vụ đồng thời phức tạp có thể khó khăn và yêu cầu kỹ năng lập trình cao hơn.
- Hiệu năng ảo: Trong môi trường kiểm thử, Locust có thể tạo ra một số tác động đến hiệu năng của máy chủ và mạng, nhưng nó không phản ánh đầy đủ hiệu năng thực tế trong môi trường sản xuất.
3. Thực hành
Locust có thể được sử dụng theo nhiều cách khác nhau. Trong bài này, tôi sẽ chia sẻ một trong những phương pháp đó. Chúng ta sẽ sử dụng môi trường container của Docker để chạy Locust.
Đầu tiên, bạn cần cài đặt Docker. Nếu chưa cài đặt, bạn có thể tham khảo theo liên kết này để biết thêm thông tin. Trong quá trình này, tôi đã sử dụng hệ điều hành Windows.
Sau khi cài đặt Docker, chúng ta sẽ tiến hành viết một script để thực hiện các cuộc gọi API đến một dịch vụ. Ở đây, tôi sẽ sử dụng một API mẫu có sẵn tại https://shibe.online/api/shibes?count=1&urls=false&httpsUrls=false. Script như sau:
from locust import HttpUser, task, constant_throughput, events
from locust.log import setup_logging
import os
import requests
import json
import re class Test(HttpUser): def on_start(self): pass @task(1) def getMetadata(self): self.client.request('GET', "/api/shibes?count=1&urls=false&httpsUrls=false")
Sau khi hoàn thành những bước trước đó, nhiệm vụ tiếp theo của bạn là tạo ra một tệp cấu hình có tên là Dockerfile. Tệp này sẽ chứa các hướng dẫn chi tiết để xây dựng một image (hình ảnh) Docker. Image Docker này sẽ được sử dụng để chạy các thử nghiệm tải (load testing) bằng công cụ Locust.
FROM locustio/locust:2.14.2 COPY scripts/test.py /home/locust/locustfile.py
COPY resources /home/locust
Khi chạy, Docker sẽ pull image locustio/locust:2.14.2 và cài đặt nó vào môi trường máy ảo của bạn. Đồng thời, nó sẽ sao chép file scripts/test.py mà bạn đã viết trước đó vào thư mục /home/locust/ và đổi tên thành locustfile.py. Điều này là do khi bạn kích hoạt API, Locust sẽ chỉ nhận dạng file được đặt tên là locustfile.py. Vì vậy, hãy đảm bảo không đặt tên cho file này khác đi.
Để chạy, trước tiên cần build image bằng cách sử dụng...
docker build -t locust_load_test .
Sau đó
docker run -p 8089:8089 locust_load_test
Tôi triển khai ứng dụng này trên cổng 8089 của container và kết nối nó với cổng 8089 trên máy tính cục bộ.
Number of total users to simulate là số lượng yêu cầu đồng thời được gửi đi cùng một lúc. Hatch rate là số giây để tăng số lượng người dùng. Number of users to increase là số lượng người dùng được thêm vào mỗi lần. Step duration là thời gian chạy của thử nghiệm. Tôi đã chạy thử nghiệm với tối đa 20 người dùng, tăng thêm 1 người dùng mỗi giây.
Bảng này cung cấp thông tin về thời gian yêu cầu trung bình, yêu cầu nhanh nhất và chậm nhất tính bằng mili giây, số lượng yêu cầu trên giây và số lượng yêu cầu thất bại. Ngoài ra, bảng còn hiển thị biểu đồ về thời gian trong suốt quá trình kiểm thử tải.
Biểu đồ 1 hiển thị số lượng yêu cầu trên mỗi giây theo thời gian. Biểu đồ 2 hiển thị thời gian phản hồi theo thời gian, trong đó đường màu vàng biểu diễn thời gian phản hồi mà 95% người dùng sẽ nhận được. Đường màu xanh biểu diễn thời gian phản hồi trung bình. Biểu đồ cuối cùng hiển thị số lượng người dùng gửi yêu cầu theo thời gian.
4. Tóm tắt
Ở trên, tôi đã chia sẻ với bạn định nghĩa, khái niệm, một số ưu điểm và nhược điểm của Locust để bạn tham khảo và cân nhắc. Ngoài ra, có một demo đơn giản ở cuối. Tôi hy vọng bạn thấy nó hữu ích. Nếu bạn gặp bất kỳ vấn đề nào trong quá trình triển khai, đừng ngần ngại để lại bình luận bên dưới. Tôi rất sẵn lòng giúp đỡ. Tạm biệt và hẹn gặp lại!