simple_api_test.py 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 简单的API测试来验证difficulty字段
  5. """
  6. import requests
  7. import json
  8. def test_goal_creation_and_difficulty():
  9. """测试目标创建和difficulty字段"""
  10. print("=== 测试目标创建和difficulty字段 ===")
  11. base_url = "http://localhost:8080"
  12. # 使用正确的字段名称创建目标
  13. goal_data = {
  14. "userId": 1,
  15. "subject": "数学",
  16. "goalType": "练习",
  17. "goalContent": "测试目标内容",
  18. "difficulty": "中等",
  19. "totalQuantity": 5,
  20. "estimatedTime": 30
  21. }
  22. try:
  23. print(f"发送创建目标请求: {goal_data}")
  24. response = requests.post(f"{base_url}/api/goals", json=goal_data)
  25. print(f"创建目标响应状态: {response.status_code}")
  26. if response.status_code == 200 or response.status_code == 201:
  27. try:
  28. result = response.json()
  29. print(f"创建成功响应: {result}")
  30. # 提取目标ID
  31. goal_id = None
  32. if isinstance(result, dict):
  33. if 'data' in result and isinstance(result['data'], dict):
  34. goal_id = result['data'].get('goalId')
  35. elif 'goalId' in result:
  36. goal_id = result['goalId']
  37. elif 'id' in result:
  38. goal_id = result['id']
  39. print(f"提取到的目标ID: {goal_id}")
  40. if goal_id:
  41. # 获取目标详情
  42. print(f"\n获取目标 {goal_id} 的详情...")
  43. detail_response = requests.get(f"{base_url}/api/goals/{goal_id}/details")
  44. print(f"获取详情响应状态: {detail_response.status_code}")
  45. if detail_response.status_code == 200:
  46. try:
  47. details = detail_response.json()
  48. print(f"详情响应: {details}")
  49. # 检查difficulty字段
  50. questions = []
  51. if isinstance(details, dict) and 'data' in details:
  52. questions = details['data'] if isinstance(details['data'], list) else [details['data']]
  53. elif isinstance(details, list):
  54. questions = details
  55. print(f"\n找到 {len(questions)} 个题目:")
  56. for i, question in enumerate(questions):
  57. if isinstance(question, dict):
  58. difficulty = question.get('difficulty')
  59. question_id = question.get('id') or question.get('detailId')
  60. question_content = question.get('question', '')[:50] + '...' if question.get('question') else 'N/A'
  61. print(f" 题目 {i+1} (ID: {question_id}):")
  62. print(f" 内容: {question_content}")
  63. print(f" difficulty: '{difficulty}'")
  64. if difficulty is None:
  65. print(f" ❌ difficulty字段为null")
  66. elif difficulty == '':
  67. print(f" ❌ difficulty字段为空字符串")
  68. else:
  69. print(f" ✅ difficulty字段有值: {difficulty}")
  70. else:
  71. print(f" 题目 {i+1}: 数据格式异常 - {question}")
  72. except Exception as e:
  73. print(f"解析详情响应失败: {e}")
  74. print(f"原始响应: {detail_response.text}")
  75. elif detail_response.status_code == 500:
  76. try:
  77. error_data = detail_response.json()
  78. print(f"获取详情失败 (500): {error_data.get('message', '未知错误')}")
  79. except:
  80. print(f"获取详情失败 (500): {detail_response.text[:200]}...")
  81. else:
  82. print(f"获取详情失败: HTTP {detail_response.status_code}")
  83. print(f"响应: {detail_response.text[:200]}...")
  84. else:
  85. print("无法从响应中提取目标ID")
  86. except Exception as e:
  87. print(f"解析创建响应失败: {e}")
  88. print(f"原始响应: {response.text}")
  89. elif response.status_code == 500:
  90. try:
  91. error_data = response.json()
  92. print(f"创建失败 (500): {error_data.get('message', '未知错误')}")
  93. except:
  94. print(f"创建失败 (500): {response.text[:200]}...")
  95. else:
  96. try:
  97. error_data = response.json()
  98. print(f"创建失败 ({response.status_code}): {error_data}")
  99. except:
  100. print(f"创建失败 ({response.status_code}): {response.text[:200]}...")
  101. except Exception as e:
  102. print(f"目标创建测试失败: {e}")
  103. def test_existing_goals():
  104. """测试获取现有目标"""
  105. print("\n=== 测试获取现有目标 ===")
  106. base_url = "http://localhost:8080"
  107. try:
  108. # 获取所有目标
  109. response = requests.get(f"{base_url}/api/goals")
  110. print(f"获取目标列表: {response.status_code}")
  111. if response.status_code == 200:
  112. try:
  113. result = response.json()
  114. print(f"目标列表响应: {result}")
  115. goals = []
  116. if isinstance(result, dict) and 'data' in result:
  117. goals = result['data'] if isinstance(result['data'], list) else [result['data']]
  118. elif isinstance(result, list):
  119. goals = result
  120. print(f"\n找到 {len(goals)} 个目标")
  121. # 检查每个目标的详情
  122. for goal in goals[:3]: # 只检查前3个目标
  123. if isinstance(goal, dict):
  124. goal_id = goal.get('goalId') or goal.get('id')
  125. if goal_id:
  126. print(f"\n检查目标 {goal_id} 的详情...")
  127. detail_response = requests.get(f"{base_url}/api/goals/{goal_id}/details")
  128. if detail_response.status_code == 200:
  129. try:
  130. details = detail_response.json()
  131. questions = []
  132. if isinstance(details, dict) and 'data' in details:
  133. questions = details['data'] if isinstance(details['data'], list) else [details['data']]
  134. elif isinstance(details, list):
  135. questions = details
  136. print(f" 目标 {goal_id} 有 {len(questions)} 个题目")
  137. for i, question in enumerate(questions[:2]): # 只检查前2个题目
  138. if isinstance(question, dict):
  139. difficulty = question.get('difficulty')
  140. question_id = question.get('id') or question.get('detailId')
  141. print(f" 题目 {question_id}: difficulty = '{difficulty}'")
  142. if difficulty is None:
  143. print(f" ❌ difficulty字段为null")
  144. elif difficulty == '':
  145. print(f" ❌ difficulty字段为空")
  146. else:
  147. print(f" ✅ difficulty字段有值")
  148. except Exception as e:
  149. print(f" 解析目标 {goal_id} 详情失败: {e}")
  150. else:
  151. print(f" 获取目标 {goal_id} 详情失败: {detail_response.status_code}")
  152. except Exception as e:
  153. print(f"解析目标列表失败: {e}")
  154. print(f"原始响应: {response.text[:200]}...")
  155. elif response.status_code == 500:
  156. try:
  157. error_data = response.json()
  158. print(f"获取目标列表失败 (500): {error_data.get('message', '未知错误')}")
  159. except:
  160. print(f"获取目标列表失败 (500): {response.text[:200]}...")
  161. else:
  162. print(f"获取目标列表失败: HTTP {response.status_code}")
  163. except Exception as e:
  164. print(f"获取现有目标测试失败: {e}")
  165. def main():
  166. """主函数"""
  167. print("开始difficulty字段验证测试...")
  168. # 测试创建新目标
  169. test_goal_creation_and_difficulty()
  170. # 测试现有目标
  171. test_existing_goals()
  172. print("\n=== 测试完成 ===")
  173. print("\n总结:")
  174. print("- 如果看到 ❌ difficulty字段为null,说明问题仍然存在")
  175. print("- 如果看到 ✅ difficulty字段有值,说明修复已生效")
  176. print("- 如果API返回500错误,请检查后端服务日志")
  177. if __name__ == "__main__":
  178. main()