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.
193 lines
5.7 KiB
193 lines
5.7 KiB
#!/bin/bash
|
|
|
|
# Profile 模块测试脚本(含完整认证流程)- 不依赖 jq
|
|
# 测试流程: 注册 -> 登录 -> 获取个人信息 -> 更新 -> 查询(验证) -> 修改密码 -> 使用新token验证
|
|
|
|
# 配置
|
|
BASE_URL="http://localhost:8888/api/v1"
|
|
MODULE="profile"
|
|
TIMESTAMP=$(date +%s)
|
|
|
|
# 日志函数
|
|
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"
|
|
}
|
|
|
|
# 存储登录后获取的 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=$(echo "$REGISTER_RESULT" | grep -o '"id":[^,}]*' | sed 's/"id"://' | tr -d ' ')
|
|
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=$(echo "$LOGIN_RESULT" | grep -o '"token":"[^"]*"' | sed 's/"token":"//' | sed 's/"$//')
|
|
LOGIN_CODE=$(echo "$LOGIN_RESULT" | grep -o '"code":[^,}]*' | sed 's/"code"://' | tr -d ' ')
|
|
|
|
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=$(echo "$GET_RESULT" | grep -o '"id":[^,}]*' | sed 's/"id"://' | tr -d ' ')
|
|
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=$(echo "$UPDATE_RESULT" | grep -o '"username":"[^"]*"' | sed 's/"username":"//' | sed 's/"$//')
|
|
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=$(echo "$VERIFY_RESULT" | grep -o '"username":"[^"]*"' | sed 's/"username":"//' | sed 's/"$//')
|
|
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=$(echo "$OLD_PASSWORD_RESULT" | grep -o '"code":[^,}]*' | sed 's/"code"://' | tr -d ' ')
|
|
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=$(echo "$NEW_LOGIN_RESULT" | grep -o '"token":"[^"]*"' | sed 's/"token":"//' | sed 's/"$//')
|
|
NEW_LOGIN_CODE=$(echo "$NEW_LOGIN_RESULT" | grep -o '"code":[^,}]*' | sed 's/"code"://' | tr -d ' ')
|
|
|
|
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=$(echo "$FINAL_GET_RESULT" | grep -o '"id":[^,}]*' | sed 's/"id"://' | tr -d ' ')
|
|
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"
|
|
|