今天跟大家唠唠我最近在搞的“布鲁诺”项目,这名字听着挺唬人,就是个内部测试工具,灵感来源于历史人物布鲁诺,想着他为了真理烧死自己,咱也得有点这股劲头,把这测试工具做
我就寻思着要解决一个老问题:每次上线新功能,测试环境的数据都得手动准备,烦都烦死了。手动搞数据,费时费力不说,还容易出错,测试效率根本提不起来。我就想着能不能搞个自动化工具,一键生成各种测试数据。
说干就干,我先调研了一圈,发现市面上现成的工具要么太重,要么不符合我们的需求。干脆自己撸一个!
我得确定用什么语言。考虑到我们团队对Python比较熟,而且Python在数据处理方面确实方便,就决定用Python了。
然后,开始搭框架。我先用Flask搭了个简单的Web服务,这样方便以后扩展成Web界面。就开始写核心的数据生成模块。这部分是重头戏,得根据不同的业务场景,生成各种各样的数据。
我记得最开始搞用户数据的时候,就遇到了麻烦。用户名、密码、邮箱、手机号,这些都得随机生成,还得保证唯一性。我就用了`faker`这个库,专门生成各种假数据,挺好用的。
python
from faker import Faker
fake = Faker('zh_CN')
def generate_user():
username = *_name()
password = *()
email = *()
phone = *_number()
return {
'username': username,
'password': password,
'email': email,
'phone': phone
有了这些基本的数据生成函数,就可以开始组合了。比如,要生成一批用户数据,就可以这样:
python
def generate_users(num):
users = []
for i in range(num):
*(generate_user())
return users
但是,光生成数据还不行,还得把数据导入到数据库里。我用的是SQLAlchemy,连接数据库,然后把数据一条条插入进去。
python
from sqlalchemy import create_engine, Column, Integer, String
from * import sessionmaker
from * import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(String(50), unique=True)
password = Column(String(50))
email = Column(String(100))
phone = Column(String(20))
engine = create_engine('mysql+pymysql://user:password@host/database')
*_all(engine)
Session = sessionmaker(bind=engine)
def insert_users(users):
session = Session()
for user in users:
new_user = User(username=user['username'], password=user['password'], email=user['email'], phone=user['phone'])
*(new_user)
数据生成和导入搞定后,我就开始写API接口。用Flask写几个简单的路由,接收参数,调用数据生成函数,然后把数据导入到数据库里。
python
from flask import Flask, request, jsonify
app = Flask(__name__)
@*('/generate_users', methods=['POST'])
def generate_users_api():
num = *('num', 10)
users = generate_users(num)
insert_users(users)
return jsonify({'message': f'Successfully generated {num} users'}), 200
有了API,就可以通过HTTP请求来生成数据了。我用Postman测试了一下,效果还不错。
但是,这只是个开始。后面我还得继续完善这个工具,比如,增加更多的数据类型,优化数据生成算法,增加Web界面,方便操作。
“布鲁诺”项目还在持续迭代中,希望以后能成为我们团队的得力助手,提高测试效率。 也希望大家能从我的实践中有所启发,一起进步!

还没有评论,来说两句吧...