feat: 初始化考培练系统项目

- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
111
2026-01-24 19:33:28 +08:00
commit 998211c483
1197 changed files with 228429 additions and 0 deletions

134
tests/test_integration.py Normal file
View File

@@ -0,0 +1,134 @@
#!/usr/bin/env python3
"""
前后端集成测试脚本
"""
import requests
import json
import time
def test_backend_api():
"""测试后端API"""
base_url = "http://localhost:8000"
print("🧪 测试后端API...")
# 1. 健康检查
try:
response = requests.get(f"{base_url}/health")
print(f"✅ 健康检查: {response.json()}")
except Exception as e:
print(f"❌ 健康检查失败: {e}")
return False
# 2. 登录测试
login_data = {"username": "testuser", "password": "123456"}
try:
response = requests.post(f"{base_url}/api/v1/auth/login", json=login_data)
if response.status_code == 200:
data = response.json()
print(f"✅ 登录成功: {data['message']}")
print(f" 用户ID: {data['data']['user']['id']}")
print(f" 用户名: {data['data']['user']['username']}")
print(f" 角色: {data['data']['user']['role']}")
# 保存token用于后续测试
global access_token, refresh_token
access_token = data['data']['token']['access_token']
refresh_token = data['data']['token']['refresh_token']
return True
else:
print(f"❌ 登录失败: {response.text}")
return False
except Exception as e:
print(f"❌ 登录请求失败: {e}")
return False
def test_frontend_proxy():
"""测试前端代理配置"""
base_url = "http://localhost:3001"
print("\n🌐 测试前端代理...")
# 1. 检查前端是否可访问
try:
response = requests.get(base_url)
if response.status_code == 200:
print("✅ 前端页面可访问")
else:
print(f"❌ 前端页面访问失败: {response.status_code}")
return False
except Exception as e:
print(f"❌ 前端页面访问失败: {e}")
return False
# 2. 测试前端代理到后端的API调用
try:
# 通过前端代理调用后端API
headers = {"Content-Type": "application/json"}
response = requests.post(f"{base_url}/api/v1/auth/login", json={"username": "testuser", "password": "123456"}, headers=headers)
if response.status_code == 200:
data = response.json()
print("✅ 前端代理API调用成功")
print(f" 响应数据: {data}")
return True
else:
print(f"❌ 前端代理API调用失败: {response.status_code}")
print(f" 响应: {response.text}")
return False
except Exception as e:
print(f"❌ 前端代理API调用失败: {e}")
return False
def test_token_refresh():
"""测试token刷新"""
global access_token, refresh_token
if not access_token or not refresh_token:
print("❌ 没有可用的token进行刷新测试")
return False
print("\n🔄 测试token刷新...")
try:
refresh_data = {"refresh_token": refresh_token}
response = requests.post("http://localhost:8000/api/v1/auth/refresh", json=refresh_data)
if response.status_code == 200:
data = response.json()
print("✅ Token刷新成功")
print(f" 新token: {data['data']['access_token'][:50]}...")
return True
else:
print(f"❌ Token刷新失败: {response.text}")
return False
except Exception as e:
print(f"❌ Token刷新请求失败: {e}")
return False
def main():
"""主测试函数"""
print("🚀 开始前后端集成测试")
print("=" * 50)
# 测试后端API
if not test_backend_api():
print("❌ 后端API测试失败终止测试")
return False
# 测试前端代理
if not test_frontend_proxy():
print("❌ 前端代理测试失败")
return False
# 测试token刷新
if not test_token_refresh():
print("❌ Token刷新测试失败")
return False
print("\n" + "=" * 50)
print("🎉 所有测试通过!前后端集成成功!")
return True
if __name__ == "__main__":
main()