You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

207 lines
5.6 KiB

#!/bin/bash
# Profile 模块测试脚本(含完整认证流程)- 不依赖 jq
# 测试流程: 注册 -> 登录 -> 获取个人信息 -> 更新 -> 查询(验证) -> 修改密码 -> 使用新token验证
# 日志函数
log_info() {
echo -e "\033[32m[INFO]\033[0m $1"
}
log_success() {
echo -e "\033[32m[SUCCESS]\033[0m $1"
}
log_error() {
echo -e "\033[31m[ERROR]\033[0m $1"
}
log_step() {
echo -e "\n\033[36m--- 步骤 $1: $2 ---\033[0m"
}
# 简单 JSON 提取函数
extract_value() {
local json="$1"
local key="$2"
# 匹配 "key":value 或 "key": "value"
echo "$json" | grep -o "\"$key\":[^,}]*" | sed 's/"'"$key'"://' | sed 's/^"//' | sed 's/"$//' | tr -d ' '
}
extract_int() {
local json="$1"
local key="$2"
echo "$json" | grep -o "\"$key\":[^,}]*" | sed 's/"'"$key'"://' | tr -d ' '
}
# 配置
BASE_URL="http://localhost:8888/api/v1"
MODULE="profile"
TIMESTAMP=$(date +%s)
# 存储登录后获取的 Token
AUTH_TOKEN=""
# 1. 注册新用户
log_step "1" "注册用户"
REGISTER_RESULT=$(curl -s -X POST ${BASE_URL}/register \
-H "Content-Type: application/json" \
-d "{
\"username\": \"testuser${TIMESTAMP}\",
\"email\": \"test${TIMESTAMP}@example.com\",
\"password\": \"password123\",
\"phone\": \"13800138000\"
}")
# 解析注册响应,获取用户ID
REGISTER_ID=$(extract_int "$REGISTER_RESULT" "id")
if [ -z "$REGISTER_ID" ]; then
log_error "注册失败"
echo "$REGISTER_RESULT"
exit 1
fi
log_success "注册成功,ID: $REGISTER_ID"
echo "$REGISTER_RESULT"
# 2. 登录
log_step "2" "用户登录"
LOGIN_RESULT=$(curl -s -X POST ${BASE_URL}/login \
-H "Content-Type: application/json" \
-d "{
\"email\": \"test${TIMESTAMP}@example.com\",
\"password\": \"password123\"
}")
# 解析并存储 Token
AUTH_TOKEN=$(extract_value "$LOGIN_RESULT" "token")
LOGIN_CODE=$(extract_int "$LOGIN_RESULT" "code")
if [ "$LOGIN_CODE" != "200" ] || [ -z "$AUTH_TOKEN" ]; then
log_error "登录失败"
echo "$LOGIN_RESULT"
exit 1
fi
log_success "登录成功,Token: ${AUTH_TOKEN:0:20}..."
echo "$LOGIN_RESULT"
# 3. 获取个人信息(带Token)
log_step "3" "获取个人信息(带Token)"
GET_RESULT=$(curl -s -X GET ${BASE_URL}/${MODULE}/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}")
# 验证响应
ID=$(extract_int "$GET_RESULT" "id")
if [ -z "$ID" ]; then
log_error "获取失败:可能Token无效"
echo "$GET_RESULT"
exit 1
fi
log_success "获取成功,ID: $ID"
echo "$GET_RESULT"
# 4. 更新个人资料
log_step "4" "更新个人资料"
UPDATE_RESULT=$(curl -s -X PUT ${BASE_URL}/${MODULE}/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d "{
\"username\": \"testuser${TIMESTAMP}_updated\",
\"phone\": \"13900139000\",
\"avatar\": \"http://example.com/avatar${TIMESTAMP}.jpg\",
\"bio\": \"这是个人简介${TIMESTAMP}\"
}")
# 验证更新
VERIFY_USERNAME=$(extract_value "$UPDATE_RESULT" "username")
EXPECTED_USERNAME="testuser${TIMESTAMP}_updated"
if [ "$VERIFY_USERNAME" != "$EXPECTED_USERNAME" ]; then
log_error "更新失败:用户名未更新"
echo "$UPDATE_RESULT"
exit 1
fi
log_success "更新成功"
echo "$UPDATE_RESULT"
# 5. 查询个人信息(验证更新)
log_step "5" "查询个人信息(验证更新)"
VERIFY_RESULT=$(curl -s -X GET ${BASE_URL}/${MODULE}/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}")
VERIFY_USERNAME=$(extract_value "$VERIFY_RESULT" "username")
if [ "$VERIFY_USERNAME" != "$EXPECTED_USERNAME" ]; then
log_error "验证失败:用户名未更新"
echo "$VERIFY_RESULT"
exit 1
fi
log_success "验证成功"
# 6. 修改密码(使用旧密码)
log_step "6" "修改密码(使用旧密码)"
OLD_PASSWORD_RESULT=$(curl -s -X POST ${BASE_URL}/${MODULE}/password \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${AUTH_TOKEN}" \
-d "{
\"oldPassword\": \"password123\",
\"newPassword\": \"newpassword123\"
}")
# 验证修改
OLD_PASSWORD_CODE=$(extract_int "$OLD_PASSWORD_RESULT" "code")
if [ "$OLD_PASSWORD_CODE" != "200" ]; then
log_error "修改密码失败"
echo "$OLD_PASSWORD_RESULT"
exit 1
fi
log_success "修改密码成功"
echo "$OLD_PASSWORD_RESULT"
# 7. 使用新密码重新登录
log_step "7" "使用新密码重新登录"
NEW_LOGIN_RESULT=$(curl -s -X POST ${BASE_URL}/login \
-H "Content-Type: application/json" \
-d "{
\"email\": \"test${TIMESTAMP}@example.com\",
\"password\": \"newpassword123\"
}")
# 获取新Token
NEW_AUTH_TOKEN=$(extract_value "$NEW_LOGIN_RESULT" "token")
NEW_LOGIN_CODE=$(extract_int "$NEW_LOGIN_RESULT" "code")
if [ "$NEW_LOGIN_CODE" != "200" ] || [ -z "$NEW_AUTH_TOKEN" ]; then
log_error "重新登录失败"
echo "$NEW_LOGIN_RESULT"
exit 1
fi
log_success "重新登录成功,新Token: ${NEW_AUTH_TOKEN:0:20}..."
echo "$NEW_LOGIN_RESULT"
# 8. 获取个人信息(验证密码修改成功)
log_step "8" "获取个人信息(验证密码修改成功)"
FINAL_GET_RESULT=$(curl -s -X GET ${BASE_URL}/${MODULE}/me \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${NEW_AUTH_TOKEN}")
# 验证响应
ID=$(extract_int "$FINAL_GET_RESULT" "id")
if [ -z "$ID" ]; then
log_error "获取失败:新Token可能无效"
echo "$FINAL_GET_RESULT"
exit 1
fi
log_success "验证成功,密码修改完成"
echo -e "\n\033[32m=== Profile 模块测试完成 ===\033[0m"
echo "用户ID: $REGISTER_ID"
echo "测试账号: test${TIMESTAMP}@example.com"
echo "测试密码: password123 / newpassword123"