123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- 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()
|