- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
135 lines
4.1 KiB
Python
135 lines
4.1 KiB
Python
#!/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()
|