test_submit_button.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 测试答题页面提交按钮API调用
  5. """
  6. import requests
  7. import json
  8. import time
  9. # 服务器配置
  10. BASE_URL = "http://localhost:8080"
  11. SUBMIT_URL = f"{BASE_URL}/api/user-answers/submit"
  12. def test_submit_answer():
  13. """
  14. 测试提交答案接口
  15. """
  16. print("=== 测试答题提交接口 ===")
  17. # 模拟提交答案的请求数据
  18. submit_data = {
  19. "userId": 1,
  20. "goalId": 1, # 使用已存在的目标ID
  21. "contentId": 1, # 使用已存在的题目ID
  22. "userAnswer": "y = x² + 2x + 1", # 使用正确答案
  23. "answerDuration": 30 # 答题时长30秒
  24. }
  25. print(f"请求URL: {SUBMIT_URL}")
  26. print(f"请求数据: {json.dumps(submit_data, ensure_ascii=False, indent=2)}")
  27. try:
  28. # 发送POST请求
  29. response = requests.post(
  30. SUBMIT_URL,
  31. json=submit_data,
  32. headers={
  33. 'Content-Type': 'application/json'
  34. },
  35. timeout=10
  36. )
  37. print(f"\n响应状态码: {response.status_code}")
  38. print(f"响应头: {dict(response.headers)}")
  39. if response.text:
  40. try:
  41. response_json = response.json()
  42. print(f"响应内容: {json.dumps(response_json, ensure_ascii=False, indent=2)}")
  43. # 判断是否成功
  44. if response.status_code == 200:
  45. if response_json.get('code') == 200:
  46. print("\n✅ 提交答案成功!")
  47. return True
  48. else:
  49. print(f"\n❌ 提交失败: {response_json.get('message', '未知错误')}")
  50. return False
  51. else:
  52. print(f"\n❌ HTTP请求失败: {response.status_code}")
  53. return False
  54. except json.JSONDecodeError:
  55. print(f"响应内容(非JSON): {response.text}")
  56. return False
  57. else:
  58. print("响应内容为空")
  59. return False
  60. except requests.exceptions.ConnectionError:
  61. print("\n❌ 连接失败: 服务器未启动或无法访问")
  62. return False
  63. except requests.exceptions.Timeout:
  64. print("\n❌ 请求超时")
  65. return False
  66. except Exception as e:
  67. print(f"\n❌ 请求异常: {str(e)}")
  68. return False
  69. def test_multiple_submissions():
  70. """
  71. 测试多次提交(模拟连续答题)
  72. """
  73. print("\n=== 测试多次提交 ===")
  74. test_cases = [
  75. {
  76. "userId": 1,
  77. "goalId": 3,
  78. "contentId": 1,
  79. "userAnswer": "选项A",
  80. "answerDuration": 25
  81. },
  82. {
  83. "userId": 1,
  84. "goalId": 3,
  85. "contentId": 2,
  86. "userAnswer": "选项B",
  87. "answerDuration": 35
  88. },
  89. {
  90. "userId": 1,
  91. "goalId": 3,
  92. "contentId": 3,
  93. "userAnswer": "选项C",
  94. "answerDuration": 40
  95. }
  96. ]
  97. success_count = 0
  98. for i, test_data in enumerate(test_cases, 1):
  99. print(f"\n--- 测试用例 {i} ---")
  100. print(f"题目ID: {test_data['contentId']}, 答案: {test_data['userAnswer']}")
  101. try:
  102. response = requests.post(
  103. SUBMIT_URL,
  104. json=test_data,
  105. headers={'Content-Type': 'application/json'},
  106. timeout=10
  107. )
  108. if response.status_code == 200:
  109. response_json = response.json()
  110. if response_json.get('code') == 200:
  111. print(f"✅ 测试用例 {i} 成功")
  112. success_count += 1
  113. else:
  114. print(f"❌ 测试用例 {i} 失败: {response_json.get('message')}")
  115. else:
  116. print(f"❌ 测试用例 {i} HTTP错误: {response.status_code}")
  117. except Exception as e:
  118. print(f"❌ 测试用例 {i} 异常: {str(e)}")
  119. # 间隔1秒
  120. time.sleep(1)
  121. print(f"\n总结: {success_count}/{len(test_cases)} 个测试用例成功")
  122. return success_count == len(test_cases)
  123. if __name__ == "__main__":
  124. print("开始测试答题提交功能...\n")
  125. # 测试单次提交
  126. single_success = test_submit_answer()
  127. # 如果单次提交成功,继续测试多次提交
  128. if single_success:
  129. multiple_success = test_multiple_submissions()
  130. if multiple_success:
  131. print("\n🎉 所有测试通过!提交按钮功能正常")
  132. else:
  133. print("\n⚠️ 部分测试失败,请检查服务器日志")
  134. else:
  135. print("\n❌ 基础提交测试失败,请检查服务器状态")
  136. print("\n测试完成。")