run-e2e-tests.sh 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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. COMPOSE_FILE="docker-compose.dev.yaml"
  18. echo "检查数据库连接..."
  19. if [ -n "$(docker compose -f "$COMPOSE_FILE" ps -q --status running postgres 2>/dev/null)" ]; then
  20. echo "PostgreSQL 已运行"
  21. else
  22. echo "PostgreSQL 未运行,正在启动..."
  23. docker compose -f "$COMPOSE_FILE" up -d postgres redis
  24. echo "等待数据库启动..."
  25. sleep 5
  26. fi
  27. echo ""
  28. # ==================== 2. 启动开发服务器 ====================
  29. echo "启动 Next.js 开发服务器..."
  30. # 后台启动服务器
  31. PORT=13500 bun run dev > /tmp/nextjs-dev.log 2>&1 &
  32. SERVER_PID=$!
  33. echo "服务器 PID: $SERVER_PID"
  34. echo "等待服务器就绪..."
  35. # 等待服务器启动(最多等待 60 秒)
  36. TIMEOUT=60
  37. COUNTER=0
  38. while [ $COUNTER -lt $TIMEOUT ]; do
  39. if curl -s http://localhost:13500/api/actions/health > /dev/null 2>&1; then
  40. echo "服务器已就绪"
  41. break
  42. fi
  43. COUNTER=$((COUNTER + 1))
  44. sleep 1
  45. echo -n "."
  46. done
  47. if [ $COUNTER -eq $TIMEOUT ]; then
  48. echo ""
  49. echo "服务器启动超时"
  50. kill $SERVER_PID 2>/dev/null || true
  51. exit 1
  52. fi
  53. echo ""
  54. # ==================== 3. 运行 E2E 测试 ====================
  55. echo "运行 E2E 测试..."
  56. echo ""
  57. # 设置环境变量
  58. export API_BASE_URL="http://localhost:13500/api/actions"
  59. export AUTO_CLEANUP_TEST_DATA=true
  60. # 运行 E2E 测试
  61. bun run test tests/e2e/
  62. TEST_EXIT_CODE=$?
  63. echo ""
  64. # ==================== 4. 清理并停止服务器 ====================
  65. echo "停止开发服务器..."
  66. kill $SERVER_PID 2>/dev/null || true
  67. wait $SERVER_PID 2>/dev/null || true
  68. echo "服务器已停止"
  69. echo ""
  70. # ==================== 5. 输出测试结果 ====================
  71. if [ $TEST_EXIT_CODE -eq 0 ]; then
  72. echo "E2E 测试全部通过"
  73. exit 0
  74. else
  75. echo "E2E 测试失败"
  76. exit $TEST_EXIT_CODE
  77. fi