#!/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()