- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
122 lines
3.7 KiB
Python
122 lines
3.7 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
测试陪练记录API
|
||
"""
|
||
import requests
|
||
import json
|
||
from datetime import datetime, timedelta
|
||
|
||
# API基础URL
|
||
BASE_URL = "http://localhost:8000"
|
||
|
||
# 测试用户的token(需要先登录获取)
|
||
def login(username: str, password: str):
|
||
"""登录获取token"""
|
||
response = requests.post(
|
||
f"{BASE_URL}/api/v1/auth/login",
|
||
json={"username": username, "password": password}
|
||
)
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
if data.get("code") == 200:
|
||
return data["data"]["access_token"]
|
||
print(f"登录失败: {response.text}")
|
||
return None
|
||
|
||
def test_practice_sessions(token: str, params: dict = None):
|
||
"""测试陪练记录列表API"""
|
||
headers = {"Authorization": f"Bearer {token}"}
|
||
|
||
response = requests.get(
|
||
f"{BASE_URL}/api/v1/practice/sessions/list",
|
||
headers=headers,
|
||
params=params or {}
|
||
)
|
||
|
||
print(f"\n{'='*60}")
|
||
print(f"请求参数: {params}")
|
||
print(f"响应状态码: {response.status_code}")
|
||
print(f"{'='*60}")
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
print(json.dumps(data, indent=2, ensure_ascii=False))
|
||
|
||
if data.get("code") == 200:
|
||
result_data = data["data"]
|
||
print(f"\n📊 统计信息:")
|
||
print(f" - 总记录数: {result_data.get('total')}")
|
||
print(f" - 当前页码: {result_data.get('page')}")
|
||
print(f" - 每页数量: {result_data.get('page_size')}")
|
||
print(f" - 总页数: {result_data.get('pages')}")
|
||
print(f" - 本页记录数: {len(result_data.get('items', []))}")
|
||
|
||
if result_data.get('items'):
|
||
print(f"\n📝 前3条记录:")
|
||
for i, item in enumerate(result_data['items'][:3], 1):
|
||
print(f" {i}. {item.get('scene_name')} - 评分: {item.get('total_score')} - {item.get('start_time')}")
|
||
else:
|
||
print(f"请求失败: {response.text}")
|
||
|
||
def test_practice_stats(token: str):
|
||
"""测试陪练统计API"""
|
||
headers = {"Authorization": f"Bearer {token}"}
|
||
|
||
response = requests.get(
|
||
f"{BASE_URL}/api/v1/practice/stats",
|
||
headers=headers
|
||
)
|
||
|
||
print(f"\n{'='*60}")
|
||
print(f"陪练统计API")
|
||
print(f"{'='*60}")
|
||
|
||
if response.status_code == 200:
|
||
data = response.json()
|
||
print(json.dumps(data, indent=2, ensure_ascii=False))
|
||
else:
|
||
print(f"请求失败: {response.text}")
|
||
|
||
if __name__ == "__main__":
|
||
# 测试不同用户
|
||
test_users = [
|
||
("superadmin", "admin123"),
|
||
("nurse_001", "password123"),
|
||
("consultant_001", "password123"),
|
||
]
|
||
|
||
for username, password in test_users:
|
||
print(f"\n{'#'*60}")
|
||
print(f"# 测试用户: {username}")
|
||
print(f"{'#'*60}")
|
||
|
||
# 登录
|
||
token = login(username, password)
|
||
if not token:
|
||
print(f"❌ {username} 登录失败,跳过")
|
||
continue
|
||
|
||
print(f"✅ {username} 登录成功")
|
||
|
||
# 测试统计API
|
||
test_practice_stats(token)
|
||
|
||
# 测试列表API - 无参数
|
||
print(f"\n\n测试场景1: 无参数查询")
|
||
test_practice_sessions(token)
|
||
|
||
# 测试列表API - 带日期范围
|
||
print(f"\n\n测试场景2: 最近30天")
|
||
today = datetime.now()
|
||
start_date = (today - timedelta(days=30)).strftime("%Y-%m-%d")
|
||
end_date = today.strftime("%Y-%m-%d")
|
||
test_practice_sessions(token, {
|
||
"start_date": start_date,
|
||
"end_date": end_date,
|
||
"page": 1,
|
||
"size": 20
|
||
})
|
||
|
||
print("\n" + "="*60 + "\n")
|
||
|