backend/test/Makefile

322 lines
11 KiB
Makefile
Raw Permalink Normal View History

2025-11-07 07:44:23 +00:00
.PHONY: help build run smoke load stress nightly clean test
# 默認目標
.DEFAULT_GOAL := help
# 顏色定義
GREEN := \033[0;32m
YELLOW := \033[0;33m
NC := \033[0m # No Color
# 環境變數
BASE_URL ?= http://localhost:8888
TEST_LOGIN_ID ?=
TEST_PASSWORD ?=
K6_IMAGE ?= k6-test:latest
help: ## 顯示幫助信息
@echo "$(GREEN)可用命令:$(NC)"
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf " $(YELLOW)%-20s$(NC) %s\n", $$1, $$2}'
smoke-auth: ## 運行認證功能冒煙測試
@echo "$(GREEN)運行認證功能冒煙測試...$(NC)"
@docker run --rm -i \
--network host \
-v $(PWD)/scenarios:/app/scenarios \
-v $(PWD)/tests:/app/tests \
-e BASE_URL=$(BASE_URL) \
grafana/k6:latest run /app/tests/smoke/smoke-auth-test.js
load-auth: ## 運行認證功能負載測試
@echo "$(GREEN)運行認證功能負載測試...$(NC)"
@docker run --rm -i \
--network host \
-v $(PWD)/scenarios:/app/scenarios \
-v $(PWD)/tests:/app/tests \
-e BASE_URL=$(BASE_URL) \
grafana/k6:latest run /app/tests/pre/load-auth-test.js
# build: ## 構建 Docker 映像
# @echo "$(GREEN)構建 k6 測試映像...$(NC)"
# docker-compose build
# # ==================== 冒煙測試 ====================
# smoke: smoke-all ## 運行所有冒煙測試
# smoke-all: ## 運行所有冒煙測試
# @echo "$(GREEN)運行所有冒煙測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-health-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-auth-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-user-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-user-profile-flow-test.js
# smoke-health: ## 運行健康檢查冒煙測試
# @echo "$(GREEN)運行健康檢查冒煙測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-health-test.js
# smoke-auth: ## 運行認證功能冒煙測試
# @echo "$(GREEN)運行認證功能冒煙測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-auth-test.js
# smoke-user: ## 運行使用者功能冒煙測試
# @echo "$(GREEN)運行使用者功能冒煙測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/smoke/smoke-user-test.js
# smoke-user-profile-flow: ## 運行使用者資料流程冒煙測試
# @echo "$(GREEN)運行使用者資料流程冒煙測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/scenarios/e2e/user-profile-flow.js
# # ==================== 負載測試 ====================
# load: load-all ## 運行所有負載測試
# load-all: ## 運行所有負載測試
# @echo "$(GREEN)運行所有負載測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/load-auth-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/load-user-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/load-user-profile-flow-test.js
# load-user: ## 運行使用者功能負載測試
# @echo "$(GREEN)運行使用者功能負載測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/load-user-test.js
# load-user-profile-flow: ## 運行使用者資料流程負載測試
# @echo "$(GREEN)運行使用者資料流程負載測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/load-user-profile-flow-test.js
# # ==================== 壓力測試 ====================
# stress: stress-all ## 運行所有壓力測試
# stress-all: ## 運行所有壓力測試
# @echo "$(GREEN)運行所有壓力測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/stress-auth-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/stress-user-test.js
# stress-auth: ## 運行認證功能壓力測試
# @echo "$(GREEN)運行認證功能壓力測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/stress-auth-test.js
# stress-user: ## 運行使用者功能壓力測試
# @echo "$(GREEN)運行使用者功能壓力測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/pre/stress-user-test.js
# # ==================== 生產環境測試 ====================
# nightly: nightly-all ## 運行所有夜間測試
# nightly-all: ## 運行所有夜間測試
# @echo "$(GREEN)運行所有夜間測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run /app/tests/prod/nightly-health-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run /app/tests/prod/nightly-auth-test.js
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run /app/tests/prod/nightly-user-test.js
# nightly-health: ## 運行健康檢查夜間測試
# @echo "$(GREEN)運行健康檢查夜間測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# grafana/k6:latest run /app/tests/prod/nightly-health-test.js
# nightly-auth: ## 運行認證功能夜間測試
# @echo "$(GREEN)運行認證功能夜間測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run /app/tests/prod/nightly-auth-test.js
# nightly-user: ## 運行使用者功能夜間測試
# @echo "$(GREEN)運行使用者功能夜間測試...$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run /app/tests/prod/nightly-user-test.js
# # ==================== 通用命令 ====================
# run: ## 運行指定的測試文件 (使用: make run TEST=tests/smoke/smoke-auth-test.js)
# @if [ -z "$(TEST)" ]; then \
# echo "$(YELLOW)錯誤: 請指定測試文件$(NC)"; \
# echo "用法: make run TEST=tests/smoke/smoke-auth-test.js"; \
# exit 1; \
# fi
# @echo "$(GREEN)運行測試: $(TEST)$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run /app/$(TEST)
# run-local: ## 本地運行測試(不使用 Docker需要本地安裝 k6
# @if [ -z "$(TEST)" ]; then \
# echo "$(YELLOW)錯誤: 請指定測試文件$(NC)"; \
# echo "用法: make run-local TEST=tests/smoke/smoke-auth-test.js"; \
# exit 1; \
# fi
# @echo "$(GREEN)本地運行測試: $(TEST)$(NC)"
# @BASE_URL=$(BASE_URL) \
# TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# TEST_PASSWORD=$(TEST_PASSWORD) \
# k6 run $(TEST)
# clean: ## 清理 Docker 資源
# @echo "$(GREEN)清理 Docker 資源...$(NC)"
# @docker-compose down -v 2>/dev/null || true
# @docker rmi $(K6_IMAGE) 2>/dev/null || true
# @echo "$(GREEN)清理完成$(NC)"
# # ==================== 測試結果輸出 ====================
# run-with-output: ## 運行測試並輸出結果到文件 (使用: make run-with-output TEST=tests/smoke/smoke-auth-test.js OUTPUT=results.json)
# @if [ -z "$(TEST)" ]; then \
# echo "$(YELLOW)錯誤: 請指定測試文件$(NC)"; \
# echo "用法: make run-with-output TEST=tests/smoke/smoke-auth-test.js OUTPUT=results.json"; \
# exit 1; \
# fi
# @mkdir -p results
# @echo "$(GREEN)運行測試並輸出結果: $(TEST) -> results/$(OUTPUT)$(NC)"
# @docker run --rm -i \
# --network host \
# -v $(PWD)/scenarios:/app/scenarios \
# -v $(PWD)/tests:/app/tests \
# -v $(PWD)/results:/app/results \
# -e BASE_URL=$(BASE_URL) \
# -e TEST_LOGIN_ID=$(TEST_LOGIN_ID) \
# -e TEST_PASSWORD=$(TEST_PASSWORD) \
# grafana/k6:latest run --out json=/app/results/$(OUTPUT) /app/$(TEST)
# # ==================== 環境設置 ====================
# env-dev: ## 設置開發環境變數
# @echo "$(GREEN)設置開發環境...$(NC)"
# @export BASE_URL=https://dev-api.example.com
# @echo "BASE_URL=$(BASE_URL)"
# env-pre: ## 設置預發布環境變數
# @echo "$(GREEN)設置預發布環境...$(NC)"
# @export BASE_URL=https://pre-api.example.com
# @echo "BASE_URL=$(BASE_URL)"
# env-prod: ## 設置生產環境變數
# @echo "$(GREEN)設置生產環境...$(NC)"
# @export BASE_URL=https://api.example.com
# @echo "BASE_URL=$(BASE_URL)"
# @echo "$(YELLOW)注意: 生產環境測試需要設置 TEST_LOGIN_ID 和 TEST_PASSWORD$(NC)"