#!/bin/bash echo "🧪 华夏谱 API 全面测试" echo "======================" echo "" BASE_URL="http://localhost:3000" # 测试计数 PASS=0 FAIL=0 # 测试函数 test_api() { local name=$1 local method=$2 local url=$3 local data=$4 local expected_status=$5 echo "测试: $name" echo "请求: $method $url" if [ -z "$data" ]; then response=$(curl -s -w "\n%{http_code}" -X $method "$BASE_URL$url") else response=$(curl -s -w "\n%{http_code}" -X $method "$BASE_URL$url" \ -H "Content-Type: application/json" \ -d "$data") fi status=$(echo "$response" | tail -n1) body=$(echo "$response" | head -n-1) echo "状态码: $status" echo "响应: $body" if [ "$status" = "$expected_status" ]; then echo "✅ 通过" ((PASS++)) else echo "❌ 失败 (期望: $expected_status, 实际: $status)" ((FAIL++)) fi echo "" } echo "=== 1. 认证 API 测试 ===" echo "" # 1.1 注册新用户 TIMESTAMP=$(date +%s) TEST_EMAIL="test-$TIMESTAMP@example.com" test_api "用户注册" "POST" "/api/auth/register" \ "{\"email\":\"$TEST_EMAIL\",\"password\":\"password123\",\"name\":\"测试用户\"}" \ "200" # 1.2 重复注册(应该失败) test_api "重复注册" "POST" "/api/auth/register" \ "{\"email\":\"$TEST_EMAIL\",\"password\":\"password123\",\"name\":\"测试用户\"}" \ "400" # 1.3 登录 test_api "用户登录" "POST" "/api/auth/signin" \ "{\"email\":\"$TEST_EMAIL\",\"password\":\"password123\"}" \ "302" echo "=== 2. 权限验证测试 ===" echo "" # 2.1 未登录访问家族树列表 test_api "未登录获取家族树" "GET" "/api/trees" "" "401" # 2.2 未登录创建家族树 test_api "未登录创建家族树" "POST" "/api/trees" \ "{\"name\":\"测试树\",\"description\":\"测试\"}" \ "401" # 2.3 未登录获取成员 test_api "未登录获取成员" "GET" "/api/trees/test-id/members" "" "401" # 2.4 未登录创建成员 test_api "未登录创建成员" "POST" "/api/trees/test-id/members" \ "{\"surname\":\"李\",\"givenName\":\"明\",\"fullName\":\"李明\",\"gender\":\"MALE\",\"generation\":1}" \ "401" echo "=== 3. 数据验证测试 ===" echo "" # 3.1 注册时缺少必填字段 test_api "注册缺少邮箱" "POST" "/api/auth/register" \ "{\"password\":\"password123\",\"name\":\"测试\"}" \ "400" # 3.2 注册时密码太短 test_api "密码太短" "POST" "/api/auth/register" \ "{\"email\":\"short@test.com\",\"password\":\"123\",\"name\":\"测试\"}" \ "400" echo "=== 测试总结 ===" echo "" echo "总计: $((PASS + FAIL)) 个测试" echo "✅ 通过: $PASS" echo "❌ 失败: $FAIL" echo "" if [ $FAIL -eq 0 ]; then echo "🎉 所有测试通过!" exit 0 else echo "⚠️ 有 $FAIL 个测试失败" exit 1 fi