Files
wenzi/frontend/scripts/run-e2e-tests.sh

169 lines
4.1 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# 🦟 蚊子项目 E2E测试启动脚本
# 同时启动前后端服务并运行E2E测试
set -e
echo "🚀 蚊子项目 E2E测试启动器"
echo ""
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 检查端口占用
check_port() {
local port=$1
if lsof -i :$port > /dev/null 2>&1; then
echo -e "${RED}❌ 端口 $port 已被占用${NC}"
return 1
fi
return 0
}
# 清理函数
cleanup() {
echo ""
echo -e "${YELLOW}🧹 清理进程中...${NC}"
# 杀死后端进程
if [ -n "$BACKEND_PID" ]; then
kill $BACKEND_PID 2>/dev/null || true
echo " 后端进程已停止"
fi
# 杀死前端进程
if [ -n "$FRONTEND_PID" ]; then
kill $FRONTEND_PID 2>/dev/null || true
echo " 前端进程已停止"
fi
echo -e "${GREEN}✅ 清理完成${NC}"
}
# 注册清理函数
trap cleanup EXIT INT TERM
# 检查必要命令
command -v mvn >/dev/null 2>&1 || { echo -e "${RED}❌ 需要Maven (mvn)${NC}"; exit 1; }
command -v node >/dev/null 2>&1 || { echo -e "${RED}❌ 需要Node.js${NC}"; exit 1; }
command -v npm >/dev/null 2>&1 || { echo -e "${RED}❌ 需要npm${NC}"; exit 1; }
# 检查端口
echo "🔍 检查端口..."
check_port 8080 || exit 1
check_port 5173 || exit 1
echo -e "${GREEN} ✅ 端口可用${NC}"
echo ""
# 获取项目根目录
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
FRONTEND_DIR="$PROJECT_ROOT/frontend"
echo "📂 项目目录: $PROJECT_ROOT"
echo ""
# 步骤1: 编译后端
echo "📦 步骤1: 编译后端..."
cd "$PROJECT_ROOT"
mvn clean compile -q -DskipTests
if [ $? -eq 0 ]; then
echo -e "${GREEN} ✅ 后端编译成功${NC}"
else
echo -e "${RED} ❌ 后端编译失败${NC}"
exit 1
fi
echo ""
# 步骤2: 启动后端服务
echo "🚀 步骤2: 启动后端服务..."
cd "$PROJECT_ROOT"
mvn spring-boot:run -Dspring-boot.run.profiles=e2e -Dspring-boot.run.jvmArguments="-Xmx512m" > /tmp/mosquito-backend.log 2>&1 &
BACKEND_PID=$!
echo " 后端PID: $BACKEND_PID"
echo " 日志: /tmp/mosquito-backend.log"
echo ""
# 等待后端启动
echo "⏳ 等待后端服务就绪..."
for i in {1..60}; do
if curl -s http://localhost:8080/api/v1/activities > /dev/null 2>&1; then
echo -e "${GREEN} ✅ 后端服务已就绪${NC}"
break
fi
if [ $i -eq 60 ]; then
echo -e "${RED} ❌ 后端服务启动超时${NC}"
exit 1
fi
echo -n "."
sleep 2
done
echo ""
# 步骤3: 安装前端依赖
echo "📦 步骤3: 安装前端依赖..."
cd "$FRONTEND_DIR"
npm install --silent
echo -e "${GREEN} ✅ 前端依赖已安装${NC}"
echo ""
# 步骤4: 启动前端服务
echo "🚀 步骤4: 启动前端服务..."
cd "$FRONTEND_DIR"
npm run dev -- --port 5173 > /tmp/mosquito-frontend.log 2>&1 &
FRONTEND_PID=$!
echo " 前端PID: $FRONTEND_PID"
echo " 日志: /tmp/mosquito-frontend.log"
echo ""
# 等待前端启动
echo "⏳ 等待前端服务就绪..."
for i in {1..30}; do
if curl -s http://localhost:5173 > /dev/null 2>&1; then
echo -e "${GREEN} ✅ 前端服务已就绪${NC}"
break
fi
if [ $i -eq 30 ]; then
echo -e "${RED} ❌ 前端服务启动超时${NC}"
exit 1
fi
echo -n "."
sleep 1
done
echo ""
# 步骤5: 运行E2E测试
echo "🎭 步骤5: 运行E2E测试..."
echo " 后端地址: http://localhost:8080"
echo " 前端地址: http://localhost:5173"
echo ""
cd "$FRONTEND_DIR"
# 设置环境变量
export API_BASE_URL=http://localhost:8080
export PLAYWRIGHT_BASE_URL=http://localhost:5173
# 运行Playwright测试
echo " 正在运行Playwright E2E测试..."
npx playwright test --reporter=list "$@"
TEST_EXIT_CODE=$?
echo ""
if [ $TEST_EXIT_CODE -eq 0 ]; then
echo -e "${GREEN}✅ E2E测试通过${NC}"
else
echo -e "${RED}❌ E2E测试失败${NC}"
fi
echo ""
echo "📊 查看报告:"
echo " Playwright报告: npx playwright show-report e2e/e2e-report"
echo " 后端日志: tail -100 /tmp/mosquito-backend.log"
echo " 前端日志: tail -100 /tmp/mosquito-frontend.log"
exit $TEST_EXIT_CODE