#!/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"