Table of Contents

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:

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

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ì:

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ể:

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.