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