322 lines
11 KiB
Makefile
322 lines
11 KiB
Makefile
.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)"
|
||
|