run-core-business-test.sh 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #!/usr/bin/env bash
  2. #
  3. # 一键跑核心业务测试:书籍 大纲 → 内容 → 音频 完整链路
  4. # 适用场景:每次修改 book-generator / 每次发布上线前
  5. #
  6. # 用法:
  7. # ./scripts/run-core-business-test.sh # 自动起后端+前端再跑
  8. # FRONTEND_URL=http://localhost:5173 \
  9. # BACKEND_URL=http://127.0.0.1:3000 \
  10. # ./scripts/run-core-business-test.sh # 手动起服务
  11. # SKIP_SERVER=1 ./scripts/run-core-business-test.sh # 假设服务已起好
  12. #
  13. set -euo pipefail
  14. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  15. ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
  16. cd "$ROOT_DIR"
  17. BACKEND_URL="${BACKEND_URL:-http://127.0.0.1:3000}"
  18. FRONTEND_URL="${FRONTEND_URL:-http://127.0.0.1:5173}"
  19. SKIP_SERVER="${SKIP_SERVER:-0}"
  20. echo "=========================================="
  21. echo " 核心业务测试:书籍 大纲→内容→音频"
  22. echo "=========================================="
  23. echo " BACKEND_URL=$BACKEND_URL"
  24. echo " FRONTEND_URL=$FRONTEND_URL"
  25. echo " SKIP_SERVER=$SKIP_SERVER"
  26. echo "=========================================="
  27. # 1. 健康检查(如果服务没起,会尝试自动起)
  28. wait_for_url() {
  29. local url="$1"
  30. local label="$2"
  31. local max_attempts="${3:-30}"
  32. for i in $(seq 1 "$max_attempts"); do
  33. if curl -sf "$url" >/dev/null 2>&1; then
  34. echo " ✅ $label 就绪 ($url)"
  35. return 0
  36. fi
  37. sleep 1
  38. done
  39. return 1
  40. }
  41. if [ "$SKIP_SERVER" != "1" ]; then
  42. echo "[1/4] 检查后端..."
  43. if ! wait_for_url "$BACKEND_URL/health" "后端" 5; then
  44. echo " ⚠️ 后端未启动,尝试自动启动..."
  45. (cd server && nohup npx tsx src/app.ts > /tmp/core-test-backend.log 2>&1 &)
  46. wait_for_url "$BACKEND_URL/health" "后端" 30 || {
  47. echo " ❌ 后端启动失败,查看 /tmp/core-test-backend.log"
  48. tail -50 /tmp/core-test-backend.log
  49. exit 1
  50. }
  51. fi
  52. echo "[2/4] 检查前端..."
  53. if ! wait_for_url "$FRONTEND_URL" "前端" 5; then
  54. echo " ⚠️ 前端未启动,尝试自动启动..."
  55. (cd my-uniapp-vue3 && nohup npm run dev:h5 > /tmp/core-test-frontend.log 2>&1 &)
  56. wait_for_url "$FRONTEND_URL" "前端" 60 || {
  57. echo " ❌ 前端启动失败,查看 /tmp/core-test-frontend.log"
  58. tail -80 /tmp/core-test-frontend.log
  59. exit 1
  60. }
  61. fi
  62. fi
  63. # 2. 安装依赖检查(首次运行需要)
  64. echo "[3/4] 检查 Playwright..."
  65. if [ ! -d "$ROOT_DIR/node_modules/@playwright" ]; then
  66. echo " ⚠️ 安装 Playwright..."
  67. npm install --no-audit --no-fund
  68. fi
  69. if ! npx playwright --version >/dev/null 2>&1; then
  70. echo " ❌ playwright 不可用"
  71. exit 1
  72. fi
  73. # 3. 跑核心业务测试
  74. echo "[4/4] 运行核心业务测试..."
  75. set +e
  76. BACKEND_URL="$BACKEND_URL" FRONTEND_URL="$FRONTEND_URL" \
  77. npx playwright test \
  78. --project=core-business \
  79. --config=tests/playwright.config.ts \
  80. --reporter=list
  81. EXIT_CODE=$?
  82. set -e
  83. echo ""
  84. echo "=========================================="
  85. if [ "$EXIT_CODE" -eq 0 ]; then
  86. echo " ✅ 核心业务链路全部通过"
  87. else
  88. echo " ❌ 核心业务链路失败(exit=$EXIT_CODE)"
  89. echo " 报告位置:tests/test-results/report"
  90. echo " 结构化结果:tests/test-results/results.json"
  91. fi
  92. echo "=========================================="
  93. exit "$EXIT_CODE"