init_test_data.py 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. #!/usr/bin/env python3
  2. """
  3. 初始化测试数据脚本
  4. 创建测试用户和测试素材数据
  5. """
  6. import os
  7. import sys
  8. import hashlib
  9. from pathlib import Path
  10. # 添加项目根目录到Python路径
  11. project_root = Path(__file__).parent
  12. sys.path.insert(0, str(project_root))
  13. from backend.modules.database import DatabaseMigration, DatabaseOperations
  14. from backend.utils.logger_config import setup_logger
  15. logger = setup_logger(__name__)
  16. def init_test_data():
  17. """初始化测试数据"""
  18. print("=== 初始化测试数据 ===")
  19. # 1. 初始化数据库
  20. print("\n1. 初始化数据库...")
  21. migration = DatabaseMigration()
  22. if migration.init_database():
  23. print("✓ 数据库初始化成功")
  24. else:
  25. print("✗ 数据库初始化失败")
  26. return False
  27. # 2. 创建数据库操作实例
  28. db_ops = DatabaseOperations()
  29. # 3. 创建测试用户
  30. print("\n2. 创建测试用户...")
  31. # 检查用户是否已存在
  32. existing_user = db_ops.get_user_by_username("test_user")
  33. if existing_user:
  34. print(f"✓ 测试用户已存在: {existing_user['username']} (ID: {existing_user['id']})")
  35. user_id = existing_user['id']
  36. else:
  37. # 创建新用户
  38. password_hash = hashlib.sha256("test123".encode()).hexdigest()
  39. user = db_ops.create_user(
  40. username="test_user",
  41. password_hash=password_hash,
  42. is_admin=False
  43. )
  44. print(f"✓ 创建测试用户: {user['username']} (ID: {user['id']})")
  45. user_id = user['id']
  46. # 4. 创建测试素材目录
  47. print("\n3. 创建测试素材目录...")
  48. materials_dir = Path("backend/data/materials")
  49. materials_dir.mkdir(parents=True, exist_ok=True)
  50. print(f"✓ 素材目录已创建: {materials_dir}")
  51. # 5. 创建测试图片文件
  52. print("\n4. 创建测试图片文件...")
  53. # 创建测试PNG图片数据
  54. png_data = b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00\x00\x01\x00\x00\x00\x01\x08\x02\x00\x00\x00\x90wS\xde\x00\x00\x00\x0cIDATx\x9cc```\x00\x00\x00\x04\x00\x01\xf5\x27\xdc\xf9\x00\x00\x00\x00IEND\xaeB`\x82'
  55. # 创建测试素材文件
  56. test_files = [
  57. ("test_face_1.png", "face", "测试人脸图片1"),
  58. ("test_face_2.png", "face", "测试人脸图片2"),
  59. ("test_cloth_1.png", "cloth", "测试服装图片1"),
  60. ("test_cloth_2.png", "cloth", "测试服装图片2"),
  61. ]
  62. created_materials = []
  63. for filename, image_type, description in test_files:
  64. file_path = materials_dir / filename
  65. # 创建文件
  66. with open(file_path, "wb") as f:
  67. f.write(png_data)
  68. # 创建数据库记录
  69. image_record = db_ops.create_image_record(
  70. user_id=user_id,
  71. image_type=image_type,
  72. original_filename=filename,
  73. stored_path=str(file_path),
  74. file_size=len(png_data),
  75. image_hash=None
  76. )
  77. if image_record:
  78. created_materials.append({
  79. "id": image_record['id'],
  80. "filename": filename,
  81. "type": image_type,
  82. "description": description
  83. })
  84. print(f"✓ 创建素材: {filename} (ID: {image_record['id']})")
  85. else:
  86. print(f"✗ 创建素材失败: {filename}")
  87. # 6. 验证数据
  88. print("\n5. 验证测试数据...")
  89. # 检查用户素材
  90. user_images = db_ops.get_user_images(user_id)
  91. print(f"✓ 用户素材总数: {user_images['total']}")
  92. # 检查人脸素材
  93. face_images = db_ops.get_user_images(user_id, image_type="face")
  94. print(f"✓ 人脸素材数量: {face_images['total']}")
  95. # 检查服装素材
  96. cloth_images = db_ops.get_user_images(user_id, image_type="cloth")
  97. print(f"✓ 服装素材数量: {cloth_images['total']}")
  98. # 7. 输出测试信息
  99. print("\n=== 测试信息 ===")
  100. print(f"测试用户ID: {user_id}")
  101. print(f"测试用户名: test_user")
  102. print(f"测试密码: test123")
  103. print(f"素材目录: {materials_dir}")
  104. print(f"创建素材数量: {len(created_materials)}")
  105. print("\n=== 素材列表 ===")
  106. for material in created_materials:
  107. print(f"- {material['filename']} ({material['type']}): {material['description']}")
  108. print("\n=== API测试URL ===")
  109. print(f"获取素材列表: GET http://localhost:8000/api/v1/users/{user_id}/materials")
  110. print(f"获取人脸素材: GET http://localhost:8000/api/v1/users/{user_id}/materials?material_type=face")
  111. print(f"获取服装素材: GET http://localhost:8000/api/v1/users/{user_id}/materials?material_type=cloth")
  112. print("\n✓ 测试数据初始化完成!")
  113. return True
  114. if __name__ == "__main__":
  115. try:
  116. init_test_data()
  117. except Exception as e:
  118. print(f"✗ 初始化失败: {e}")
  119. import traceback
  120. traceback.print_exc()