169 lines
4.1 KiB
Bash
Executable File
169 lines
4.1 KiB
Bash
Executable File
#!/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
|