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

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

123 lines
5.0 KiB
Python
Raw Permalink 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
"""
验证考试设置功能是否正常工作
"""
import asyncio
import json
import httpx
from datetime import datetime
BASE_URL = "http://localhost:8000"
async def main():
async with httpx.AsyncClient() as client:
# 1. 登录获取token
print("=== 考试设置功能验证 ===\n")
print("1. 登录管理员账号...")
login_resp = await client.post(
f"{BASE_URL}/api/v1/auth/login",
json={"username": "admin", "password": "Admin123!"}
)
login_data = login_resp.json()
if login_data['code'] != 200:
print(f"登录失败: {login_data}")
return
token = login_data["data"]["token"]["access_token"]
headers = {"Authorization": f"Bearer {token}"}
print("✓ 登录成功\n")
# 2. 获取课程7的当前考试设置
print("2. 获取课程7的当前考试设置...")
get_resp = await client.get(
f"{BASE_URL}/api/v1/courses/7/exam-settings",
headers=headers
)
get_data = get_resp.json()
if get_data['code'] == 200 and get_data['data']:
print("✓ 成功获取考试设置")
current = get_data['data']
print(f"\n当前设置:")
print(f" - 单选题: {current['single_choice_count']}")
print(f" - 多选题: {current['multiple_choice_count']}")
print(f" - 判断题: {current['true_false_count']}")
print(f" - 填空题: {current['fill_blank_count']}")
print(f" - 考试时长: {current['duration_minutes']}分钟")
print(f" - 难度等级: {current['difficulty_level']}")
print(f" - 是否启用: {'' if current['is_enabled'] else ''}")
print(f" - 更新时间: {current['updated_at']}")
else:
print(f"✗ 获取失败: {get_data}")
# 3. 测试更新功能
print("\n3. 测试更新考试设置...")
test_settings = {
"single_choice_count": 25,
"multiple_choice_count": 12,
"true_false_count": 10,
"fill_blank_count": 6,
"duration_minutes": 120,
"difficulty_level": 5,
"is_enabled": True
}
update_resp = await client.post(
f"{BASE_URL}/api/v1/courses/7/exam-settings",
json=test_settings,
headers=headers
)
update_data = update_resp.json()
if update_data['code'] == 200:
print("✓ 成功更新考试设置")
# 4. 再次获取验证
print("\n4. 再次获取验证更新...")
verify_resp = await client.get(
f"{BASE_URL}/api/v1/courses/7/exam-settings",
headers=headers
)
verify_data = verify_resp.json()
if verify_data['code'] == 200 and verify_data['data']:
updated = verify_data['data']
print("\n更新后的设置:")
print(f" - 单选题: {updated['single_choice_count']}")
print(f" - 多选题: {updated['multiple_choice_count']}")
print(f" - 判断题: {updated['true_false_count']}")
print(f" - 填空题: {updated['fill_blank_count']}")
print(f" - 考试时长: {updated['duration_minutes']}分钟")
print(f" - 难度等级: {updated['difficulty_level']}")
print(f" - 更新时间: {updated['updated_at']}")
# 验证是否正确更新
all_correct = (
updated['single_choice_count'] == test_settings['single_choice_count'] and
updated['multiple_choice_count'] == test_settings['multiple_choice_count'] and
updated['true_false_count'] == test_settings['true_false_count'] and
updated['fill_blank_count'] == test_settings['fill_blank_count'] and
updated['duration_minutes'] == test_settings['duration_minutes'] and
updated['difficulty_level'] == test_settings['difficulty_level']
)
if all_correct:
print("\n✅ 考试设置功能完全正常!数据能够正确保存和读取。")
else:
print("\n❌ 数据更新不正确!")
else:
print(f"✗ 验证失败: {verify_data}")
else:
print(f"✗ 更新失败: {update_data}")
# 5. 提示前端检查
print("\n=== 前端检查建议 ===")
print("如果前端仍然显示默认值而不是实际保存的值,请检查:")
print("1. 刷新页面F5后是否正确显示")
print("2. 浏览器控制台是否有错误")
print("3. Network面板中API请求是否成功")
print("4. 清除浏览器缓存后重试")
if __name__ == "__main__":
asyncio.run(main())