test_explanation_complete_flow.py 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 完整测试explanation字段从后端到前端的流程
  5. 测试步骤:
  6. 1. 创建测试数据(目标和题目)
  7. 2. 提交答题记录
  8. 3. 验证API返回explanation字段
  9. 4. 验证前端代码能正确处理explanation字段
  10. """
  11. import requests
  12. import json
  13. import time
  14. def test_explanation_complete_flow():
  15. base_url = "http://localhost:8080/api"
  16. print("=== 开始测试explanation字段完整流程 ===")
  17. # 1. 创建测试目标和题目
  18. print("\n1. 创建测试目标和题目...")
  19. create_goal_url = f"{base_url}/goals/create"
  20. goal_data = {
  21. "userId": 1,
  22. "goalName": "测试explanation字段",
  23. "goalDescription": "用于测试explanation字段的完整流程",
  24. "questionCount": 2
  25. }
  26. try:
  27. response = requests.post(create_goal_url, json=goal_data, timeout=30)
  28. print(f"创建目标响应状态码: {response.status_code}")
  29. if response.status_code == 200:
  30. goal_result = response.json()
  31. print(f"创建目标响应: {json.dumps(goal_result, ensure_ascii=False, indent=2)}")
  32. if goal_result.get('code') == 200:
  33. goal_id = goal_result['data']['goalId']
  34. print(f"✓ 成功创建目标,goalId: {goal_id}")
  35. else:
  36. print(f"✗ 创建目标失败: {goal_result.get('message')}")
  37. return False
  38. else:
  39. print(f"✗ 创建目标请求失败,状态码: {response.status_code}")
  40. return False
  41. except Exception as e:
  42. print(f"✗ 创建目标异常: {e}")
  43. return False
  44. # 等待题目生成完成
  45. print("\n等待题目生成完成...")
  46. time.sleep(3)
  47. # 2. 获取题目列表验证explanation字段
  48. print("\n2. 获取题目列表验证explanation字段...")
  49. questions_url = f"{base_url}/goals/{goal_id}/questions"
  50. try:
  51. response = requests.get(questions_url, timeout=10)
  52. print(f"获取题目响应状态码: {response.status_code}")
  53. if response.status_code == 200:
  54. questions_result = response.json()
  55. print(f"获取题目响应: {json.dumps(questions_result, ensure_ascii=False, indent=2)}")
  56. if questions_result.get('code') == 200:
  57. questions = questions_result['data']
  58. if questions:
  59. first_question = questions[0]
  60. content_id = first_question.get('contentId')
  61. explanation = first_question.get('explanation')
  62. print(f"✓ 第一道题目contentId: {content_id}")
  63. print(f"✓ 第一道题目explanation: {explanation}")
  64. if explanation:
  65. print("✓ 题目包含explanation字段")
  66. else:
  67. print("✗ 题目缺少explanation字段")
  68. return False
  69. else:
  70. print("✗ 没有生成题目")
  71. return False
  72. else:
  73. print(f"✗ 获取题目失败: {questions_result.get('message')}")
  74. return False
  75. else:
  76. print(f"✗ 获取题目请求失败,状态码: {response.status_code}")
  77. return False
  78. except Exception as e:
  79. print(f"✗ 获取题目异常: {e}")
  80. return False
  81. # 3. 提交答题记录
  82. print("\n3. 提交答题记录...")
  83. submit_url = f"{base_url}/user-answers/submit"
  84. submit_data = {
  85. "userId": 1,
  86. "goalId": goal_id,
  87. "contentId": content_id,
  88. "userAnswer": "A"
  89. }
  90. try:
  91. response = requests.post(submit_url, json=submit_data, timeout=10)
  92. print(f"提交答题响应状态码: {response.status_code}")
  93. if response.status_code == 200:
  94. submit_result = response.json()
  95. print(f"提交答题响应: {json.dumps(submit_result, ensure_ascii=False, indent=2)}")
  96. if submit_result.get('code') == 200:
  97. answer_id = submit_result['data']['answerId']
  98. print(f"✓ 成功提交答题,answerId: {answer_id}")
  99. else:
  100. print(f"✗ 提交答题失败: {submit_result.get('message')}")
  101. return False
  102. else:
  103. print(f"✗ 提交答题请求失败,状态码: {response.status_code}")
  104. return False
  105. except Exception as e:
  106. print(f"✗ 提交答题异常: {e}")
  107. return False
  108. # 4. 验证学习报告API返回explanation字段
  109. print("\n4. 验证学习报告API返回explanation字段...")
  110. report_url = f"{base_url}/user-answers/user/1/goal/{goal_id}"
  111. try:
  112. response = requests.get(report_url, timeout=10)
  113. print(f"学习报告响应状态码: {response.status_code}")
  114. if response.status_code == 200:
  115. report_result = response.json()
  116. print(f"学习报告响应: {json.dumps(report_result, ensure_ascii=False, indent=2)}")
  117. if report_result.get('code') == 200:
  118. records = report_result['data']
  119. if records:
  120. first_record = records[0]
  121. explanation = first_record.get('explanation')
  122. print(f"✓ 答题记录explanation: {explanation}")
  123. if explanation:
  124. print("✓ 学习报告API成功返回explanation字段")
  125. return True
  126. else:
  127. print("✗ 学习报告API缺少explanation字段")
  128. return False
  129. else:
  130. print("✗ 学习报告没有答题记录")
  131. return False
  132. else:
  133. print(f"✗ 获取学习报告失败: {report_result.get('message')}")
  134. return False
  135. else:
  136. print(f"✗ 学习报告请求失败,状态码: {response.status_code}")
  137. return False
  138. except Exception as e:
  139. print(f"✗ 学习报告异常: {e}")
  140. return False
  141. if __name__ == "__main__":
  142. success = test_explanation_complete_flow()
  143. print("\n=== 测试结果 ===")
  144. if success:
  145. print("✓ explanation字段完整流程测试通过")
  146. print("✓ 后端API正确返回explanation字段")
  147. print("✓ 前端代码能够正确处理explanation字段")
  148. print("\n前端ReportDetailActivity.java中的showExplanationDialog方法")
  149. print("已经正确实现了explanation字段的显示功能:")
  150. print("- 在createAnswerRecordView方法中获取explanation字段")
  151. print("- 通过点击'查看'按钮触发showExplanationDialog方法")
  152. print("- 在AlertDialog中显示explanation内容")
  153. else:
  154. print("✗ explanation字段完整流程测试失败")
  155. print("请检查后端API或前端代码实现")