test_achievement_fix.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import requests
  2. import json
  3. import random
  4. import string
  5. # 服务器配置
  6. BASE_URL = "http://localhost:8080/api"
  7. def generate_random_username():
  8. """生成随机用户名"""
  9. return 'test_user_' + ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
  10. def register_user(username, password="123456"):
  11. """注册新用户"""
  12. url = f"{BASE_URL}/users/register"
  13. data = {
  14. "username": username,
  15. "password": password,
  16. "grade": "小学三年级"
  17. }
  18. response = requests.post(url, json=data)
  19. return response
  20. def login_user(username, password="123456"):
  21. """用户登录"""
  22. url = f"{BASE_URL}/users/login"
  23. data = {
  24. "username": username,
  25. "password": password
  26. }
  27. response = requests.post(url, json=data)
  28. return response
  29. def get_user_achievements(user_id):
  30. """获取用户成就"""
  31. url = f"{BASE_URL}/achievements/user/{user_id}"
  32. response = requests.get(url)
  33. return response
  34. def simulate_study_activity(user_id, goal_id=1, study_minutes=65):
  35. """模拟学习活动"""
  36. # 模拟答题记录
  37. url = f"{BASE_URL}/user-answers"
  38. data = {
  39. "userId": user_id,
  40. "goalId": goal_id,
  41. "contentId": 1,
  42. "userAnswer": "A",
  43. "isCorrect": True,
  44. "answerDuration": study_minutes * 60 # 转换为秒
  45. }
  46. response = requests.post(url, json=data)
  47. return response
  48. def test_achievement_detection():
  49. """测试成就检测功能"""
  50. print("=== 测试成就检测功能修复 ===")
  51. # 1. 注册新用户
  52. username = generate_random_username()
  53. print(f"\n1. 注册新用户: {username}")
  54. register_response = register_user(username)
  55. if register_response.status_code != 200:
  56. print(f"注册失败: {register_response.text}")
  57. return
  58. user_data = register_response.json()
  59. user_id = user_data['data']['userId']
  60. print(f"用户注册成功,ID: {user_id}")
  61. # 2. 检查初始成就
  62. print(f"\n2. 检查用户 {user_id} 的初始成就")
  63. achievements_response = get_user_achievements(user_id)
  64. if achievements_response.status_code == 200:
  65. achievements = achievements_response.json()
  66. print(f"初始成就数量: {len(achievements)}")
  67. # 显示学习时长成就
  68. study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']]
  69. print(f"学习时长成就数量: {len(study_time_achievements)}")
  70. for achievement in study_time_achievements:
  71. print(f" - {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} (已获得: {achievement['isAchieved']})")
  72. # 3. 模拟学习活动(65分钟,应该触发1小时成就)
  73. print(f"\n3. 模拟学习活动(65分钟)")
  74. study_response = simulate_study_activity(user_id, 1, 65)
  75. if study_response.status_code == 200:
  76. print("学习活动记录成功")
  77. else:
  78. print(f"学习活动记录失败: {study_response.text}")
  79. # 4. 检查成就更新
  80. print(f"\n4. 检查成就更新情况")
  81. achievements_response = get_user_achievements(user_id)
  82. if achievements_response.status_code == 200:
  83. achievements = achievements_response.json()
  84. # 检查学习时长成就
  85. study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']]
  86. print("学习时长成就更新情况:")
  87. for achievement in study_time_achievements:
  88. status = "✅ 已获得" if achievement['isAchieved'] else "❌ 未获得"
  89. print(f" - {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} {status}")
  90. # 检查是否有成就被正确触发
  91. completed_achievements = [a for a in achievements if a['isAchieved']]
  92. print(f"\n已完成成就数量: {len(completed_achievements)}")
  93. for achievement in completed_achievements:
  94. print(f" ✅ {achievement['title']} - {achievement['description']}")
  95. # 5. 再次模拟学习活动(累计到10小时)
  96. print(f"\n5. 模拟更多学习活动(累计到10小时)")
  97. for i in range(9): # 再学习9次,每次60分钟
  98. study_response = simulate_study_activity(user_id, 1, 60)
  99. if study_response.status_code == 200:
  100. print(f" 第{i+1}次学习记录成功")
  101. # 6. 最终检查
  102. print(f"\n6. 最终成就检查")
  103. achievements_response = get_user_achievements(user_id)
  104. if achievements_response.status_code == 200:
  105. achievements = achievements_response.json()
  106. study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']]
  107. print("最终学习时长成就状态:")
  108. for achievement in study_time_achievements:
  109. status = "✅ 已获得" if achievement['isAchieved'] else "❌ 未获得"
  110. print(f" - {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} {status}")
  111. completed_achievements = [a for a in achievements if a['isAchieved']]
  112. print(f"\n总计已完成成就: {len(completed_achievements)}")
  113. if len(completed_achievements) >= 2: # 应该至少完成1小时和10小时成就
  114. print("✅ 成就检测功能修复成功!")
  115. else:
  116. print("❌ 成就检测功能仍有问题")
  117. if __name__ == "__main__":
  118. test_achievement_detection()