TungNT (Blue)

tungnt.blue@gmail.com

User Tools

Site Tools


development:load-test:locust

Locust là một công cụ mã nguồn mở cho phép bạn thực hiện kiểm tra tải (load testing) cho các hệ thống web.

1. Cài đặt & sử dụng Locust

Bước 1: Cài đặt Locust

pip install locust

Bước 2: Viết kịch bản test

Bạn cần tạo một file Python để định nghĩa các hành vi của người dùng mà bạn muốn mô phỏng. Ví dụ, tạo một file có tên locustfile.py:

locustfile.py
from locust import HttpUser, TaskSet, task, between
 
class UserBehavior(TaskSet):
    @task(1)
    def index(self):
        self.client.get("/")
 
    @task(2)
    def about(self):
        self.client.get("/about")
 
class WebsiteUser(HttpUser):
    tasks = [UserBehavior]
    wait_time = between(1, 5)

Trong kịch bản trên:

  • WebsiteUser là lớp đại diện cho người dùng ảo.
  • UserBehavior là một tập hợp các task mà người dùng có thể thực hiện.
  • @task dùng để đánh dấu một phương thức là một tác vụ. Số trong dấu ngoặc xác định tần suất tương đối của task đó (ví dụ: task với @task(2) sẽ được thực hiện gấp đôi so với task với @task(1)).
  • wait_time xác định khoảng thời gian ngẫu nhiên mà người dùng sẽ chờ trước khi thực hiện một task mới.

Bước 3: Chạy Locust

Sau khi đã viết xong kịch bản test, bạn có thể chạy Locust bằng lệnh sau trong terminal:

locust -f locustfile.py

Locust sẽ khởi động một server web trên cổng 8089 (mặc định). Bạn có thể truy cập vào giao diện người dùng của Locust bằng cách mở trình duyệt và đi đến địa chỉ http://localhost:8089.

Bước 4: Cấu hình và bắt đầu test từ giao diện web

  • Truy cập vào http://localhost:8089.
  • Điền số lượng người dùng ảo (Number of total users to simulate).
  • Điền tỷ lệ người dùng tăng lên mỗi giây (Spawn rate).
  • Điền URL của hệ thống bạn muốn kiểm tra (Host).
  • Bấm nút “Start swarming” để bắt đầu kiểm tra tải.

Bước 5: Phân tích kết quả

Giao diện của Locust sẽ hiển thị các thông số như số lượng yêu cầu đã được gửi, số lượng yêu cầu bị lỗi, thời gian phản hồi trung bình, và nhiều thông tin khác giúp bạn phân tích hiệu suất của hệ thống.

2. Ví dụ test tải qua API

test.py
import os
import rsa
import uuid
import base64
import json
import time
from locust import HttpUser, task, between, constant
from colorama import Fore, Back, Style, init
 
# locust -f test.py --csv=locust_report 
class VerifyInfoTestAPI(HttpUser):
    #wait_time = between(1, 5) # Khoảng thời gian ngẫu nhiên giữa các tác vụ
    wait_time = constant(0.1)  # Chờ 1 giây giữa các yêu cầu
 
    host = "https://example.vn"
 
    @task
    def verify_info(self):
        with open('private_key.pem', 'rb') as privateKeyFile:
            privateKeyContent = privateKeyFile.read()
        privateKey = rsa.PrivateKey.load_pkcs1(privateKeyContent, 'PEM')
 
        requestId = str(uuid.uuid4())
        partnerId = 'OKBZG0NX42'
        amount = 30000
 
        payload = requestId + "|" + partnerId + "|" + str(amount)
 
        msg = payload.encode("utf-8")
 
        signature = rsa.sign(msg, privateKey, 'SHA-1')
        signature = base64.b64encode(signature)
 
        url = '/service/test'
 
        payload = {
            'request_id': requestId,
            'partner_id': partnerId,
            'amount': amount,
            'signature': signature
        }
 
        print("Params: " + str(payload))
 
        with self.client.post(
            url,
            data = payload
        ) as response:
            if response.status_code == 200:
                print(Fore.WHITE + "Response Status (" + requestId + "): " + str(response.status_code) + Style.RESET_ALL)
 
                responseContent = response.json()
                banks = responseContent['data']['banks']
 
                if len(banks) > 0:
                    print(Fore.WHITE + "Response bank (" + requestId + "): " + str(banks) + Style.RESET_ALL)
                else:
                    print(Fore.RED + "Response bank (" + requestId + "): is empty!" + Style.RESET_ALL)
            else:
                print(Fore.RED + "Response Status (" + requestId + "): " + str(response.status_code) + Style.RESET_ALL)          

