#!/bin/bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" CONFIG_FILE="$SCRIPT_DIR/config/test-config.yml" LOG_DIR="$PROJECT_ROOT/test-automation/logs" REPORT_DIR="$PROJECT_ROOT/test-automation/test-reports" TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S") CURRENT_REPORT_DIR="$REPORT_DIR/$TIMESTAMP" mkdir -p "$LOG_DIR" mkdir -p "$CURRENT_REPORT_DIR" TEST_RESULT=0 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" } log "=========================================" log "全面自动化测试执行开始" log "=========================================" log "项目根目录: $PROJECT_ROOT" log "报告输出目录: $CURRENT_REPORT_DIR" log "=========================================" # 环境检查 log "[环境检查] 检查依赖..." check_command() { if ! command -v $1 &> /dev/null; then log "[环境检查] ✗ $1 未安装" exit 1 fi log "[环境检查] ✓ $1 已安装" } check_command java check_command mvn check_command node check_command npm log "[环境检查] ✓ 环境检查通过" # 启动服务 log "[启动服务] 正在启动API服务..." bash "$SCRIPT_DIR/scripts/start-api.sh" if ! bash "$SCRIPT_DIR/scripts/wait-for-api.sh"; then log "[启动服务] ✗ API服务启动失败" bash "$SCRIPT_DIR/scripts/cleanup.sh" exit 1 fi log "[启动服务] ✓ API服务已就绪" # 执行API测试 log "[API测试] 开始执行API测试..." cd "$PROJECT_ROOT/everything-is-suitable-api" API_TEST_LOG="$CURRENT_REPORT_DIR/api-test.log" if mvn test -Dspring.profiles.active=test > "$API_TEST_LOG" 2>&1; then log "[API测试] ✓ API测试通过" else log "[API测试] ✗ API测试失败" TEST_RESULT=1 fi cp -r */target/surefire-reports/* "$CURRENT_REPORT_DIR/" 2>/dev/null || true log "[API测试] API测试完成" # 执行前端对接测试 log "[前端对接测试] 开始执行前端对接测试..." ADMIN_DIR="$PROJECT_ROOT/everything-is-suitable-admin" if [ -d "$ADMIN_DIR/e2e" ]; then cd "$ADMIN_DIR" FRONTEND_TEST_LOG="$CURRENT_REPORT_DIR/frontend-test.log" if [ -f "package.json" ]; then log "[前端对接测试] 安装依赖..." npm install > /dev/null 2>&1 log "[前端对接测试] 执行Playwright测试..." if npx playwright test --reporter=html > "$FRONTEND_TEST_LOG" 2>&1; then log "[前端对接测试] ✓ 前端对接测试通过" else log "[前端对接测试] ✗ 前端对接测试失败" TEST_RESULT=1 fi mkdir -p "$CURRENT_REPORT_DIR/frontend-report" cp -r playwright-report/* "$CURRENT_REPORT_DIR/frontend-report/" 2>/dev/null || true fi fi log "[前端对接测试] 前端对接测试完成" # 执行E2E测试 log "[E2E测试] 开始执行E2E测试..." E2E_TEST_LOG="$CURRENT_REPORT_DIR/e2e-test.log" if [ -d "$ADMIN_DIR/e2e" ]; then cd "$ADMIN_DIR" if npx playwright test e2e/ --reporter=html --project=chromium > "$E2E_TEST_LOG" 2>&1; then log "[E2E测试] ✓ E2E测试通过" else log "[E2E测试] ✗ E2E测试失败" TEST_RESULT=1 fi mkdir -p "$CURRENT_REPORT_DIR/e2e-report" cp -r playwright-report/* "$CURRENT_REPORT_DIR/e2e-report/" 2>/dev/null || true fi log "[E2E测试] E2E测试完成" # 生成报告 log "[生成报告] 正在生成综合测试报告..." if [ -f "$SCRIPT_DIR/reporters/report-generator.py" ]; then python3 "$SCRIPT_DIR/reporters/report-generator.py" \ --report-dir "$CURRENT_REPORT_DIR" \ --timestamp "$TIMESTAMP" \ --config "$CONFIG_FILE" || log "[生成报告] 报告生成失败,但继续执行" fi log "[生成报告] ✓ 报告已生成: $CURRENT_REPORT_DIR" # 清理环境 log "[清理环境] 正在清理环境..." bash "$SCRIPT_DIR/scripts/cleanup.sh" log "[清理环境] ✓ 环境清理完成" log "=========================================" log "测试执行完成" log "=========================================" if [ $TEST_RESULT -eq 0 ]; then log "✓ 所有测试通过" log "退出码: 0" exit 0 else log "✗ 部分测试失败" log "退出码: 1" exit 1 fi