run_tests.sh 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. #!/bin/bash
  2. # 灾害去除系统测试运行脚本
  3. #
  4. # 使用方法:
  5. # ./run_tests.sh [选项]
  6. #
  7. # 选项:
  8. # all 运行所有测试
  9. # pesticide 只运行除虫测试
  10. # weedicide 只运行除草测试
  11. # watering 只运行浇水测试
  12. # suite 运行完整测试套件
  13. # unit 运行单元测试
  14. # help 显示帮助信息
  15. # 颜色定义
  16. RED='\033[0;31m'
  17. GREEN='\033[0;32m'
  18. YELLOW='\033[1;33m'
  19. BLUE='\033[0;34m'
  20. NC='\033[0m' # No Color
  21. # 显示头部信息
  22. show_header() {
  23. echo -e "${BLUE}========================================${NC}"
  24. echo -e "${BLUE} 灾害去除系统测试运行器${NC}"
  25. echo -e "${BLUE}========================================${NC}"
  26. echo -e "时间: $(date '+%Y-%m-%d %H:%M:%S')"
  27. echo -e "环境: ${UNITTEST_URL:-http://localhost:8000}"
  28. echo -e "${BLUE}========================================${NC}"
  29. echo
  30. }
  31. # 显示帮助信息
  32. show_help() {
  33. echo "使用方法:"
  34. echo "./run_tests.sh [选项]"
  35. echo
  36. echo "选项:"
  37. echo " all 运行所有测试"
  38. echo " pesticide 只运行除虫测试"
  39. echo " weedicide 只运行除草测试"
  40. echo " watering 只运行浇水测试"
  41. echo " suite 运行完整测试套件"
  42. echo " unit 运行单元测试"
  43. echo " help 显示帮助信息"
  44. echo
  45. echo "示例:"
  46. echo " ./run_tests.sh all"
  47. echo " ./run_tests.sh pesticide"
  48. echo " ./run_tests.sh unit"
  49. echo
  50. }
  51. # 检查环境
  52. check_environment() {
  53. echo -e "${YELLOW}检查测试环境...${NC}"
  54. # 检查PHP
  55. if ! command -v php &> /dev/null; then
  56. echo -e "${RED}错误: 未找到PHP${NC}"
  57. exit 1
  58. fi
  59. # 检查Laravel
  60. if [ ! -f "artisan" ]; then
  61. echo -e "${RED}错误: 未找到Laravel项目${NC}"
  62. exit 1
  63. fi
  64. # 检查测试URL
  65. if [ -z "$UNITTEST_URL" ]; then
  66. echo -e "${YELLOW}警告: 未设置 UNITTEST_URL 环境变量${NC}"
  67. export UNITTEST_URL="http://localhost:8000"
  68. fi
  69. echo -e "${GREEN}环境检查完成${NC}"
  70. echo
  71. }
  72. # 运行测试
  73. run_test() {
  74. local test_file=$1
  75. local test_name=$2
  76. echo -e "${BLUE}运行 ${test_name}...${NC}"
  77. echo "----------------------------------------"
  78. start_time=$(date +%s)
  79. # 运行测试
  80. php artisan test "$test_file" --verbose
  81. exit_code=$?
  82. end_time=$(date +%s)
  83. duration=$((end_time - start_time))
  84. echo "----------------------------------------"
  85. echo "测试耗时: ${duration}秒"
  86. if [ $exit_code -eq 0 ]; then
  87. echo -e "${GREEN}✅ ${test_name} 测试通过${NC}"
  88. else
  89. echo -e "${RED}❌ ${test_name} 测试失败${NC}"
  90. fi
  91. echo
  92. return $exit_code
  93. }
  94. # 运行所有E2E测试
  95. run_all_e2e_tests() {
  96. echo -e "${BLUE}运行所有E2E测试...${NC}"
  97. echo
  98. local failed_tests=0
  99. # 运行除虫测试
  100. run_test "app/Module/AppGame/Tests/Land/PesticideHandlerTest.php" "除虫测试"
  101. if [ $? -ne 0 ]; then
  102. ((failed_tests++))
  103. fi
  104. # 运行除草测试
  105. run_test "app/Module/AppGame/Tests/Land/WeedicideHandlerTest.php" "除草测试"
  106. if [ $? -ne 0 ]; then
  107. ((failed_tests++))
  108. fi
  109. # 运行浇水测试
  110. run_test "app/Module/AppGame/Tests/Land/WateringHandlerTest.php" "浇水测试"
  111. if [ $? -ne 0 ]; then
  112. ((failed_tests++))
  113. fi
  114. echo -e "${BLUE}========================================${NC}"
  115. if [ $failed_tests -eq 0 ]; then
  116. echo -e "${GREEN}🎉 所有E2E测试通过!${NC}"
  117. else
  118. echo -e "${RED}❌ ${failed_tests} 个测试失败${NC}"
  119. fi
  120. echo -e "${BLUE}========================================${NC}"
  121. return $failed_tests
  122. }
  123. # 运行单元测试
  124. run_unit_tests() {
  125. echo -e "${BLUE}运行单元测试...${NC}"
  126. echo
  127. local failed_tests=0
  128. # 运行验证测试
  129. run_test "tests/Unit/Farm/DisasterRemovalValidationTest.php" "验证测试"
  130. if [ $? -ne 0 ]; then
  131. ((failed_tests++))
  132. fi
  133. # 运行逻辑测试
  134. run_test "tests/Unit/Farm/DisasterRemovalLogicTest.php" "逻辑测试"
  135. if [ $? -ne 0 ]; then
  136. ((failed_tests++))
  137. fi
  138. echo -e "${BLUE}========================================${NC}"
  139. if [ $failed_tests -eq 0 ]; then
  140. echo -e "${GREEN}🎉 所有单元测试通过!${NC}"
  141. else
  142. echo -e "${RED}❌ ${failed_tests} 个测试失败${NC}"
  143. fi
  144. echo -e "${BLUE}========================================${NC}"
  145. return $failed_tests
  146. }
  147. # 主函数
  148. main() {
  149. show_header
  150. case "${1:-help}" in
  151. "all")
  152. check_environment
  153. run_all_e2e_tests
  154. ;;
  155. "pesticide")
  156. check_environment
  157. run_test "app/Module/AppGame/Tests/Land/PesticideHandlerTest.php" "除虫测试"
  158. ;;
  159. "weedicide")
  160. check_environment
  161. run_test "app/Module/AppGame/Tests/Land/WeedicideHandlerTest.php" "除草测试"
  162. ;;
  163. "watering")
  164. check_environment
  165. run_test "app/Module/AppGame/Tests/Land/WateringHandlerTest.php" "浇水测试"
  166. ;;
  167. "suite")
  168. check_environment
  169. run_test "app/Module/AppGame/Tests/Land/DisasterRemovalTestSuite.php" "测试套件"
  170. ;;
  171. "unit")
  172. check_environment
  173. run_unit_tests
  174. ;;
  175. "help"|*)
  176. show_help
  177. ;;
  178. esac
  179. }
  180. # 运行主函数
  181. main "$@"