run-e2e-tests.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #!/bin/bash
  2. # E2E 测试运行脚本
  3. #
  4. # 功能:
  5. # 1. 启动 Next.js 开发服务器
  6. # 2. 等待服务器就绪
  7. # 3. 运行 E2E 测试
  8. # 4. 清理并停止服务器
  9. #
  10. # 使用方法:
  11. # bash scripts/run-e2e-tests.sh
  12. set -e # 遇到错误立即退出
  13. echo "🚀 E2E 测试运行脚本"
  14. echo "===================="
  15. echo ""
  16. # ==================== 1. 检查数据库连接 ====================
  17. echo "🔍 检查数据库连接..."
  18. if docker ps | grep -q claude-code-hub-db-dev; then
  19. echo "✅ PostgreSQL 已运行"
  20. else
  21. echo "❌ PostgreSQL 未运行,正在启动..."
  22. docker compose up -d postgres redis
  23. echo "⏳ 等待数据库启动..."
  24. sleep 5
  25. fi
  26. echo ""
  27. # ==================== 2. 启动开发服务器 ====================
  28. echo "🚀 启动 Next.js 开发服务器..."
  29. # 后台启动服务器
  30. PORT=13500 bun run dev > /tmp/nextjs-dev.log 2>&1 &
  31. SERVER_PID=$!
  32. echo " 服务器 PID: $SERVER_PID"
  33. echo "⏳ 等待服务器就绪..."
  34. # 等待服务器启动(最多等待 60 秒)
  35. TIMEOUT=60
  36. COUNTER=0
  37. while [ $COUNTER -lt $TIMEOUT ]; do
  38. if curl -s http://localhost:13500/api/actions/health > /dev/null 2>&1; then
  39. echo "✅ 服务器已就绪"
  40. break
  41. fi
  42. COUNTER=$((COUNTER + 1))
  43. sleep 1
  44. echo -n "."
  45. done
  46. if [ $COUNTER -eq $TIMEOUT ]; then
  47. echo ""
  48. echo "❌ 服务器启动超时"
  49. kill $SERVER_PID 2>/dev/null || true
  50. exit 1
  51. fi
  52. echo ""
  53. # ==================== 3. 运行 E2E 测试 ====================
  54. echo "🧪 运行 E2E 测试..."
  55. echo ""
  56. # 设置环境变量
  57. export API_BASE_URL="http://localhost:13500/api/actions"
  58. export AUTO_CLEANUP_TEST_DATA=true
  59. # 运行 E2E 测试
  60. bun run test tests/e2e/
  61. TEST_EXIT_CODE=$?
  62. echo ""
  63. # ==================== 4. 清理并停止服务器 ====================
  64. echo "🧹 停止开发服务器..."
  65. kill $SERVER_PID 2>/dev/null || true
  66. wait $SERVER_PID 2>/dev/null || true
  67. echo "✅ 服务器已停止"
  68. echo ""
  69. # ==================== 5. 输出测试结果 ====================
  70. if [ $TEST_EXIT_CODE -eq 0 ]; then
  71. echo "✅ E2E 测试全部通过"
  72. exit 0
  73. else
  74. echo "❌ E2E 测试失败"
  75. exit $TEST_EXIT_CODE
  76. fi