import random import string from datetime import datetime, timedelta from typing import Dict, Any class DataGenerator: """数据生成器类""" @staticmethod def random_username(length: int = 8) -> str: """生成随机用户名""" return "".join(random.choices(string.ascii_lowercase + string.digits, k=length)) @staticmethod def random_password(length: int = 12) -> str: """生成随机密码""" chars = string.ascii_letters + string.digits + "!@#$%^&*" return "".join(random.choices(chars, k=length)) @staticmethod def random_email() -> str: """生成随机邮箱""" username = "".join(random.choices(string.ascii_lowercase + string.digits, k=8)) domains = ["gmail.com", "qq.com", "163.com", "outlook.com"] domain = random.choice(domains) return f"{username}@{domain}" @staticmethod def random_phone() -> str: """生成随机手机号""" prefix = random.choice(["138", "139", "150", "151", "186", "188"]) suffix = "".join(random.choices(string.digits, k=8)) return f"{prefix}{suffix}" @staticmethod def random_date(start_date: datetime = None, end_date: datetime = None) -> datetime: """生成随机日期""" if start_date is None: start_date = datetime.now() - timedelta(days=365) if end_date is None: end_date = datetime.now() time_between = end_date - start_date days_between = time_between.days random_days = random.randrange(days_between) return start_date + timedelta(days=random_days) @staticmethod def generate_user_data(overrides: Dict[str, Any] = None) -> Dict[str, Any]: """生成用户数据 Args: overrides: 覆盖的字段 Returns: 用户数据字典 """ data = { "username": DataGenerator.random_username(), "password": DataGenerator.random_password(), "email": DataGenerator.random_email(), "phone": DataGenerator.random_phone(), "status": "active", } if overrides: data.update(overrides) return data @staticmethod def generate_role_data(overrides: Dict[str, Any] = None) -> Dict[str, Any]: """生成角色数据 Args: overrides: 覆盖的字段 Returns: 角色数据字典 """ data = { "role_name": f"test_role_{random.randint(1000, 9999)}", "role_code": f"test_role_{random.randint(1000, 9999)}", "description": "测试角色", "status": 1, } if overrides: data.update(overrides) return data @staticmethod def generate_menu_data(overrides: Dict[str, Any] = None) -> Dict[str, Any]: """生成菜单数据 Args: overrides: 覆盖的字段 Returns: 菜单数据字典 """ data = { "menu_name": f"test_menu_{random.randint(1000, 9999)}", "menu_type": 1, "path": f"/test/{random.randint(1000, 9999)}", "icon": "test-icon", "status": 0, } if overrides: data.update(overrides) return data