# 測試架構說明 本目錄包含基於 k6 的負載測試架構,採用模組化設計,支援場景重複使用。 ## 📁 目錄結構 ``` test/ ├── scenarios/ # 可重複使用的場景模組 │ ├── apis/ # API 層級場景(單一 API 端點) │ └── e2e/ # 端到端業務流程場景 ├── tests/ # 不同環境的測試配置 │ ├── smoke/ # 冒煙測試(Dev/QA 環境) │ ├── pre/ # 預發布環境測試(負載/壓力測試) │ └── prod/ # 生產環境測試(夜間監控) ├── Dockerfile # Docker 映像定義 ├── docker-compose.yml # Docker Compose 配置 ├── Makefile # Make 命令文件 ├── AI_GUIDE.md # AI 助手指南(如何添加新 API) └── README.md # 本文件 ``` ## 🎯 設計原則 1. **模組化場景**:每個 API 端點對應一個場景函數,可獨立使用 2. **可擴展預設行為**:場景函數接受 `options` 參數,可覆蓋預設行為 3. **自定義指標可選**:支援可選的自定義指標,不強制使用 4. **請求標籤與檢查**:每個請求添加 tag,並檢查響應結果 5. **使用 Scenarios 設置工作負載**:提供更大的靈活性 6. **避免多用途測試**:每個測試文件專注於一個主要目的 ## 🚀 快速開始 ### 使用 Makefile(推薦) 最簡單的方式是使用 Makefile 提供的命令: ```bash # 查看所有可用命令 make help # 運行所有冒煙測試 make smoke # 運行特定冒煙測試 make smoke-health make smoke-auth make smoke-user # 運行負載測試 make load make load-auth make load-user # 運行壓力測試 make stress make stress-auth make stress-user # 運行生產環境測試(需要設置環境變數) export BASE_URL=https://api.example.com export TEST_LOGIN_ID=test@example.com export TEST_PASSWORD=TestPassword123! make nightly # 運行指定的測試文件 make run TEST=tests/smoke/smoke-auth-test.js # 運行測試並輸出結果 make run-with-output TEST=tests/smoke/smoke-auth-test.js OUTPUT=results.json ``` ### 使用 Docker Compose ```bash # 構建 Docker 映像 docker-compose build # 運行測試(需要設置環境變數) BASE_URL=https://api.example.com docker-compose run --rm k6 run tests/smoke/smoke-auth-test.js ``` ### 直接使用 k6(需要本地安裝 k6) ```bash # 設置環境變數 export BASE_URL=https://api.example.com export TEST_LOGIN_ID=test@example.com export TEST_PASSWORD=TestPassword123! # 運行冒煙測試 k6 run tests/smoke/smoke-auth-test.js k6 run tests/smoke/smoke-user-test.js k6 run tests/smoke/smoke-health-test.js # 運行負載測試 k6 run tests/pre/load-auth-test.js k6 run tests/pre/stress-auth-test.js # 運行生產環境測試 k6 run tests/prod/nightly-auth-test.js ``` ### 環境變數設置 ```bash # 設置 API 基礎 URL(必需) export BASE_URL=https://api.example.com # 生產環境測試帳號(僅用於生產環境測試) export TEST_LOGIN_ID=test@example.com export TEST_PASSWORD=TestPassword123! # 或在 Makefile 命令中直接指定 make smoke BASE_URL=https://api.example.com make nightly BASE_URL=https://api.example.com TEST_LOGIN_ID=test@example.com TEST_PASSWORD=TestPassword123! ``` ### 網絡配置說明 **重要**:如果 API 服務器在主機上運行(不在容器內),測試容器已經配置為使用主機網絡模式(`--network host`),可以直接訪問主機上的服務。 ```bash # 如果 API 在本地主機運行 export BASE_URL=http://localhost:8888 # 或 export BASE_URL=https://localhost:8888 # 如果 API 在其他地址運行 export BASE_URL=https://api.example.com # 運行測試 make smoke-health ``` **注意**: - 使用 `--network host` 模式時,容器直接使用主機網絡,可以訪問 `localhost` 和主機上的所有端口 - 如果 API 使用 HTTPS 但沒有有效證書,可能需要設置 `K6_SKIP_TLS_VERIFY=true` ## 📝 添加新 API 場景 請參考 `AI_GUIDE.md` 文件,其中包含詳細的步驟和模板。 快速步驟: 1. 在 `scenarios/apis/` 創建場景模組 2. 在 `scenarios/e2e/` 創建流程場景(如果需要) 3. 在 `tests/smoke/` 創建冒煙測試 4. 在 `tests/pre/` 創建負載/壓力測試 5. 在 `tests/prod/` 創建夜間測試(如果適用) ## 📊 測試類型 | 環境 | 測試類型 | 目的 | 並發數 | 持續時間 | |------|---------|------|--------|---------| | Dev/QA | Smoke | 快速驗證功能可用性 | 1 | 30s | | Pre-release | Load | 正常負載下的性能 | 10-20 | 5-10m | | Pre-release | Stress | 高負載下的穩定性 | 50-100 | 5-10m | | Production | Nightly | 監控生產環境穩定性 | 5 | 5-10m | ## 🔗 相關資源 - [k6 官方文檔](https://k6.io/docs/) - [AI_GUIDE.md](./AI_GUIDE.md) - 詳細的 AI 助手指南