import requests import json import random import string # 服务器配置 BASE_URL = "http://localhost:8080/api" def generate_random_username(): """生成随机用户名""" return 'test_user_' + ''.join(random.choices(string.ascii_lowercase + string.digits, k=8)) def register_user(username, password="123456"): """注册新用户""" url = f"{BASE_URL}/users/register" data = { "username": username, "password": password, "grade": "小学三年级" } response = requests.post(url, json=data) return response def login_user(username, password="123456"): """用户登录""" url = f"{BASE_URL}/users/login" data = { "username": username, "password": password } response = requests.post(url, json=data) return response def get_user_achievements(user_id): """获取用户成就""" url = f"{BASE_URL}/achievements/user/{user_id}" response = requests.get(url) return response def simulate_study_activity(user_id, goal_id=1, study_minutes=65): """模拟学习活动""" # 模拟答题记录 url = f"{BASE_URL}/user-answers" data = { "userId": user_id, "goalId": goal_id, "contentId": 1, "userAnswer": "A", "isCorrect": True, "answerDuration": study_minutes * 60 # 转换为秒 } response = requests.post(url, json=data) return response def test_achievement_detection(): """测试成就检测功能""" print("=== 测试成就检测功能修复 ===") # 1. 注册新用户 username = generate_random_username() print(f"\n1. 注册新用户: {username}") register_response = register_user(username) if register_response.status_code != 200: print(f"注册失败: {register_response.text}") return user_data = register_response.json() user_id = user_data['data']['userId'] print(f"用户注册成功,ID: {user_id}") # 2. 检查初始成就 print(f"\n2. 检查用户 {user_id} 的初始成就") achievements_response = get_user_achievements(user_id) if achievements_response.status_code == 200: achievements = achievements_response.json() print(f"初始成就数量: {len(achievements)}") # 显示学习时长成就 study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']] print(f"学习时长成就数量: {len(study_time_achievements)}") for achievement in study_time_achievements: print(f" - {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} (已获得: {achievement['isAchieved']})") # 3. 模拟学习活动(65分钟,应该触发1小时成就) print(f"\n3. 模拟学习活动(65分钟)") study_response = simulate_study_activity(user_id, 1, 65) if study_response.status_code == 200: print("学习活动记录成功") else: print(f"学习活动记录失败: {study_response.text}") # 4. 检查成就更新 print(f"\n4. 检查成就更新情况") achievements_response = get_user_achievements(user_id) if achievements_response.status_code == 200: achievements = achievements_response.json() # 检查学习时长成就 study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']] print("学习时长成就更新情况:") for achievement in study_time_achievements: status = "✅ 已获得" if achievement['isAchieved'] else "❌ 未获得" print(f" - {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} {status}") # 检查是否有成就被正确触发 completed_achievements = [a for a in achievements if a['isAchieved']] print(f"\n已完成成就数量: {len(completed_achievements)}") for achievement in completed_achievements: print(f" ✅ {achievement['title']} - {achievement['description']}") # 5. 再次模拟学习活动(累计到10小时) print(f"\n5. 模拟更多学习活动(累计到10小时)") for i in range(9): # 再学习9次,每次60分钟 study_response = simulate_study_activity(user_id, 1, 60) if study_response.status_code == 200: print(f" 第{i+1}次学习记录成功") # 6. 最终检查 print(f"\n6. 最终成就检查") achievements_response = get_user_achievements(user_id) if achievements_response.status_code == 200: achievements = achievements_response.json() study_time_achievements = [a for a in achievements if 'STUDY_TIME' in a['type']] print("最终学习时长成就状态:") for achievement in study_time_achievements: status = "✅ 已获得" if achievement['isAchieved'] else "❌ 未获得" print(f" - {achievement['title']}: {achievement['currentValue']}/{achievement['targetValue']} {status}") completed_achievements = [a for a in achievements if a['isAchieved']] print(f"\n总计已完成成就: {len(completed_achievements)}") if len(completed_achievements) >= 2: # 应该至少完成1小时和10小时成就 print("✅ 成就检测功能修复成功!") else: print("❌ 成就检测功能仍有问题") if __name__ == "__main__": test_achievement_detection()