From 5c402e49dae5f4bbac4fec076763acfa978ee4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Wed, 15 Apr 2026 23:35:49 +0800 Subject: [PATCH] =?UTF-8?q?chore(scripts):=20=E6=B7=BB=E5=8A=A0=E5=90=AF?= =?UTF-8?q?=E5=8A=A8=E5=92=8C=E6=B5=8B=E8=AF=95=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加后端启动脚本 - 添加前端启动脚本 - 添加数据库启动脚本 - 添加全量启动脚本 - 添加E2E测试运行脚本 --- scripts/run-e2e-tests.sh | 87 +++++++++++++ scripts/start-all.sh | 250 ++++++++++++++++++++++++++++++++++++++ scripts/start-backend.sh | 44 ++++++- scripts/start-database.sh | 70 +++++++++++ scripts/start-frontend.sh | 51 +++++++- 5 files changed, 492 insertions(+), 10 deletions(-) create mode 100755 scripts/run-e2e-tests.sh create mode 100755 scripts/start-all.sh create mode 100755 scripts/start-database.sh diff --git a/scripts/run-e2e-tests.sh b/scripts/run-e2e-tests.sh new file mode 100755 index 0000000..770bc5c --- /dev/null +++ b/scripts/run-e2e-tests.sh @@ -0,0 +1,87 @@ +#!/bin/bash + +# 执行E2E测试脚本 +# 作者: 张翔 +# 日期: 2026-04-15 + +set -e + +echo "==========================================" +echo "执行用户旅程测试 (E2E)" +echo "==========================================" + +# 检查Node.js是否安装 +if ! command -v node &> /dev/null; then + echo "错误: Node.js 未安装" + exit 1 +fi + +# 检查包管理器 +if command -v pnpm &> /dev/null; then + PACKAGE_MANAGER="pnpm" +elif command -v npm &> /dev/null; then + PACKAGE_MANAGER="npm" +else + echo "错误: 未找到包管理器" + exit 1 +fi + +# 进入前端项目目录 +cd "$(dirname "$0")/../novalon-manage-web" + +echo "1. 检查测试环境..." +echo " 测试类型: 冒烟测试 (登录登出流程)" +echo " 测试文件: e2e/smoke/login-logout.spec.ts" +echo " 测试数据:" +echo " - 管理员账号: admin/Test@123" +echo " - 普通用户账号: user/Test@123" +echo "" + +echo "2. 验证后端服务..." +if ! curl -s http://localhost:8084/actuator/health > /dev/null; then + echo "警告: 后端服务未运行,测试可能失败" + echo "请确保后端服务已启动 (http://localhost:8084)" + read -p "是否继续? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +else + echo "✅ 后端服务运行正常" +fi + +echo "3. 验证前端服务..." +if ! curl -s http://localhost:3000 > /dev/null; then + echo "警告: 前端服务未运行,测试可能失败" + echo "请确保前端服务已启动 (http://localhost:3000)" + read -p "是否继续? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi +else + echo "✅ 前端服务运行正常" +fi + +echo "4. 执行冒烟测试..." +echo " 测试将在浏览器中运行,请勿操作浏览器" +echo " 测试结果将显示在控制台并生成报告" +echo "" + +# 执行冒烟测试 +$PACKAGE_MANAGER run test:e2e:smoke + +echo "" +echo "==========================================" +echo "测试完成!" +echo "==========================================" +echo "" +echo "测试报告位置:" +echo " - HTML报告: novalon-manage-web/playwright-report/" +echo " - 测试截图: novalon-manage-web/test-results/" +echo "" +echo "其他测试命令:" +echo " - 所有E2E测试: $PACKAGE_MANAGER run test:e2e" +echo " - 核心旅程测试: $PACKAGE_MANAGER run test:e2e:journeys" +echo " - 调试模式: $PACKAGE_MANAGER run test:e2e:debug" +echo " - 带界面运行: $PACKAGE_MANAGER run test:e2e:headed" \ No newline at end of file diff --git a/scripts/start-all.sh b/scripts/start-all.sh new file mode 100755 index 0000000..a390a2f --- /dev/null +++ b/scripts/start-all.sh @@ -0,0 +1,250 @@ +#!/bin/bash + +# 一键启动所有服务并执行测试脚本 +# 作者: 张翔 +# 日期: 2026-04-15 + +set -e + +echo "==========================================" +echo "企业级后台管理系统 - 一键启动与测试" +echo "==========================================" +echo "作者: 张翔 (全栈质量保障与效能工程师)" +echo "日期: 2026-04-15" +echo "原则: 质量是设计出来的,并通过自动化流水线保障" +echo "==========================================" +echo "" + +# 颜色定义 +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# 日志函数 +log_info() { + echo -e "${BLUE}[INFO]${NC} $1" +} + +log_success() { + echo -e "${GREEN}[SUCCESS]${NC} $1" +} + +log_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# 检查依赖 +check_dependencies() { + log_info "检查系统依赖..." + + local missing_deps=() + + # 检查Docker + if ! command -v docker &> /dev/null; then + missing_deps+=("Docker") + fi + + # 检查docker-compose + if ! command -v docker-compose &> /dev/null; then + missing_deps+=("docker-compose") + fi + + # 检查Java + if ! command -v java &> /dev/null; then + missing_deps+=("Java (JDK 21+)") + fi + + # 检查Maven + if ! command -v mvn &> /dev/null; then + missing_deps+=("Maven 3.8+") + fi + + # 检查Node.js + if ! command -v node &> /dev/null; then + missing_deps+=("Node.js 18+") + fi + + # 检查包管理器 + if ! command -v pnpm &> /dev/null && ! command -v npm &> /dev/null; then + missing_deps+=("包管理器 (pnpm 或 npm)") + fi + + if [ ${#missing_deps[@]} -gt 0 ]; then + log_error "缺少以下依赖:" + for dep in "${missing_deps[@]}"; do + echo " - $dep" + done + echo "" + echo "请参考项目README安装依赖:" + echo " https://github.com/your-repo/novalon-manage-system#环境准备要求" + exit 1 + fi + + log_success "所有依赖检查通过" +} + +# 显示服务信息 +show_service_info() { + echo "" + echo "==========================================" + echo "服务启动信息" + echo "==========================================" + echo "" + echo "📊 数据库服务" + echo " 地址: localhost:55432" + echo " 数据库: manage_system" + echo " 用户名: novalon" + echo " 密码: novalon123" + echo "" + echo "⚙️ 后端服务" + echo " 网关: http://localhost:8080" + echo " 应用: http://localhost:8084" + echo " API文档: http://localhost:8084/swagger-ui.html" + echo " 健康检查: http://localhost:8084/actuator/health" + echo "" + echo "🎨 前端服务" + echo " 应用: http://localhost:3000" + echo " API代理: http://localhost:3000/api → http://localhost:8080/api" + echo "" + echo "🧪 测试信息" + echo " 测试类型: 冒烟测试 (登录登出)" + echo " 测试账号: admin/Test@123" + echo " 测试报告: novalon-manage-web/playwright-report/" + echo "" + echo "==========================================" +} + +# 主函数 +main() { + log_info "开始启动所有服务..." + + # 检查依赖 + check_dependencies + + # 步骤1: 启动数据库 + log_info "步骤1: 启动数据库容器..." + if ./scripts/start-database.sh; then + log_success "数据库启动成功" + else + log_error "数据库启动失败" + exit 1 + fi + + echo "" + log_info "步骤2: 启动后端服务..." + echo "注意: 后端服务将在当前终端启动,请勿关闭此终端" + echo " 按 Ctrl+C 可停止后端服务" + echo "" + read -p "是否继续启动后端服务? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_warning "用户取消启动后端服务" + exit 0 + fi + + # 步骤2: 启动后端服务 (在新终端中) + log_info "正在启动后端服务 (网关:8080 + 应用:8084)..." + echo "启动命令: ./scripts/start-backend.sh" + echo "" + log_warning "请在新终端中执行以下命令:" + echo "cd $(pwd)" + echo "./scripts/start-backend.sh" + echo "" + read -p "是否已在新终端中启动后端服务? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_warning "请先启动后端服务" + exit 1 + fi + + # 等待后端服务启动 + log_info "等待后端服务启动..." + for i in {1..60}; do + if curl -s http://localhost:8084/actuator/health | grep -q '"status":"UP"'; then + log_success "后端服务启动成功" + break + fi + echo "等待后端服务... ($i/60)" + sleep 2 + done + + # 验证后端服务 + if ! curl -s http://localhost:8084/actuator/health | grep -q '"status":"UP"'; then + log_error "后端服务启动超时" + exit 1 + fi + + echo "" + log_info "步骤3: 启动前端服务..." + echo "注意: 前端服务将在新终端中启动" + echo "" + read -p "是否继续启动前端服务? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_warning "用户取消启动前端服务" + exit 0 + fi + + # 步骤3: 启动前端服务 (在新终端中) + log_info "正在启动前端开发服务器 (端口:3000)..." + echo "启动命令: ./scripts/start-frontend.sh" + echo "" + log_warning "请在新终端中执行以下命令:" + echo "cd $(pwd)" + echo "./scripts/start-frontend.sh" + echo "" + read -p "是否已在新终端中启动前端服务? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_warning "请先启动前端服务" + exit 1 + fi + + # 等待前端服务启动 + log_info "等待前端服务启动..." + sleep 5 + + echo "" + log_info "步骤4: 执行用户旅程测试..." + echo "" + read -p "是否执行E2E冒烟测试? (y/n): " -n 1 -r + echo + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + log_warning "用户取消执行测试" + show_service_info + exit 0 + fi + + # 步骤4: 执行E2E测试 + log_info "执行冒烟测试..." + if ./scripts/run-e2e-tests.sh; then + log_success "测试执行完成" + else + log_error "测试执行失败" + exit 1 + fi + + # 显示服务信息 + show_service_info + + log_success "所有服务启动并测试完成!" + echo "" + echo "🎉 系统已就绪,可以开始使用!" + echo "" + echo "访问地址:" + echo " 前端应用: http://localhost:3000" + echo " API文档: http://localhost:8084/swagger-ui.html" + echo "" + echo "测试账号:" + echo " 管理员: admin / Test@123" + echo " 普通用户: user / Test@123" +} + +# 执行主函数 +main "$@" \ No newline at end of file diff --git a/scripts/start-backend.sh b/scripts/start-backend.sh index 8fcef6c..ee1aab1 100755 --- a/scripts/start-backend.sh +++ b/scripts/start-backend.sh @@ -1,8 +1,42 @@ #!/bin/bash -# ============================================================================= -# 启动后端服务(用于测试) -# ============================================================================= +# 启动后端服务脚本 +# 作者: 张翔 +# 日期: 2026-04-15 -cd /Users/zhangxiang/Codes/Novalon/novalon-manage-system/novalon-manage-api/manage-app -mvn spring-boot:run -Dspring-boot.run.profiles=test +set -e + +echo "==========================================" +echo "启动后端服务 (网关 + 应用)" +echo "==========================================" + +# 检查Java是否安装 +if ! command -v java &> /dev/null; then + echo "错误: Java 未安装,请安装JDK 21或更高版本" + exit 1 +fi + +# 检查Maven是否安装 +if ! command -v mvn &> /dev/null; then + echo "错误: Maven 未安装,请安装Maven 3.8+" + exit 1 +fi + +# 进入后端项目目录 +cd "$(dirname "$0")/../novalon-manage-api" + +echo "1. 清理并编译项目..." +mvn clean compile -q + +echo "2. 启动网关和应用服务..." +echo " 网关服务: http://localhost:8080" +echo " 应用服务: http://localhost:8084" +echo " API文档: http://localhost:8084/swagger-ui.html" +echo " 健康检查: http://localhost:8084/actuator/health" +echo "" +echo "正在启动服务,请等待..." + +# 使用Maven同时启动网关和应用 +mvn spring-boot:run -pl manage-gateway,manage-app -am \ + -Dspring-boot.run.profiles=local \ + -Dspring-boot.run.jvmArguments="-Xmx512m -Xms256m" \ No newline at end of file diff --git a/scripts/start-database.sh b/scripts/start-database.sh new file mode 100755 index 0000000..16040c5 --- /dev/null +++ b/scripts/start-database.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +# 启动数据库容器脚本 +# 作者: 张翔 +# 日期: 2026-04-15 + +set -e + +echo "==========================================" +echo "启动 PostgreSQL 数据库容器" +echo "==========================================" + +# 检查Docker是否运行 +if ! docker info > /dev/null 2>&1; then + echo "错误: Docker 未运行,请启动Docker服务" + exit 1 +fi + +# 检查docker-compose是否可用 +if ! command -v docker-compose &> /dev/null; then + echo "错误: docker-compose 未安装" + exit 1 +fi + +# 进入项目根目录 +cd "$(dirname "$0")/.." + +echo "1. 停止已运行的容器..." +docker-compose down postgres 2>/dev/null || true + +echo "2. 启动 PostgreSQL 容器..." +docker-compose up -d postgres + +echo "3. 等待数据库就绪..." +for i in {1..30}; do + if docker-compose exec postgres pg_isready -U novalon -d manage_system > /dev/null 2>&1; then + echo "数据库已就绪!" + break + fi + echo "等待数据库启动... ($i/30)" + sleep 2 +done + +# 最终检查 +if docker-compose exec postgres pg_isready -U novalon -d manage_system > /dev/null 2>&1; then + echo "==========================================" + echo "✅ 数据库启动成功!" + echo "连接信息:" + echo " - 主机: localhost" + echo " - 端口: 55432" + echo " - 数据库: manage_system" + echo " - 用户名: novalon" + echo " - 密码: novalon123" + echo "==========================================" + + # 显示容器状态 + echo "容器状态:" + docker-compose ps postgres + + # 显示日志最后几行 + echo -e "\n数据库日志:" + docker-compose logs --tail=10 postgres +else + echo "==========================================" + echo "❌ 数据库启动失败" + echo "请检查错误日志:" + docker-compose logs postgres + echo "==========================================" + exit 1 +fi \ No newline at end of file diff --git a/scripts/start-frontend.sh b/scripts/start-frontend.sh index 46b4cb5..ee43466 100755 --- a/scripts/start-frontend.sh +++ b/scripts/start-frontend.sh @@ -1,8 +1,49 @@ #!/bin/bash -# ============================================================================= -# 启动前端服务(用于测试) -# ============================================================================= +# 启动前端服务脚本 +# 作者: 张翔 +# 日期: 2026-04-15 -cd /Users/zhangxiang/Codes/Novalon/novalon-manage-system/novalon-manage-web -npm run dev +set -e + +echo "==========================================" +echo "启动前端开发服务器" +echo "==========================================" + +# 检查Node.js是否安装 +if ! command -v node &> /dev/null; then + echo "错误: Node.js 未安装,请安装Node.js 18+" + exit 1 +fi + +# 检查包管理器 (优先使用pnpm) +if command -v pnpm &> /dev/null; then + PACKAGE_MANAGER="pnpm" + echo "使用 pnpm 作为包管理器" +elif command -v npm &> /dev/null; then + PACKAGE_MANAGER="npm" + echo "使用 npm 作为包管理器" +else + echo "错误: 未找到包管理器 (pnpm 或 npm)" + exit 1 +fi + +# 进入前端项目目录 +cd "$(dirname "$0")/../novalon-manage-web" + +echo "1. 检查依赖..." +if [ ! -d "node_modules" ]; then + echo "未找到 node_modules,正在安装依赖..." + $PACKAGE_MANAGER install +else + echo "依赖已安装" +fi + +echo "2. 启动开发服务器..." +echo " 前端应用: http://localhost:3000" +echo " API代理: http://localhost:3000/api → http://localhost:8080/api" +echo "" +echo "正在启动开发服务器..." + +# 启动开发服务器 +$PACKAGE_MANAGER run dev \ No newline at end of file