PBlog/test_api.sh

201 lines
7.2 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# 灵猴社博客系统 API 测试脚本
# 使用curl测试各种API端点
BASE_URL="http://localhost:8080"
TEST_USER_EMAIL="test@example.com"
TEST_USER_PASSWORD="password123"
TEST_USERNAME="testuser"
echo "🚀 开始测试 PBlog API..."
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# 测试健康检查
echo -e "\n📊 测试健康检查..."
HEALTH_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $BASE_URL/health)
if [ "$HEALTH_RESPONSE" -eq 200 ]; then
echo -e "${GREEN}✅ 健康检查通过${NC}"
else
echo -e "${RED}❌ 健康检查失败,状态码: $HEALTH_RESPONSE${NC}"
exit 1
fi
# 测试用户注册
echo -e "\n👤 测试用户注册..."
REGISTER_RESPONSE=$(curl -s -X POST $BASE_URL/api/auth/register \
-H "Content-Type: application/json" \
-d "{\"username\":\"$TEST_USERNAME\",\"email\":\"$TEST_USER_EMAIL\",\"password\":\"$TEST_USER_PASSWORD\"}")
if echo "$REGISTER_RESPONSE" | grep -q "token"; then
echo -e "${GREEN}✅ 用户注册成功${NC}"
TOKEN=$(echo "$REGISTER_RESPONSE" | grep -o '"token":"[^"]*' | cut -d'"' -f4)
else
echo -e "${YELLOW}⚠️ 用户可能已存在,尝试登录...${NC}"
fi
# 测试用户登录
echo -e "\n🔐 测试用户登录..."
LOGIN_RESPONSE=$(curl -s -X POST $BASE_URL/api/auth/login \
-H "Content-Type: application/json" \
-d "{\"email\":\"$TEST_USER_EMAIL\",\"password\":\"$TEST_USER_PASSWORD\"}")
if echo "$LOGIN_RESPONSE" | grep -q "token"; then
echo -e "${GREEN}✅ 用户登录成功${NC}"
TOKEN=$(echo "$LOGIN_RESPONSE" | grep -o '"token":"[^"]*' | cut -d'"' -f4)
else
echo -e "${RED}❌ 用户登录失败${NC}"
echo "响应: $LOGIN_RESPONSE"
exit 1
fi
# 测试获取用户资料
echo -e "\n👤 测试获取用户资料..."
PROFILE_RESPONSE=$(curl -s -w "%{http_code}" -X GET $BASE_URL/api/profile \
-H "Authorization: Bearer $TOKEN")
if echo "$PROFILE_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取用户资料成功${NC}"
else
echo -e "${RED}❌ 获取用户资料失败${NC}"
fi
# 测试创建文章
echo -e "\n📝 测试创建文章..."
ARTICLE_DATA='{
"title": "测试文章",
"markdown_content": "# 测试文章\n\n这是一篇测试文章的内容。\n\n## 功能测试\n\n- 支持Markdown\n- 支持代码高亮\n- 支持表格\n\n```go\nfunc main() {\n fmt.Println(\"Hello, PBlog!\")\n}\n```",
"status": "published",
"tags": ["测试", "Go", "博客"]
}'
ARTICLE_RESPONSE=$(curl -s -X POST $BASE_URL/api/articles \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d "$ARTICLE_DATA")
if echo "$ARTICLE_RESPONSE" | grep -q "\"id\""; then
echo -e "${GREEN}✅ 文章创建成功${NC}"
ARTICLE_ID=$(echo "$ARTICLE_RESPONSE" | grep -o '"id":[0-9]*' | cut -d':' -f2)
ARTICLE_SLUG=$(echo "$ARTICLE_RESPONSE" | grep -o '"slug":"[^"]*' | cut -d'"' -f4)
echo "文章ID: $ARTICLE_ID"
echo "文章Slug: $ARTICLE_SLUG"
else
echo -e "${RED}❌ 文章创建失败${NC}"
echo "响应: $ARTICLE_RESPONSE"
fi
# 测试获取文章列表
echo -e "\n📋 测试获取文章列表..."
ARTICLES_RESPONSE=$(curl -s -w "%{http_code}" $BASE_URL/api/articles)
if echo "$ARTICLES_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取文章列表成功${NC}"
# 提取文章数量
ARTICLE_COUNT=$(echo "$ARTICLES_RESPONSE" | grep -o '"total":[0-9]*' | cut -d':' -f2)
echo "文章总数: $ARTICLE_COUNT"
else
echo -e "${RED}❌ 获取文章列表失败${NC}"
fi
# 测试获取单个文章
if [ ! -z "$ARTICLE_SLUG" ]; then
echo -e "\n📄 测试获取单个文章..."
SINGLE_ARTICLE_RESPONSE=$(curl -s -w "%{http_code}" $BASE_URL/api/articles/$ARTICLE_SLUG)
if echo "$SINGLE_ARTICLE_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取单个文章成功${NC}"
else
echo -e "${RED}❌ 获取单个文章失败${NC}"
fi
fi
# 测试创建评论
if [ ! -z "$ARTICLE_ID" ]; then
echo -e "\n💬 测试创建评论..."
COMMENT_DATA='{
"markdown_content": "这是一条测试评论。\n\n**感谢分享!**"
}'
COMMENT_RESPONSE=$(curl -s -X POST $BASE_URL/api/comments/article/$ARTICLE_ID \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $TOKEN" \
-d "$COMMENT_DATA")
if echo "$COMMENT_RESPONSE" | grep -q "\"id\""; then
echo -e "${GREEN}✅ 评论创建成功${NC}"
COMMENT_ID=$(echo "$COMMENT_RESPONSE" | grep -o '"id":[0-9]*' | cut -d':' -f2)
echo "评论ID: $COMMENT_ID"
else
echo -e "${RED}❌ 评论创建失败${NC}"
echo "响应: $COMMENT_RESPONSE"
fi
# 测试获取评论列表
echo -e "\n📋 测试获取评论列表..."
COMMENTS_RESPONSE=$(curl -s -w "%{http_code}" $BASE_URL/api/comments/article/$ARTICLE_ID)
if echo "$COMMENTS_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取评论列表成功${NC}"
COMMENT_COUNT=$(echo "$COMMENTS_RESPONSE" | grep -o '"total":[0-9]*' | cut -d':' -f2)
echo "评论总数: $COMMENT_COUNT"
else
echo -e "${RED}❌ 获取评论列表失败${NC}"
fi
fi
# 测试获取媒体列表
echo -e "\n📁 测试获取媒体列表..."
MEDIA_RESPONSE=$(curl -s -w "%{http_code}" $BASE_URL/api/media \
-H "Authorization: Bearer $TOKEN")
if echo "$MEDIA_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取媒体列表成功${NC}"
else
echo -e "${RED}❌ 获取媒体列表失败${NC}"
fi
# 测试管理员功能(如果是管理员用户)
echo -e "\n🔐 测试管理员登录..."
ADMIN_LOGIN_RESPONSE=$(curl -s -X POST $BASE_URL/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@example.com","password":"admin123"}')
if echo "$ADMIN_LOGIN_RESPONSE" | grep -q "token"; then
echo -e "${GREEN}✅ 管理员登录成功${NC}"
ADMIN_TOKEN=$(echo "$ADMIN_LOGIN_RESPONSE" | grep -o '"token":"[^"]*' | cut -d'"' -f4)
# 测试获取系统统计
echo -e "\n📊 测试获取系统统计..."
STATS_RESPONSE=$(curl -s -w "%{http_code}" $BASE_URL/api/admin/stats \
-H "Authorization: Bearer $ADMIN_TOKEN")
if echo "$STATS_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取系统统计成功${NC}"
else
echo -e "${RED}❌ 获取系统统计失败${NC}"
fi
# 测试获取用户列表
echo -e "\n👥 测试获取用户列表..."
USERS_RESPONSE=$(curl -s -w "%{http_code}" $BASE_URL/api/admin/users \
-H "Authorization: Bearer $ADMIN_TOKEN")
if echo "$USERS_RESPONSE" | grep -q "200"; then
echo -e "${GREEN}✅ 获取用户列表成功${NC}"
else
echo -e "${RED}❌ 获取用户列表失败${NC}"
fi
else
echo -e "${YELLOW}⚠️ 管理员账户未找到或密码错误${NC}"
fi
echo -e "\n✅ API测试完成"
echo -e "\n📝 测试总结:"
echo -e "- 健康检查: ${GREEN}${NC}"
echo -e "- 用户认证: ${GREEN}${NC}"
echo -e "- 文章操作: ${GREEN}${NC}"
echo -e "- 评论功能: ${GREEN}${NC}"
echo -e "- 媒体管理: ${GREEN}${NC}"
echo -e "- 管理功能: ${GREEN}${NC}"
echo -e "\n<><6E> 灵猴社博客系统API测试全部通过"