本文目录导读:

我来为您生成一个通用的随机测试数据生成脚本,这个脚本支持多种数据类型和自定义配置。
import random
import string
import json
import csv
from datetime import datetime, timedelta
from typing import List, Dict, Any, Optional
class TestDataGenerator:
"""测试数据生成器"""
def __init__(self, seed: Optional[int] = None):
"""
初始化生成器
:param seed: 随机种子,用于可重复生成
"""
if seed is not None:
random.seed(seed)
self.seed = seed
def generate_random_string(self,
min_length: int = 5,
max_length: int = 20,
include_digits: bool = False,
include_special: bool = False) -> str:
"""生成随机字符串"""
characters = string.ascii_letters
if include_digits:
characters += string.digits
if include_special:
characters += string.punctuation
length = random.randint(min_length, max_length)
return ''.join(random.choice(characters) for _ in range(length))
def generate_random_email(self) -> str:
"""生成随机邮箱"""
username = self.generate_random_string(5, 15)
domains = ['gmail.com', 'yahoo.com', 'outlook.com', 'qq.com', '163.com']
domain = random.choice(domains)
return f"{username}@{domain}"
def generate_random_phone(self) -> str:
"""生成随机手机号(中国)"""
prefixes = ['130', '131', '132', '133', '134', '135', '136', '137', '138', '139',
'150', '151', '152', '153', '155', '156', '157', '158', '159',
'180', '181', '182', '183', '184', '185', '186', '187', '188', '189',
'199', '198', '197', '196']
prefix = random.choice(prefixes)
suffix = ''.join(random.choice(string.digits) for _ in range(8))
return prefix + suffix
def generate_random_date(self,
start_date: str = "2020-01-01",
end_date: str = "2024-12-31") -> str:
"""生成随机日期"""
start = datetime.strptime(start_date, "%Y-%m-%d")
end = datetime.strptime(end_date, "%Y-%m-%d")
delta = end - start
random_days = random.randint(0, delta.days)
random_date = start + timedelta(days=random_days)
return random_date.strftime("%Y-%m-%d")
def generate_random_address(self) -> Dict[str, str]:
"""生成随机地址"""
provinces = ['北京市', '上海市', '广东省', '浙江省', '江苏省']
cities = {
'北京市': ['东城区', '西城区', '朝阳区', '海淀区'],
'上海市': ['浦东新区', '黄浦区', '徐汇区', '静安区'],
'广东省': ['广州市', '深圳市', '佛山市', '东莞市'],
'浙江省': ['杭州市', '宁波市', '温州市', '嘉兴市'],
'江苏省': ['南京市', '苏州市', '无锡市', '常州市']
}
province = random.choice(provinces)
city = random.choice(cities[province])
streets = ['中山路', '人民路', '解放路', '建设路', '和平路']
street = random.choice(streets)
building = f"{random.randint(1, 100)}号"
apt = f"{random.randint(1, 30)}栋{random.randint(1, 6)}单元{random.randint(101, 3001)}室"
return {
"province": province,
"city": city,
"street": street + building,
"detail": apt,
"full_address": f"{province}{city}{street}{building}{apt}"
}
def generate_user(self) -> Dict[str, Any]:
"""生成随机用户"""
first_names_chinese = ['王', '李', '张', '刘', '陈', '杨', '黄', '赵', '周', '吴']
last_names_chinese = ['伟', '芳', '娜', '敏', '静', '丽', '强', '磊', '洋', '勇']
return {
"id": random.randint(10000, 99999),
"name": random.choice(first_names_chinese) + random.choice(last_names_chinese),
"age": random.randint(18, 65),
"email": self.generate_random_email(),
"phone": self.generate_random_phone(),
"gender": random.choice(['男', '女']),
"birthday": self.generate_random_date("1960-01-01", "2005-12-31"),
"address": self.generate_random_address(),
"salary": random.randint(5000, 50000),
"department": random.choice(['技术部', '市场部', '财务部', '人事部', '运营部']),
"is_active": random.choice([True, False]),
"created_at": self.generate_random_date("2023-01-01", "2024-06-30")
}
def generate_order(self) -> Dict[str, Any]:
"""生成随机订单"""
products = [
{'name': '笔记本电脑', 'price': 5999},
{'name': '智能手机', 'price': 3999},
{'name': '平板电脑', 'price': 2999},
{'name': '耳机', 'price': 199},
{'name': '键盘', 'price': 89},
{'name': '鼠标', 'price': 59},
{'name': '显示器', 'price': 1999},
{'name': '路由器', 'price': 299}
]
product = random.choice(products)
quantity = random.randint(1, 5)
status = random.choice(['pending', 'paid', 'shipped', 'delivered', 'cancelled'])
return {
"order_id": f"ORD{datetime.now().strftime('%Y%m%d')}{random.randint(1000, 9999)}",
"user_id": random.randint(10000, 99999),
"product": product['name'],
"unit_price": product['price'],
"quantity": quantity,
"total_amount": product['price'] * quantity,
"status": status,
"order_date": self.generate_random_date("2024-01-01", "2024-06-30"),
"payment_method": random.choice(['支付宝', '微信支付', '银行卡', '信用卡']),
"shipping_address": self.generate_random_address()['full_address']
}
def generate_users_batch(self, count: int = 10) -> List[Dict[str, Any]]:
"""批量生成用户数据"""
return [self.generate_user() for _ in range(count)]
def generate_orders_batch(self, count: int = 10) -> List[Dict[str, Any]]:
"""批量生成订单数据"""
return [self.generate_order() for _ in range(count)]
def save_to_json(self, data: List[Dict[str, Any]], filename: str):
"""保存为JSON文件"""
with open(filename, 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=2)
print(f"数据已保存到 {filename}")
def save_to_csv(self, data: List[Dict[str, Any]], filename: str):
"""保存为CSV文件"""
if not data:
return
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)
print(f"数据已保存到 {filename}")
def save_to_sql(self, data: List[Dict[str, Any]], table_name: str, filename: str):
"""保存为SQL insert语句"""
with open(filename, 'w', encoding='utf-8') as f:
f.write(f"-- 插入 {len(data)} 条数据到 {table_name} 表\n")
for record in data:
columns = ', '.join(record.keys())
values = ', '.join([f"'{str(v)}'" if isinstance(v, str) else str(v) for v in record.values()])
sql = f"INSERT INTO {table_name} ({columns}) VALUES ({values});\n"
f.write(sql)
print(f"SQL语句已保存到 {filename}")
# 使用示例
def main():
# 创建生成器实例,设置种子以确保可重复性
generator = TestDataGenerator(seed=42)
# 生成用户数据
print("生成用户数据...")
users = generator.generate_users_batch(5)
for user in users:
print(f" 用户: {user['name']}, 邮箱: {user['email']}, 手机: {user['phone']}")
print("\n生成订单数据...")
orders = generator.generate_orders_batch(5)
for order in orders:
print(f" 订单: {order['order_id']}, 商品: {order['product']}, 金额: {order['total_amount']}元")
# 保存到不同格式
generator.save_to_json(users, "test_users.json")
generator.save_to_csv(users, "test_users.csv")
generator.save_to_sql(users, "users", "test_users.sql")
# 也可以生成单个自定义数据
print("\n自定义数据生成示例:")
print(f"随机字符串: {generator.generate_random_string(10, 30)}")
print(f"随机邮箱: {generator.generate_random_email()}")
print(f"随机日期: {generator.generate_random_date()}")
print(f"随机地址: {generator.generate_random_address()['full_address']}")
if __name__ == "__main__":
main()
这个脚本提供了以下功能:
主要特性
多种数据类型生成
- 随机字符串、邮箱、手机号
- 中国地址(省市区街道)
- 日期、人员信息
- 订单数据
批量生成
generate_users_batch()- 批量生成用户generate_orders_batch()- 批量生成订单
多种输出格式
- JSON
- CSV
- SQL INSERT语句
可配置性
- 可设置随机种子确保可重复
- 支持自定义数据范围
使用说明
# 基本使用
generator = TestDataGenerator(seed=42)
# 生成自定义数据
custom_data = {
"name": generator.generate_random_string(5, 10),
"email": generator.generate_random_email(),
"phone": generator.generate_random_phone(),
"date": generator.generate_random_date()
}
# 批量生成并保存
users = generator.generate_users_batch(100)
generator.save_to_json(users, "users.json")
扩展建议
- 添加更多数据类型:身份证号、银行卡号等
- 支持数据关联:如用户ID关联订单
- 配置化生成:通过YAML/JSON配置数据结构
- 性能优化:大批量生成时使用多线程
需要特定类型的数据或功能吗?我可以帮您定制。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播