# K6 Load Testing — Goodgo Platform

## Tổng quan

Các bài load test hiệu năng cho những API path quan trọng, sử dụng [K6](https://k6.io/).

## Bộ kiểm thử

| Script | Mục tiêu | VU đỉnh | Thời lượng |
|--------|----------|---------|-----------|
| `auth.js` | Đăng nhập/Đăng ký | 100 | 2min |
| `listings.js` | Tìm kiếm + Chi tiết | 500 | 3min |
| `search.js` | Tìm kiếm văn bản + Địa lý | 200 | 3min |
| `search-advanced.js` | Kết hợp geo + text + bộ lọc, phân trang | 300 | 3min |
| `admin.js` | Hàng đợi kiểm duyệt, bảng điều khiển, nhật ký audit | 50 | 2.5min |
| `mcp.js` | MCP server discovery, property-search, valuation | 120 | 2.5min |
| `payments.js` | Tạo + Danh sách | 50 | 2min |

## Ngưỡng SLA

| Chỉ số | Ngưỡng |
|--------|--------|
| Độ trễ p50 | < 200ms |
| Độ trễ p95 | < 500ms |
| Độ trễ p99 | < 1000ms |
| Tỷ lệ lỗi | < 1% |

### Ngưỡng tuỳ chỉnh theo bộ kiểm thử

| Bộ kiểm thử | Chỉ số | Ngưỡng |
|-------------|--------|--------|
| search-advanced | advanced_search_duration p95 | < 800ms |
| search-advanced | geo_filter_search_duration p95 | < 800ms |
| admin | moderation_action_duration p95 | < 800ms |
| admin | admin_dashboard_duration p95 | < 500ms |
| mcp | mcp_property_search_duration p95 | < 1500ms |
| mcp | mcp_valuation_duration p95 | < 1000ms |
| mcp | mcp_batch_valuation_duration p95 | < 2000ms |

## Điều kiện tiên quyết

```bash
# Cài đặt K6
brew install k6        # macOS
# hoặc: https://grafana.com/docs/k6/latest/set-up/install-k6/

# Khởi động API
pnpm --filter @goodgo/api run dev
```

## Chạy kiểm thử

```bash
# Chạy từng bộ kiểm thử riêng lẻ
k6 run load-tests/scripts/auth.js
k6 run load-tests/scripts/listings.js
k6 run load-tests/scripts/search.js
k6 run load-tests/scripts/search-advanced.js
k6 run load-tests/scripts/admin.js
k6 run load-tests/scripts/mcp.js
k6 run load-tests/scripts/payments.js

# Chạy với URL API tuỳ chỉnh
k6 run -e API_BASE_URL=https://staging.goodgo.vn load-tests/scripts/auth.js

# Chạy tất cả các bộ kiểm thử tuần tự
for f in load-tests/scripts/*.js; do k6 run "$f"; done

# Xuất kết quả dưới dạng JSON
k6 run --out json=results/auth.json load-tests/scripts/auth.js
```

## Tích hợp CI

Workflow `load-test.yml` chạy như một giai đoạn thủ công tuỳ chọn trong GitHub Actions.
Kích hoạt qua `workflow_dispatch` với bộ chọn suite.

## Cấu trúc thư mục

```
load-tests/
├── lib/
│   └── config.js              # Cấu hình dùng chung, helper, ngưỡng SLA
├── scripts/
│   ├── auth.js                # Load test luồng xác thực
│   ├── listings.js            # Tìm kiếm + chi tiết listings
│   ├── search.js              # Tìm kiếm full-text + geo (cơ bản)
│   ├── search-advanced.js     # Tìm kiếm kết hợp geo + text + bộ lọc
│   ├── admin.js               # Kiểm duyệt admin, bảng điều khiển, audit
│   ├── mcp.js                 # Endpoint MCP server (property-search, valuation)
│   └── payments.js            # Tạo và liệt kê thanh toán
├── results/
│   └── BASELINE-REPORT.md     # Báo cáo hiệu năng baseline
└── README.md
```
