初次提交
This commit is contained in:
231
backend/test_api_8080.py
Normal file
231
backend/test_api_8080.py
Normal file
@@ -0,0 +1,231 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
API测试脚本 - 测试端口8080上的所有端点
|
||||
"""
|
||||
|
||||
import requests
|
||||
import json
|
||||
import time
|
||||
from typing import Dict, List
|
||||
|
||||
class CloudDriveAPITester:
|
||||
def __init__(self, base_url: str = "http://localhost:8080"):
|
||||
self.base_url = base_url
|
||||
self.session = requests.Session()
|
||||
self.session.headers.update({
|
||||
'Content-Type': 'application/json',
|
||||
'Accept': 'application/json'
|
||||
})
|
||||
|
||||
def test_endpoint(self, method: str, endpoint: str, data: Dict = None, description: str = "") -> Dict:
|
||||
"""测试单个端点"""
|
||||
url = f"{self.base_url}{endpoint}"
|
||||
|
||||
try:
|
||||
print(f"📍 {description or f'{method.upper()} {endpoint}'}")
|
||||
|
||||
if method.upper() == 'GET':
|
||||
response = self.session.get(url, timeout=10)
|
||||
elif method.upper() == 'POST':
|
||||
response = self.session.post(url, json=data, timeout=10)
|
||||
elif method.upper() == 'PUT':
|
||||
response = self.session.put(url, json=data, timeout=10)
|
||||
elif method.upper() == 'DELETE':
|
||||
response = self.session.delete(url, timeout=10)
|
||||
else:
|
||||
return {"status": "error", "message": f"不支持的HTTP方法: {method}"}
|
||||
|
||||
if response.status_code == 200:
|
||||
try:
|
||||
data = response.json()
|
||||
print(f" ✅ 成功 (200): {json.dumps(data, ensure_ascii=False, indent=2)[:200]}...")
|
||||
return {
|
||||
"status": "success",
|
||||
"code": response.status_code,
|
||||
"data": data
|
||||
}
|
||||
except json.JSONDecodeError:
|
||||
print(f" ✅ 成功 (200): {response.text[:200]}...")
|
||||
return {
|
||||
"status": "success",
|
||||
"code": response.status_code,
|
||||
"text": response.text
|
||||
}
|
||||
else:
|
||||
print(f" ❌ 失败 ({response.status_code}): {response.text[:200]}...")
|
||||
return {
|
||||
"status": "failed",
|
||||
"code": response.status_code,
|
||||
"error": response.text
|
||||
}
|
||||
|
||||
except requests.exceptions.ConnectionError:
|
||||
print(f" ❌ 连接失败 - 无法连接到 {url}")
|
||||
return {"status": "connection_failed", "error": "Connection failed"}
|
||||
except requests.exceptions.Timeout:
|
||||
print(f" ❌ 请求超时")
|
||||
return {"status": "timeout", "error": "Request timeout"}
|
||||
except Exception as e:
|
||||
print(f" ❌ 未知错误: {e}")
|
||||
return {"status": "error", "error": str(e)}
|
||||
|
||||
def test_basic_endpoints(self) -> Dict:
|
||||
"""测试基础端点"""
|
||||
print("🔍 测试基础端点")
|
||||
print("=" * 50)
|
||||
|
||||
results = {}
|
||||
|
||||
# 测试根路径
|
||||
results["root"] = self.test_endpoint("GET", "/", description="根路径")
|
||||
|
||||
# 测试健康检查端点
|
||||
results["health"] = self.test_endpoint("GET", "/health", description="健康检查")
|
||||
results["api_health"] = self.test_endpoint("GET", "/api/v1/health", description="API健康检查")
|
||||
|
||||
# 测试文档端点
|
||||
results["docs"] = self.test_endpoint("GET", "/docs", description="API文档")
|
||||
results["redoc"] = self.test_endpoint("GET", "/redoc", description="ReDoc文档")
|
||||
results["openapi"] = self.test_endpoint("GET", "/openapi.json", description="OpenAPI规范")
|
||||
|
||||
return results
|
||||
|
||||
def test_auth_endpoints(self) -> Dict:
|
||||
"""测试认证端点"""
|
||||
print("\n🔐 测试认证端点")
|
||||
print("=" * 50)
|
||||
|
||||
results = {}
|
||||
|
||||
# 测试注册端点
|
||||
test_user = {
|
||||
"username": "testuser8080",
|
||||
"email": "test8080@example.com",
|
||||
"password": "Test123!@#",
|
||||
"confirm_password": "Test123!@#"
|
||||
}
|
||||
results["register"] = self.test_endpoint("POST", "/api/v1/auth/register",
|
||||
data=test_user, description="用户注册")
|
||||
|
||||
# 测试登录端点
|
||||
login_data = {
|
||||
"username": "testuser8080",
|
||||
"password": "Test123!@#"
|
||||
}
|
||||
results["login"] = self.test_endpoint("POST", "/api/v1/auth/token",
|
||||
data=login_data, description="用户登录")
|
||||
|
||||
return results
|
||||
|
||||
def test_file_endpoints(self) -> Dict:
|
||||
"""测试文件端点"""
|
||||
print("\n📁 测试文件端点")
|
||||
print("=" * 50)
|
||||
|
||||
results = {}
|
||||
|
||||
# 测试文件列表
|
||||
results["list_files"] = self.test_endpoint("GET", "/api/v1/files",
|
||||
description="获取文件列表")
|
||||
|
||||
# 测试文件上传(模拟)
|
||||
results["upload_info"] = self.test_endpoint("GET", "/api/v1/files",
|
||||
description="文件上传信息")
|
||||
|
||||
return results
|
||||
|
||||
def run_all_tests(self) -> Dict:
|
||||
"""运行所有测试"""
|
||||
print("🧪 开始API测试 - 端口8080")
|
||||
print("=" * 60)
|
||||
print(f"测试目标: {self.base_url}")
|
||||
print("=" * 60)
|
||||
|
||||
all_results = {}
|
||||
|
||||
# 测试基础端点
|
||||
basic_results = self.test_basic_endpoints()
|
||||
all_results.update(basic_results)
|
||||
|
||||
# 测试认证端点
|
||||
auth_results = self.test_auth_endpoints()
|
||||
all_results.update(auth_results)
|
||||
|
||||
# 测试文件端点
|
||||
file_results = self.test_file_endpoints()
|
||||
all_results.update(file_results)
|
||||
|
||||
# 生成测试报告
|
||||
self.generate_report(all_results)
|
||||
|
||||
return all_results
|
||||
|
||||
def generate_report(self, results: Dict):
|
||||
"""生成测试报告"""
|
||||
print("\n📊 测试报告")
|
||||
print("=" * 60)
|
||||
|
||||
total_tests = len(results)
|
||||
success_tests = sum(1 for r in results.values() if r.get("status") == "success")
|
||||
failed_tests = total_tests - success_tests
|
||||
|
||||
print(f"总测试数: {total_tests}")
|
||||
print(f"成功: {success_tests}")
|
||||
print(f"失败: {failed_tests}")
|
||||
print(f"成功率: {(success_tests/total_tests*100):.1f}%")
|
||||
|
||||
if failed_tests == 0:
|
||||
print("\n🎉 所有测试通过!API服务运行正常")
|
||||
else:
|
||||
print(f"\n⚠️ 有 {failed_tests} 个测试失败,请检查服务状态")
|
||||
|
||||
print("\n📋 详细结果:")
|
||||
for endpoint, result in results.items():
|
||||
status = result.get("status", "unknown")
|
||||
if status == "success":
|
||||
print(f" ✅ {endpoint}")
|
||||
elif status == "connection_failed":
|
||||
print(f" 🔌 {endpoint} - 连接失败")
|
||||
elif status == "timeout":
|
||||
print(f" ⏰ {endpoint} - 超时")
|
||||
else:
|
||||
print(f" ❌ {endpoint} - {status}")
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
import argparse
|
||||
|
||||
parser = argparse.ArgumentParser(description="云盘API测试工具")
|
||||
parser.add_argument("--url", default="http://localhost:8080",
|
||||
help="API基础URL (默认: http://localhost:8080)")
|
||||
parser.add_argument("--wait", type=int, default=0,
|
||||
help="启动前等待时间(秒)")
|
||||
parser.add_argument("--basic", action="store_true", help="只测试基础端点")
|
||||
parser.add_argument("--auth", action="store_true", help="只测试认证端点")
|
||||
parser.add_argument("--files", action="store_true", help="只测试文件端点")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if args.wait > 0:
|
||||
print(f"⏳ 等待 {args.wait} 秒后开始测试...")
|
||||
time.sleep(args.wait)
|
||||
|
||||
tester = CloudDriveAPITester(args.url)
|
||||
|
||||
try:
|
||||
if args.basic:
|
||||
tester.test_basic_endpoints()
|
||||
elif args.auth:
|
||||
tester.test_auth_endpoints()
|
||||
elif args.files:
|
||||
tester.test_file_endpoints()
|
||||
else:
|
||||
tester.run_all_tests()
|
||||
except KeyboardInterrupt:
|
||||
print("\n🛑 测试已中断")
|
||||
except Exception as e:
|
||||
print(f"\n❌ 测试过程中出现错误: {e}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user