123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- """
- 测试成就初始化功能
- 验证新用户注册和老用户登录时的成就初始化
- """
- import requests
- import json
- import time
- 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 test_new_user_registration():
- """测试新用户注册时的成就初始化"""
- print("\n=== 测试新用户注册时的成就初始化 ===")
-
- # 生成随机用户名
- username = generate_random_username()
- password = "test123"
- grade = "小学三年级"
-
- print(f"注册新用户: {username}")
-
- # 注册用户
- register_data = {
- "username": username,
- "password": password,
- "grade": grade
- }
-
- try:
- response = requests.post(f"{BASE_URL}/users/register", json=register_data)
- print(f"注册响应状态: {response.status_code}")
-
- if response.status_code == 200:
- user_data = response.json()
- print(f"注册成功: {json.dumps(user_data, ensure_ascii=False, indent=2)}")
- user_id = user_data['data']['userId']
-
- # 等待一下确保成就初始化完成
- time.sleep(1)
-
- # 检查用户成就
- achievements_response = requests.get(f"{BASE_URL}/achievements/user/{user_id}")
- print(f"\n获取成就响应状态: {achievements_response.status_code}")
-
- if achievements_response.status_code == 200:
- achievements = achievements_response.json()
- print(f"\n用户成就数量: {len(achievements)}")
-
- if achievements:
- print("\n成就列表:")
- for achievement in achievements:
- status = "已获得" if achievement.get('isAchieved') else "未获得"
- progress = achievement.get('currentValue', 0)
- target = achievement.get('targetValue', 0)
- print(f"- {achievement.get('title')}: {status} ({progress}/{target})")
-
- # 验证所有成就都是未获得状态
- unachieved_count = sum(1 for a in achievements if not a.get('isAchieved'))
- print(f"\n未获得成就数量: {unachieved_count}/{len(achievements)}")
-
- if unachieved_count == len(achievements):
- print("✅ 新用户注册成就初始化测试通过 - 所有成就都是未获得状态")
- return True, user_data
- else:
- print("❌ 新用户注册成就初始化测试失败 - 存在已获得的成就")
- return False, user_data
- else:
- print("❌ 新用户注册成就初始化测试失败 - 没有找到任何成就")
- return False, user_data
- else:
- print(f"❌ 获取成就失败: {achievements_response.text}")
- return False, user_data
- else:
- print(f"❌ 注册失败: {response.text}")
- return False, None
-
- except Exception as e:
- print(f"❌ 测试过程中发生错误: {str(e)}")
- return False, None
- def test_existing_user_login(user_data):
- """测试已存在用户登录时的成就检查"""
- print("\n=== 测试已存在用户登录时的成就检查 ===")
-
- if not user_data:
- print("❌ 没有可用的用户数据进行测试")
- return False
-
- username = user_data['data']['username']
- password = "test123"
-
- print(f"用户登录: {username}")
-
- # 用户登录
- login_data = {
- "username": username,
- "password": password
- }
-
- try:
- response = requests.post(f"{BASE_URL}/users/login", json=login_data)
- print(f"登录响应状态: {response.status_code}")
-
- if response.status_code == 200:
- login_result = response.json()
- print(f"登录成功: {json.dumps(login_result, ensure_ascii=False, indent=2)}")
- user_id = login_result['data']['userId']
-
- # 再次检查用户成就
- achievements_response = requests.get(f"{BASE_URL}/achievements/user/{user_id}")
- print(f"\n获取成就响应状态: {achievements_response.status_code}")
-
- if achievements_response.status_code == 200:
- achievements = achievements_response.json()
- print(f"\n用户成就数量: {len(achievements)}")
-
- if achievements:
- unachieved_count = sum(1 for a in achievements if not a.get('isAchieved'))
- print(f"未获得成就数量: {unachieved_count}/{len(achievements)}")
-
- if len(achievements) > 0:
- print("✅ 用户登录成就检查测试通过 - 成就数据保持一致")
- return True
- else:
- print("❌ 用户登录成就检查测试失败 - 成就数据丢失")
- return False
- else:
- print("❌ 用户登录成就检查测试失败 - 没有找到任何成就")
- return False
- else:
- print(f"❌ 获取成就失败: {achievements_response.text}")
- return False
- else:
- print(f"❌ 登录失败: {response.text}")
- return False
-
- except Exception as e:
- print(f"❌ 测试过程中发生错误: {str(e)}")
- return False
- def test_achievement_types():
- """测试成就类型和数量"""
- print("\n=== 测试成就类型和数量 ===")
-
- # 使用第一个测试用户
- username = generate_random_username()
- password = "test123"
- grade = "小学五年级"
-
- # 注册用户
- register_data = {
- "username": username,
- "password": password,
- "grade": grade
- }
-
- try:
- response = requests.post(f"{BASE_URL}/users/register", json=register_data)
- if response.status_code == 200:
- user_data = response.json()
- user_id = user_data['data']['userId']
-
- time.sleep(1) # 等待成就初始化
-
- # 获取成就
- achievements_response = requests.get(f"{BASE_URL}/achievements/user/{user_id}")
- if achievements_response.status_code == 200:
- achievements = achievements_response.json()
-
- # 按类型分组统计
- type_counts = {}
- for achievement in achievements:
- achievement_type = achievement.get('type', 'UNKNOWN')
- type_counts[achievement_type] = type_counts.get(achievement_type, 0) + 1
-
- print(f"\n成就类型统计:")
- for achievement_type, count in type_counts.items():
- print(f"- {achievement_type}: {count}个")
-
- expected_types = [
- 'STUDY_TIME_1H', 'STUDY_TIME_10H', 'STUDY_TIME_50H', 'STUDY_TIME_100H',
- 'CONSECUTIVE_3D', 'CONSECUTIVE_7D', 'CONSECUTIVE_30D',
- 'GOAL_10', 'GOAL_50',
- 'ACCURACY_90', 'ACCURACY_100',
- 'EARLY_BIRD', 'NIGHT_OWL'
- ]
-
- missing_types = [t for t in expected_types if t not in type_counts]
- if missing_types:
- print(f"\n❌ 缺少的成就类型: {missing_types}")
- return False
- else:
- print(f"\n✅ 所有预期的成就类型都已创建")
- return True
- else:
- print(f"❌ 获取成就失败: {achievements_response.text}")
- return False
- else:
- print(f"❌ 注册失败: {response.text}")
- return False
-
- except Exception as e:
- print(f"❌ 测试过程中发生错误: {str(e)}")
- return False
- def main():
- """主测试函数"""
- print("开始测试成就初始化功能...")
-
- # 测试1: 新用户注册
- success1, user_data = test_new_user_registration()
-
- # 测试2: 用户登录
- success2 = test_existing_user_login(user_data)
-
- # 测试3: 成就类型和数量
- success3 = test_achievement_types()
-
- # 总结
- print("\n" + "="*50)
- print("测试结果总结:")
- print(f"新用户注册成就初始化: {'✅ 通过' if success1 else '❌ 失败'}")
- print(f"用户登录成就检查: {'✅ 通过' if success2 else '❌ 失败'}")
- print(f"成就类型和数量验证: {'✅ 通过' if success3 else '❌ 失败'}")
-
- if success1 and success2 and success3:
- print("\n🎉 所有测试通过!成就初始化功能正常工作")
- else:
- print("\n⚠️ 部分测试失败,请检查相关功能")
- if __name__ == "__main__":
- main()
|