| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- #!/usr/bin/env bash
- set -euo pipefail
- PROJECT_DIR="$(cd "$(dirname "$0")" && pwd)"
- cd "$PROJECT_DIR"
- RED='\033[0;31m'
- GREEN='\033[0;32m'
- YELLOW='\033[1;33m'
- CYAN='\033[0;36m'
- NC='\033[0m'
- TIMEOUT="${TEST_TIMEOUT:-600s}"
- COUNT="${TEST_COUNT:-1}"
- VERBOSE="${TEST_VERBOSE:-}"
- PACKAGE="${1:-./...}"
- print_usage() {
- echo "Usage: $0 [package] [options]"
- echo ""
- echo "Examples:"
- echo " $0 # 运行全部测试"
- echo " $0 ./internal/model/... # 只运行 model 层测试"
- echo " $0 ./internal/logic/auth # 只运行 auth logic 测试"
- echo ""
- echo "Environment variables:"
- echo " TEST_TIMEOUT=600s 超时时间 (default: 600s)"
- echo " TEST_COUNT=1 运行次数 (default: 1)"
- echo " TEST_VERBOSE=1 详细输出 (default: off)"
- echo " TEST_RUN=TestName 只运行匹配的测试函数"
- }
- if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then
- print_usage
- exit 0
- fi
- echo -e "${CYAN}============================================${NC}"
- echo -e "${CYAN} Perms System Server - Test Runner${NC}"
- echo -e "${CYAN}============================================${NC}"
- echo ""
- # 前置检查: MySQL 和 Redis 连通性
- echo -e "${YELLOW}[检查] 验证 MySQL 连接...${NC}"
- if mysql -u root -p'NsDmWyM@312' -h 127.0.0.1 -P 3306 -e "SELECT 1" perms_system &>/dev/null; then
- echo -e "${GREEN} ✓ MySQL 连接正常${NC}"
- else
- echo -e "${RED} ✗ MySQL 连接失败 (127.0.0.1:3306/perms_system)${NC}"
- echo -e "${RED} 请确认 MySQL 正在运行且密码正确${NC}"
- exit 1
- fi
- echo -e "${YELLOW}[检查] 验证 Redis 连接...${NC}"
- if redis-cli -h 127.0.0.1 -p 6379 -a 'NsDmWyM@312' ping 2>/dev/null | grep -q PONG; then
- echo -e "${GREEN} ✓ Redis 连接正常${NC}"
- else
- echo -e "${RED} ✗ Redis 连接失败 (127.0.0.1:6379)${NC}"
- echo -e "${RED} 请确认 Redis 正在运行且密码正确${NC}"
- exit 1
- fi
- echo ""
- # 构建参数
- ARGS=(-count="$COUNT" -timeout="$TIMEOUT")
- if [[ -n "$VERBOSE" ]]; then
- ARGS+=(-v)
- fi
- if [[ -n "${TEST_RUN:-}" ]]; then
- ARGS+=(-run "$TEST_RUN")
- fi
- echo -e "${YELLOW}[编译] 检查代码编译...${NC}"
- if ! go build ./... 2>&1; then
- echo -e "${RED} ✗ 编译失败${NC}"
- exit 1
- fi
- echo -e "${GREEN} ✓ 编译通过${NC}"
- echo ""
- echo -e "${YELLOW}[测试] 运行测试: ${PACKAGE}${NC}"
- echo -e "${YELLOW} 参数: ${ARGS[*]}${NC}"
- echo ""
- START_TIME=$(date +%s)
- if [[ -n "$VERBOSE" ]]; then
- go test "$PACKAGE" "${ARGS[@]}" 2>&1
- TEST_EXIT=$?
- else
- OUTPUT=$(go test "$PACKAGE" "${ARGS[@]}" 2>&1)
- TEST_EXIT=$?
- echo "$OUTPUT"
- fi
- END_TIME=$(date +%s)
- ELAPSED=$((END_TIME - START_TIME))
- echo ""
- echo -e "${CYAN}============================================${NC}"
- if [[ $TEST_EXIT -eq 0 ]]; then
- # 统计通过的包数
- if [[ -n "$VERBOSE" ]]; then
- PASS_COUNT=$(go test "$PACKAGE" "${ARGS[@]}" 2>&1 | grep -c "^--- PASS:" || true)
- echo -e "${GREEN} ✓ 全部测试通过 (${ELAPSED}s)${NC}"
- else
- PASS_PKG=$(echo "$OUTPUT" | grep -c "^ok" || true)
- echo -e "${GREEN} ✓ 全部测试通过 ${PASS_PKG} 个包 (${ELAPSED}s)${NC}"
- fi
- else
- FAIL_PKG=$(echo "${OUTPUT:-}" | grep -c "^FAIL" || true)
- echo -e "${RED} ✗ 测试失败 ${FAIL_PKG} 个包 (${ELAPSED}s)${NC}"
- echo ""
- echo -e "${RED}失败详情:${NC}"
- echo "${OUTPUT:-}" | grep -E "^(FAIL|--- FAIL)" || true
- fi
- echo -e "${CYAN}============================================${NC}"
- exit $TEST_EXIT
|