backend/test/Makefile

322 lines
11 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.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)"