最近测试同事要造100万用户数据,搞了好长时间,头发都揪掉了,我听到后赶紧写个自动生成测试数据来给她解决问题,大家有需要也可以改改使用。
下面的内容都是可以直接copy使用,只需要修改一下mysql连接信息,就可以了。
1. mysql建表
首先我们先用mysql建个test数据库,然后用下面的建表语句建表:
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`dept_id` bigint DEFAULT NULL COMMENT '部门ID',
`user_name` varchar(30) NOT NULL COMMENT '用户账号',
`nick_name` varchar(30) NOT NULL COMMENT '用户昵称',
`user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户)',
`email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
`phonenumber` varchar(11) DEFAULT '' COMMENT '手机号码',
`sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
`avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
`password` varchar(100) DEFAULT '' COMMENT '密码',
`status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
`login_ip` varchar(128) DEFAULT '' COMMENT '最后登录IP',
`login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb3 COMMENT='用户信息表';
2. 批量生成数据,存入user表
2.1 安装faker和pymysql依赖包
# 用来生成测试数据
pip install faker
# 用来操作数据库
pip install pymysql
2.2 批量生成数据,落表
# coding: utf-8
# 批量生成测试数据,并保存到mysql
from faker import Faker
import pymysql
def create_test_datas():
# 创建一个faker对象
fake = Faker('zh_CN')
try:
# 创建一个数据库连接
conn = pymysql.connect(host='127.0.0.1', user='root', password='Root1234', db='test', charset='utf8')
print('连接mysql成功')
# 创建一个游标
cursor = conn.cursor()
# 创建一个sql语句
sql = "INSERT INTO `user` (`dept_id`, `user_name`, `nick_name`, `user_type`, `email`, `phonenumber`, `sex`, `avatar`, `password`, `status`, `del_flag`, `login_ip`, `login_date`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (%s, %s, %s, %s, %s, %s, '1', '', '$2a$10$7JB720yubVSZvUI0rEqK/.VqGOZTH.ulu33dHOiBE8ByOhJIrdAu2', '0', '0', '127.0.0.1', '2022-01-30 12:55:06', 'admin', '2022-01-30 12:35:45', '', '2022-01-30 12:55:06', '管理员');" # 创建一个sql语句
# 循环生成数据
for i in range(1, 1000):
for j in range(1000):
# 生成数据
dept_id = fake.random_int(min=1, max=100)
name = fake.name()
nick_name = fake.name()
user_type = fake.random_int(min=1, max=2)
email = fake.email()
phonenumber = fake.phone_number()
# 执行sql语句
cursor.execute(sql, (dept_id,name,nick_name,user_type,email,phonenumber))
# 提交事务
conn.commit()
print('{}条数据插入成功'.format(i*1000))
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
print('关闭数据库连接')
except Exception as e:
print(e)
if __name__ == '__main__':
create_test_datas()
效果如下,我们可以看到生成的数据都和真实的数据很像,很时候用来做测试数据,或者性能测试的铺底数据: