Hệ thống tích hợp hai phương pháp kiểm thử chịu tải (stress test) để đánh giá khả năng phản hồi dưới tải cao, đo lường RPS (Requests Per Second) và latency (P50, P95, P99).

### 1. Locust Framework (`backend/locustfile.py`)

Hệ thống sử dụng Locust để giả lập hàng trăm user truy cập đồng thời. Có 2 kịch bản chính được định nghĩa:
- **`ChatUser`**: Mô phỏng người dùng thực tế với thời gian chờ (`wait_time`) giữa các request là 2-5 giây. Nó chia tỉ lệ phân bổ các API: `/api/agent/chat-dev`, `/api/agent/chat` và `/api/products/list`.
- **`QuickBurst`**: Extreme load. Gửi request liên tục không chờ (hoặc chờ cực ngắn từ 0.1-0.5s) vào API `/api/agent/chat-dev`. Dùng để tìm Breaking Point.

Chạy Locust (Web UI tại `http://localhost:8089`):
```bash
locust -f backend/locustfile.py --host http://localhost:5000
```

### 2. Built-in Stress Test API (`backend/api/stress_test/stress_test_route.py`)

Cung cấp API cho phép stress test trực tiếp mà không cần khởi động Locust bằng cách sử dụng `asyncio` và `httpx`.

```mermaid
sequenceDiagram
    participant User
    participant Router as StressTestRouter
    participant Semaphore as Asyncio Semaphore
    participant API as Chatbot API
    
    User->>Router: POST /api/stress-test/run<br>(concurrent=C, total=T)
    Router->>Router: Khởi tạo danh sách T tasks
    
    loop Xử lý bất đồng bộ
        Router->>Semaphore: Yêu cầu quyền thực thi (giới hạn C)
        Semaphore->>API: Gửi POST request (question)
        API-->>Semaphore: Trả về kết quả / Timeout
        Semaphore-->>Router: Tính toán latency_ms & giải phóng quyền
    end
    
    Router->>Router: Tổng hợp Latency (Min, Max, P50, P95, P99) & RPS
    Router-->>User: Trả về Stats Report
```

Phương pháp này cung cấp thống kê trực quan (RPS, lỗi, thời gian phản hồi) trực tiếp từ code Python thay vì dựa vào UI của Locust.