Files
012-kaopeilian/tests/test_score_report_api.py
111 998211c483 feat: 初始化考培练系统项目
- 从服务器拉取完整代码
- 按框架规范整理项目结构
- 配置 Drone CI 测试环境部署
- 包含后端(FastAPI)、前端(Vue3)、管理端

技术栈: Vue3 + TypeScript + FastAPI + MySQL
2026-01-24 19:33:28 +08:00

165 lines
5.6 KiB
Python
Raw 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.
#!/usr/bin/env python3
"""
测试成绩报告和错题本API
"""
import requests
import json
BASE_URL = "http://localhost:8000"
# 测试账号token需要先登录获取
# 这里假设已经有token实际使用时需要先登录
TOKEN = ""
def login():
"""登录获取token"""
response = requests.post(
f"{BASE_URL}/api/v1/auth/login",
json={
"username": "testuser",
"password": "TestPass123!"
}
)
if response.status_code == 200:
data = response.json()
if data.get('code') == 200:
return data['data']['access_token']
return None
def test_exam_report(token):
"""测试成绩报告API"""
print("\n=== 测试成绩报告API ===")
headers = {"Authorization": f"Bearer {token}"}
response = requests.get(
f"{BASE_URL}/api/v1/exams/statistics/report",
headers=headers
)
print(f"状态码: {response.status_code}")
if response.status_code == 200:
data = response.json()
print(f"响应code: {data.get('code')}")
print(f"响应message: {data.get('message')}")
if data.get('code') == 200:
report = data.get('data', {})
print(f"\n概览数据:")
print(f" - 平均成绩: {report.get('overview', {}).get('avg_score')}")
print(f" - 考试总数: {report.get('overview', {}).get('total_exams')}")
print(f" - 及格率: {report.get('overview', {}).get('pass_rate')}")
print(f"\n科目数量: {len(report.get('subjects', []))}")
print(f"最近考试数量: {len(report.get('recent_exams', []))}")
# 显示第一条最近考试记录
if report.get('recent_exams'):
exam = report['recent_exams'][0]
print(f"\n第一条考试记录:")
print(f" - ID: {exam.get('id')}")
print(f" - 课程: {exam.get('course_name')}")
print(f" - 三轮得分: {exam.get('round_scores')}")
else:
print(f"业务错误: {data.get('message')}")
else:
print(f"HTTP错误: {response.text}")
def test_mistakes_statistics(token):
"""测试错题统计API"""
print("\n=== 测试错题统计API ===")
headers = {"Authorization": f"Bearer {token}"}
response = requests.get(
f"{BASE_URL}/api/v1/exams/mistakes/statistics",
headers=headers
)
print(f"状态码: {response.status_code}")
if response.status_code == 200:
data = response.json()
print(f"响应code: {data.get('code')}")
if data.get('code') == 200:
stats = data.get('data', {})
print(f"\n错题总数: {stats.get('total')}")
print(f"按课程统计: {len(stats.get('by_course', []))} 个课程")
print(f"按题型统计: {len(stats.get('by_type', []))} 种题型")
print(f"时间统计:")
print(f" - 最近一周: {stats.get('by_time', {}).get('week')}")
print(f" - 最近一月: {stats.get('by_time', {}).get('month')}")
print(f" - 最近三月: {stats.get('by_time', {}).get('quarter')}")
# 显示按课程统计
if stats.get('by_course'):
print(f"\n按课程统计详情:")
for course in stats['by_course'][:3]:
print(f" - {course.get('course_name')}: {course.get('count')}")
else:
print(f"业务错误: {data.get('message')}")
else:
print(f"HTTP错误: {response.text}")
def test_mistakes_list(token):
"""测试错题列表API"""
print("\n=== 测试错题列表API ===")
headers = {"Authorization": f"Bearer {token}"}
# 测试1查询所有错题第1页
response = requests.get(
f"{BASE_URL}/api/v1/exams/mistakes/list",
headers=headers,
params={"page": 1, "size": 5}
)
print(f"状态码: {response.status_code}")
if response.status_code == 200:
data = response.json()
print(f"响应code: {data.get('code')}")
if data.get('code') == 200:
result = data.get('data', {})
print(f"\n总数: {result.get('total')}")
print(f"当前页: {result.get('page')}")
print(f"每页数量: {result.get('size')}")
print(f"总页数: {result.get('pages')}")
print(f"本页错题数: {len(result.get('items', []))}")
# 显示前2条错题
if result.get('items'):
print(f"\n前2条错题:")
for item in result['items'][:2]:
print(f" - ID: {item.get('id')}")
print(f" 课程: {item.get('course_name')}")
print(f" 题型: {item.get('question_type')}")
print(f" 题目: {item.get('question_content')[:50]}...")
else:
print(f"业务错误: {data.get('message')}")
else:
print(f"HTTP错误: {response.text}")
if __name__ == "__main__":
print("开始测试成绩报告和错题本API...")
# 1. 登录获取token
print("\n1. 登录获取token...")
token = login()
if not token:
print("❌ 登录失败")
exit(1)
print(f"✅ 登录成功token: {token[:20]}...")
# 2. 测试成绩报告API
test_exam_report(token)
# 3. 测试错题统计API
test_mistakes_statistics(token)
# 4. 测试错题列表API
test_mistakes_list(token)
print("\n\n测试完成!")