3. Spawn Rate trong Locust

Spawn rate là một thông số quan trọng trong việc kiểm tra tải với Locust. Nó xác định tốc độ mà các người dùng ảo (virtual users) được tạo ra và bắt đầu mô phỏng hành vi người dùng thực.

3.1. Cách hoạt động của Spawn Rate

Khi bạn bắt đầu một phiên kiểm tra tải từ giao diện web của Locust, bạn sẽ thấy hai thông số cần thiết lập:

  1. Number of total users to simulate: Tổng số người dùng ảo bạn muốn tạo ra.
  2. Spawn rate: Tốc độ mà các người dùng ảo này sẽ được tạo ra mỗi giây.

Ví dụ, Giả sử bạn thiết lập:

  1. Number of total users to simulate: 100
  2. Spawn rate: 10

Điều này có nghĩa là Locust sẽ tạo ra 10 người dùng ảo mỗi giây cho đến khi đạt tổng số 100 người dùng. Tức là, quá trình tạo ra toàn bộ người dùng sẽ mất 10 giây (100 users / 10 users per second = 10 seconds).

3.2. Ý nghĩa của Spawn Rate

Spawn rate cho phép bạn kiểm soát quá trình tăng tải lên hệ thống một cách từ từ thay vì tạo ra toàn bộ người dùng ảo ngay lập tức. Điều này quan trọng vì:

  • Giảm sốc hệ thống: Nếu bạn tạo ra toàn bộ người dùng ảo ngay lập tức, hệ thống của bạn có thể bị quá tải ngay từ đầu và không cung cấp dữ liệu chính xác về hiệu suất.
  • Mô phỏng thực tế hơn: Trong thực tế, người dùng không xuất hiện đồng thời mà tăng dần theo thời gian. Một spawn rate hợp lý giúp bạn mô phỏng tình huống thực tế hơn.
  • Theo dõi phản ứng hệ thống: Tăng tải từ từ giúp bạn theo dõi và phân tích cách hệ thống của bạn phản ứng với tải tăng dần, cho phép bạn xác định điểm mà hệ thống bắt đầu gặp vấn đề.

3.3. Thiết lập Spawn Rate trong Giao Diện Web

Khi bạn chạy Locust và truy cập giao diện web tại http://localhost:8089, bạn sẽ thấy hai ô nhập liệu để thiết lập số lượng người dùng và spawn rate. Dưới đây là các bước cụ thể:

  • Truy cập giao diện web của Locust: Mở trình duyệt và đi đến http://localhost:8089.
  • Điền thông tin kiểm tra tải:
    • Number of total users to simulate: Nhập tổng số người dùng ảo mà bạn muốn mô phỏng.
    • Spawn rate: Nhập số lượng người dùng sẽ được tạo ra mỗi giây.
  • Host: Điền URL của hệ thống hoặc API mà bạn muốn kiểm tra tải.
  • Bắt đầu kiểm tra: Nhấn “Start swarming” để bắt đầu quá trình kiểm tra tải.

3.4. Ví dụ Thiết lập Cụ Thể

Giả sử bạn muốn kiểm tra tải một API tại http://api.example.com với tổng số 200 người dùng và bạn muốn tăng tải với tốc độ 20 người dùng mỗi giây, bạn sẽ:

  1. Nhập 200 vào ô “Number of total users to simulate”.
  2. Nhập 20 vào ô “Spawn rate”.
  3. Nhập http://api.example.com vào ô “Host”.
  4. Nhấn “Start swarming”.

Với thiết lập này, Locust sẽ tạo ra 20 người dùng mỗi giây và quá trình tạo ra toàn bộ 200 người dùng sẽ mất 10 giây.

development/load-test/locust.txt · Last modified: 2024/08/06 06:59 by 127.0.0.1

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki