123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 简单的API测试来验证difficulty字段
- """
- import requests
- import json
- def test_goal_creation_and_difficulty():
- """测试目标创建和difficulty字段"""
- print("=== 测试目标创建和difficulty字段 ===")
-
- base_url = "http://localhost:8080"
-
- # 使用正确的字段名称创建目标
- goal_data = {
- "userId": 1,
- "subject": "数学",
- "goalType": "练习",
- "goalContent": "测试目标内容",
- "difficulty": "中等",
- "totalQuantity": 5,
- "estimatedTime": 30
- }
-
- try:
- print(f"发送创建目标请求: {goal_data}")
- response = requests.post(f"{base_url}/api/goals", json=goal_data)
- print(f"创建目标响应状态: {response.status_code}")
-
- if response.status_code == 200 or response.status_code == 201:
- try:
- result = response.json()
- print(f"创建成功响应: {result}")
-
- # 提取目标ID
- goal_id = None
- if isinstance(result, dict):
- if 'data' in result and isinstance(result['data'], dict):
- goal_id = result['data'].get('goalId')
- elif 'goalId' in result:
- goal_id = result['goalId']
- elif 'id' in result:
- goal_id = result['id']
-
- print(f"提取到的目标ID: {goal_id}")
-
- if goal_id:
- # 获取目标详情
- print(f"\n获取目标 {goal_id} 的详情...")
- detail_response = requests.get(f"{base_url}/api/goals/{goal_id}/details")
- print(f"获取详情响应状态: {detail_response.status_code}")
-
- if detail_response.status_code == 200:
- try:
- details = detail_response.json()
- print(f"详情响应: {details}")
-
- # 检查difficulty字段
- questions = []
- if isinstance(details, dict) and 'data' in details:
- questions = details['data'] if isinstance(details['data'], list) else [details['data']]
- elif isinstance(details, list):
- questions = details
-
- print(f"\n找到 {len(questions)} 个题目:")
- for i, question in enumerate(questions):
- if isinstance(question, dict):
- difficulty = question.get('difficulty')
- question_id = question.get('id') or question.get('detailId')
- question_content = question.get('question', '')[:50] + '...' if question.get('question') else 'N/A'
-
- print(f" 题目 {i+1} (ID: {question_id}):")
- print(f" 内容: {question_content}")
- print(f" difficulty: '{difficulty}'")
-
- if difficulty is None:
- print(f" ❌ difficulty字段为null")
- elif difficulty == '':
- print(f" ❌ difficulty字段为空字符串")
- else:
- print(f" ✅ difficulty字段有值: {difficulty}")
- else:
- print(f" 题目 {i+1}: 数据格式异常 - {question}")
-
- except Exception as e:
- print(f"解析详情响应失败: {e}")
- print(f"原始响应: {detail_response.text}")
-
- elif detail_response.status_code == 500:
- try:
- error_data = detail_response.json()
- print(f"获取详情失败 (500): {error_data.get('message', '未知错误')}")
- except:
- print(f"获取详情失败 (500): {detail_response.text[:200]}...")
- else:
- print(f"获取详情失败: HTTP {detail_response.status_code}")
- print(f"响应: {detail_response.text[:200]}...")
- else:
- print("无法从响应中提取目标ID")
-
- except Exception as e:
- print(f"解析创建响应失败: {e}")
- print(f"原始响应: {response.text}")
-
- elif response.status_code == 500:
- try:
- error_data = response.json()
- print(f"创建失败 (500): {error_data.get('message', '未知错误')}")
- except:
- print(f"创建失败 (500): {response.text[:200]}...")
-
- else:
- try:
- error_data = response.json()
- print(f"创建失败 ({response.status_code}): {error_data}")
- except:
- print(f"创建失败 ({response.status_code}): {response.text[:200]}...")
-
- except Exception as e:
- print(f"目标创建测试失败: {e}")
- def test_existing_goals():
- """测试获取现有目标"""
- print("\n=== 测试获取现有目标 ===")
-
- base_url = "http://localhost:8080"
-
- try:
- # 获取所有目标
- response = requests.get(f"{base_url}/api/goals")
- print(f"获取目标列表: {response.status_code}")
-
- if response.status_code == 200:
- try:
- result = response.json()
- print(f"目标列表响应: {result}")
-
- goals = []
- if isinstance(result, dict) and 'data' in result:
- goals = result['data'] if isinstance(result['data'], list) else [result['data']]
- elif isinstance(result, list):
- goals = result
-
- print(f"\n找到 {len(goals)} 个目标")
-
- # 检查每个目标的详情
- for goal in goals[:3]: # 只检查前3个目标
- if isinstance(goal, dict):
- goal_id = goal.get('goalId') or goal.get('id')
- if goal_id:
- print(f"\n检查目标 {goal_id} 的详情...")
- detail_response = requests.get(f"{base_url}/api/goals/{goal_id}/details")
-
- if detail_response.status_code == 200:
- try:
- details = detail_response.json()
- questions = []
- if isinstance(details, dict) and 'data' in details:
- questions = details['data'] if isinstance(details['data'], list) else [details['data']]
- elif isinstance(details, list):
- questions = details
-
- print(f" 目标 {goal_id} 有 {len(questions)} 个题目")
- for i, question in enumerate(questions[:2]): # 只检查前2个题目
- if isinstance(question, dict):
- difficulty = question.get('difficulty')
- question_id = question.get('id') or question.get('detailId')
- print(f" 题目 {question_id}: difficulty = '{difficulty}'")
-
- if difficulty is None:
- print(f" ❌ difficulty字段为null")
- elif difficulty == '':
- print(f" ❌ difficulty字段为空")
- else:
- print(f" ✅ difficulty字段有值")
-
- except Exception as e:
- print(f" 解析目标 {goal_id} 详情失败: {e}")
- else:
- print(f" 获取目标 {goal_id} 详情失败: {detail_response.status_code}")
-
- except Exception as e:
- print(f"解析目标列表失败: {e}")
- print(f"原始响应: {response.text[:200]}...")
-
- elif response.status_code == 500:
- try:
- error_data = response.json()
- print(f"获取目标列表失败 (500): {error_data.get('message', '未知错误')}")
- except:
- print(f"获取目标列表失败 (500): {response.text[:200]}...")
-
- else:
- print(f"获取目标列表失败: HTTP {response.status_code}")
-
- except Exception as e:
- print(f"获取现有目标测试失败: {e}")
- def main():
- """主函数"""
- print("开始difficulty字段验证测试...")
-
- # 测试创建新目标
- test_goal_creation_and_difficulty()
-
- # 测试现有目标
- test_existing_goals()
-
- print("\n=== 测试完成 ===")
- print("\n总结:")
- print("- 如果看到 ❌ difficulty字段为null,说明问题仍然存在")
- print("- 如果看到 ✅ difficulty字段有值,说明修复已生效")
- print("- 如果API返回500错误,请检查后端服务日志")
- if __name__ == "__main__":
- main()
|