#!/bin/bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" COMPOSE_FILE="${PROJECT_ROOT}/docker-compose.test-new.yml" ENV_FILE="${PROJECT_ROOT}/.env.test" if [ ! -f "$ENV_FILE" ]; then echo "警告: .env.test文件不存在,使用默认配置" fi if [ ! -f "$COMPOSE_FILE" ]; then echo "错误: docker-compose.test-new.yml文件不存在" exit 1 fi export COMPOSE_FILE export ENV_FILE echo "=========================================" echo "测试环境管理脚本" echo "=========================================" case "${1:-help}" in start) echo "启动测试环境..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" up -d echo "等待服务启动..." sleep 10 echo "测试环境启动完成!" echo "" echo "服务访问地址:" echo " API Gateway: http://localhost:${TEST_API_PORT:-8081}" echo " Admin Backend: http://localhost:${TEST_ADMIN_PORT:-8082}" echo " PostgreSQL: localhost:${TEST_DB_PORT:-5433}" echo " Redis: localhost:${TEST_REDIS_PORT:-6380}" ;; stop) echo "停止测试环境..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" down echo "测试环境已停止" ;; restart) echo "重启测试环境..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" restart echo "测试环境已重启" ;; status) echo "测试环境状态:" docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" ps ;; logs) if [ -z "${2:-}" ]; then echo "显示所有服务日志..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" logs -f else echo "显示 $2 服务日志..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" logs -f "$2" fi ;; clean) echo "清理测试环境..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" down -v echo "测试环境已清理" ;; init-db) echo "初始化测试数据库..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T test-postgres psql -U ${TEST_DB_USER:-test_user} -d ${TEST_DB_NAME:-everything_test} -f /docker-entrypoint-initdb.d/init-test-db.sql echo "测试数据库初始化完成" ;; reset-db) echo "重置测试数据库..." docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T test-postgres psql -U ${TEST_DB_USER:-test_user} -d ${TEST_DB_NAME:-everything_test} -c "CALL reset_test_data();" echo "测试数据库已重置" ;; health) echo "检查服务健康状态..." echo "" echo "PostgreSQL:" docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T test-postgres pg_isready -U ${TEST_DB_USER:-test_user} || echo " ❌ 不健康" echo "" echo "Redis:" docker-compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" exec -T test-redis redis-cli ping || echo " ❌ 不健康" echo "" echo "API Gateway:" curl -f http://localhost:${TEST_API_PORT:-8081}/actuator/health > /dev/null 2>&1 && echo " ✅ 健康" || echo " ❌ 不健康" echo "" echo "Admin Backend:" curl -f http://localhost:${TEST_ADMIN_PORT:-8082}/actuator/health > /dev/null 2>&1 && echo " ✅ 健康" || echo " ❌ 不健康" ;; test) echo "运行测试..." echo "请使用相应的测试命令运行测试" echo " - 单元测试: npm run test" echo " - E2E测试: npm run test:e2e" echo " - 性能测试: npm run test:performance" ;; help|*) echo "用法: $0 {start|stop|restart|status|logs|clean|init-db|reset-db|health|test|help}" echo "" echo "命令说明:" echo " start - 启动测试环境" echo " stop - 停止测试环境" echo " restart - 重启测试环境" echo " status - 查看测试环境状态" echo " logs - 查看服务日志 [service_name]" echo " clean - 清理测试环境(包括数据卷)" echo " init-db - 初始化测试数据库" echo " reset-db - 重置测试数据" echo " health - 检查服务健康状态" echo " test - 运行测试" echo " help - 显示帮助信息" echo "" echo "示例:" echo " $0 start" echo " $0 logs test-api-gateway" echo " $0 health" ;; esac