#!/bin/bash # 灾害去除系统测试运行脚本 # # 使用方法: # ./run_tests.sh [选项] # # 选项: # all 运行所有测试 # pesticide 只运行除虫测试 # weedicide 只运行除草测试 # watering 只运行浇水测试 # suite 运行完整测试套件 # unit 运行单元测试 # help 显示帮助信息 # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 显示头部信息 show_header() { echo -e "${BLUE}========================================${NC}" echo -e "${BLUE} 灾害去除系统测试运行器${NC}" echo -e "${BLUE}========================================${NC}" echo -e "时间: $(date '+%Y-%m-%d %H:%M:%S')" echo -e "环境: ${UNITTEST_URL:-http://localhost:8000}" echo -e "${BLUE}========================================${NC}" echo } # 显示帮助信息 show_help() { echo "使用方法:" echo "./run_tests.sh [选项]" echo echo "选项:" echo " all 运行所有测试" echo " pesticide 只运行除虫测试" echo " weedicide 只运行除草测试" echo " watering 只运行浇水测试" echo " suite 运行完整测试套件" echo " unit 运行单元测试" echo " help 显示帮助信息" echo echo "示例:" echo " ./run_tests.sh all" echo " ./run_tests.sh pesticide" echo " ./run_tests.sh unit" echo } # 检查环境 check_environment() { echo -e "${YELLOW}检查测试环境...${NC}" # 检查PHP if ! command -v php &> /dev/null; then echo -e "${RED}错误: 未找到PHP${NC}" exit 1 fi # 检查Laravel if [ ! -f "artisan" ]; then echo -e "${RED}错误: 未找到Laravel项目${NC}" exit 1 fi # 检查测试URL if [ -z "$UNITTEST_URL" ]; then echo -e "${YELLOW}警告: 未设置 UNITTEST_URL 环境变量${NC}" export UNITTEST_URL="http://localhost:8000" fi echo -e "${GREEN}环境检查完成${NC}" echo } # 运行测试 run_test() { local test_file=$1 local test_name=$2 echo -e "${BLUE}运行 ${test_name}...${NC}" echo "----------------------------------------" start_time=$(date +%s) # 运行测试 php artisan test "$test_file" --verbose exit_code=$? end_time=$(date +%s) duration=$((end_time - start_time)) echo "----------------------------------------" echo "测试耗时: ${duration}秒" if [ $exit_code -eq 0 ]; then echo -e "${GREEN}✅ ${test_name} 测试通过${NC}" else echo -e "${RED}❌ ${test_name} 测试失败${NC}" fi echo return $exit_code } # 运行所有E2E测试 run_all_e2e_tests() { echo -e "${BLUE}运行所有E2E测试...${NC}" echo local failed_tests=0 # 运行除虫测试 run_test "app/Module/AppGame/Tests/Land/PesticideHandlerTest.php" "除虫测试" if [ $? -ne 0 ]; then ((failed_tests++)) fi # 运行除草测试 run_test "app/Module/AppGame/Tests/Land/WeedicideHandlerTest.php" "除草测试" if [ $? -ne 0 ]; then ((failed_tests++)) fi # 运行浇水测试 run_test "app/Module/AppGame/Tests/Land/WateringHandlerTest.php" "浇水测试" if [ $? -ne 0 ]; then ((failed_tests++)) fi echo -e "${BLUE}========================================${NC}" if [ $failed_tests -eq 0 ]; then echo -e "${GREEN}🎉 所有E2E测试通过!${NC}" else echo -e "${RED}❌ ${failed_tests} 个测试失败${NC}" fi echo -e "${BLUE}========================================${NC}" return $failed_tests } # 运行单元测试 run_unit_tests() { echo -e "${BLUE}运行单元测试...${NC}" echo local failed_tests=0 # 运行验证测试 run_test "tests/Unit/Farm/DisasterRemovalValidationTest.php" "验证测试" if [ $? -ne 0 ]; then ((failed_tests++)) fi # 运行逻辑测试 run_test "tests/Unit/Farm/DisasterRemovalLogicTest.php" "逻辑测试" if [ $? -ne 0 ]; then ((failed_tests++)) fi echo -e "${BLUE}========================================${NC}" if [ $failed_tests -eq 0 ]; then echo -e "${GREEN}🎉 所有单元测试通过!${NC}" else echo -e "${RED}❌ ${failed_tests} 个测试失败${NC}" fi echo -e "${BLUE}========================================${NC}" return $failed_tests } # 主函数 main() { show_header case "${1:-help}" in "all") check_environment run_all_e2e_tests ;; "pesticide") check_environment run_test "app/Module/AppGame/Tests/Land/PesticideHandlerTest.php" "除虫测试" ;; "weedicide") check_environment run_test "app/Module/AppGame/Tests/Land/WeedicideHandlerTest.php" "除草测试" ;; "watering") check_environment run_test "app/Module/AppGame/Tests/Land/WateringHandlerTest.php" "浇水测试" ;; "suite") check_environment run_test "app/Module/AppGame/Tests/Land/DisasterRemovalTestSuite.php" "测试套件" ;; "unit") check_environment run_unit_tests ;; "help"|*) show_help ;; esac } # 运行主函数 main "$@"