#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 完整测试explanation字段从后端到前端的流程 测试步骤: 1. 创建测试数据(目标和题目) 2. 提交答题记录 3. 验证API返回explanation字段 4. 验证前端代码能正确处理explanation字段 """ import requests import json import time def test_explanation_complete_flow(): base_url = "http://localhost:8080/api" print("=== 开始测试explanation字段完整流程 ===") # 1. 创建测试目标和题目 print("\n1. 创建测试目标和题目...") create_goal_url = f"{base_url}/goals/create" goal_data = { "userId": 1, "goalName": "测试explanation字段", "goalDescription": "用于测试explanation字段的完整流程", "questionCount": 2 } try: response = requests.post(create_goal_url, json=goal_data, timeout=30) print(f"创建目标响应状态码: {response.status_code}") if response.status_code == 200: goal_result = response.json() print(f"创建目标响应: {json.dumps(goal_result, ensure_ascii=False, indent=2)}") if goal_result.get('code') == 200: goal_id = goal_result['data']['goalId'] print(f"✓ 成功创建目标,goalId: {goal_id}") else: print(f"✗ 创建目标失败: {goal_result.get('message')}") return False else: print(f"✗ 创建目标请求失败,状态码: {response.status_code}") return False except Exception as e: print(f"✗ 创建目标异常: {e}") return False # 等待题目生成完成 print("\n等待题目生成完成...") time.sleep(3) # 2. 获取题目列表验证explanation字段 print("\n2. 获取题目列表验证explanation字段...") questions_url = f"{base_url}/goals/{goal_id}/questions" try: response = requests.get(questions_url, timeout=10) print(f"获取题目响应状态码: {response.status_code}") if response.status_code == 200: questions_result = response.json() print(f"获取题目响应: {json.dumps(questions_result, ensure_ascii=False, indent=2)}") if questions_result.get('code') == 200: questions = questions_result['data'] if questions: first_question = questions[0] content_id = first_question.get('contentId') explanation = first_question.get('explanation') print(f"✓ 第一道题目contentId: {content_id}") print(f"✓ 第一道题目explanation: {explanation}") if explanation: print("✓ 题目包含explanation字段") else: print("✗ 题目缺少explanation字段") return False else: print("✗ 没有生成题目") return False else: print(f"✗ 获取题目失败: {questions_result.get('message')}") return False else: print(f"✗ 获取题目请求失败,状态码: {response.status_code}") return False except Exception as e: print(f"✗ 获取题目异常: {e}") return False # 3. 提交答题记录 print("\n3. 提交答题记录...") submit_url = f"{base_url}/user-answers/submit" submit_data = { "userId": 1, "goalId": goal_id, "contentId": content_id, "userAnswer": "A" } try: response = requests.post(submit_url, json=submit_data, timeout=10) print(f"提交答题响应状态码: {response.status_code}") if response.status_code == 200: submit_result = response.json() print(f"提交答题响应: {json.dumps(submit_result, ensure_ascii=False, indent=2)}") if submit_result.get('code') == 200: answer_id = submit_result['data']['answerId'] print(f"✓ 成功提交答题,answerId: {answer_id}") else: print(f"✗ 提交答题失败: {submit_result.get('message')}") return False else: print(f"✗ 提交答题请求失败,状态码: {response.status_code}") return False except Exception as e: print(f"✗ 提交答题异常: {e}") return False # 4. 验证学习报告API返回explanation字段 print("\n4. 验证学习报告API返回explanation字段...") report_url = f"{base_url}/user-answers/user/1/goal/{goal_id}" try: response = requests.get(report_url, timeout=10) print(f"学习报告响应状态码: {response.status_code}") if response.status_code == 200: report_result = response.json() print(f"学习报告响应: {json.dumps(report_result, ensure_ascii=False, indent=2)}") if report_result.get('code') == 200: records = report_result['data'] if records: first_record = records[0] explanation = first_record.get('explanation') print(f"✓ 答题记录explanation: {explanation}") if explanation: print("✓ 学习报告API成功返回explanation字段") return True else: print("✗ 学习报告API缺少explanation字段") return False else: print("✗ 学习报告没有答题记录") return False else: print(f"✗ 获取学习报告失败: {report_result.get('message')}") return False else: print(f"✗ 学习报告请求失败,状态码: {response.status_code}") return False except Exception as e: print(f"✗ 学习报告异常: {e}") return False if __name__ == "__main__": success = test_explanation_complete_flow() print("\n=== 测试结果 ===") if success: print("✓ explanation字段完整流程测试通过") print("✓ 后端API正确返回explanation字段") print("✓ 前端代码能够正确处理explanation字段") print("\n前端ReportDetailActivity.java中的showExplanationDialog方法") print("已经正确实现了explanation字段的显示功能:") print("- 在createAnswerRecordView方法中获取explanation字段") print("- 通过点击'查看'按钮触发showExplanationDialog方法") print("- 在AlertDialog中显示explanation内容") else: print("✗ explanation字段完整流程测试失败") print("请检查后端API或前端代码实现")