dbfaker
Python
Python, Shell
共38个文件
py: 22
md: 5
yml: 2
gitignore: 1
LICENSE: 1
bin/dbfaker: 1
bin/table2yml: 1
db: 1
sql: 1
txt: 1
基于数据库层面批量生成有逻辑关联的数据
dbfaker
介绍
基于数据库层面批量生成有逻辑关联的数据
软件架构
对于要造大量数据来讲,有几种方式,一是通过开发写的接口来模拟真实用户场景来产生数据,这种方式在某些方面来讲是比较合适的,比如因为是模拟用户场景,业务数据完整,不会丢.但不好的地方就是要处理的地方太多,接口定义,签名,加密等等,还有扩展性也很不好,一个业务场景要写一套代码.另一种方式,是已知业务产生的数据之间的依赖关系后,直接在数据库中插入相关数据,本项目就是通过这种方式来实现,好处就是生成规则通过配置文件来描述即可(yaml文件),不需要额外添加代码(对于某些字段生成规则有可能需要单独编写方法),与测试库testrunner比较类似.现在已知有些库也支持直接在数据库内造数据,但对库表之间的关联关系的处理都做得不太好.
另外对于测试人员进行自动化接口测试时,前置数据是个问题,是通过业务接口一条条跑完作为前置数据产生条件还是直接在数据库里面插入需要的数据呢?前面一种方式在业务场景复杂的时候用例的维护可能会变得极其麻烦。比如:
你要测试一个用户加入商品到购物车的一个接口;前置数据有哪些?
用户账号
商品
通过接口来造数据的流程如下:
通过用户端注册接口来创建账号
通过管理端接口登录,拿到token(预设管理端账号是已经存在了,如果不存在你还得注册管理端账号)
登陆后通过管理端接口创建商品信息
这三个步骤看起来简单,但实际上针对某些业务场景还有接口加密、签名、而且几乎每一条测试用例都需要用到N个前置条件,这些通过接口来调用的前置条件只要有一个失败就会影响你真正要测试的接口。做过接口测试的同学应该深有体会;
实际上实现上述接口测试,真正要测的只是商品是否能正常加入到购物车;真正依赖的就只有两个数据,用户账号和商品信息。我们只需要在用户表和商品表里面各插入一条数据就可以了。通过本工具,只需要描述两个表的每个字段的生成规则就可以直接在数据库中插入两条“十分真实”的数据。用这种方式来解决测试用例前置条件的问题不说是最好的方式,但肯定是比上面的前置用例的方式好很多。
本项目数据处理流程如下:
安装
git clone https://gitee.com/guojongg/dbfaker.git
cd dbfaker
# 可先创建虚拟环境后再安装
python3 setup.py install
# 使用pip直接安装
pip3 install dbfaker
# 卸载
pip uninstall dbfaker
使用说明
1. 生成meta.yml文件,可通过内置工具table2yml.py来一键生成模板,生成后需完善模板中表字段的定义
table2yml.py文件使用说明:
usage: table2yml [-h] [--connect [CONNECT]] [--table_names [TABLE_NAMES]]
[--sql_file [SQL_FILE]] [--output [OUTPUT]]
[--hide_command]
[type]
数据库表转数据生成yaml文件格式工具
positional arguments:
type 数据来源,table_name: 通过输入表名与数据库链接方式,在数据库中获取数据库建表语句;
table_statement: 指定数据库建表语句的sql文件路径
optional arguments:
-h, --help show this help message and exit
--connect [CONNECT] 数据库连接语法,例如:mysql+mysqldb://user:password@host/dbname
--table_names [TABLE_NAMES]
数据库表,多个表以“,”分割
--sql_file [SQL_FILE]
数据库建表语句的sql文件路径
--output [OUTPUT] 输出文件名,默认为数据库表名+meta.yml
--hide_comment 不转换comment字段(可减少yml文件行数)
使用举例
1、在可以连接数据库的情况下直接指定数据库连接和要转换的表名来输出yaml文件
table2yml table_name --table_names stu,course,choice_course --connect mysql+mysqldb://[dbuser]:[dbpassword]@[dbhost]/[dbname] --output test.yml
2、在不能直接连接数据库,但有建表语句sql文件时可以通过下面的方法来输出yaml文件
table2yml table_statement --sql_file test.sql --output test.yml
2, 编辑meta.yml文件,文件格式如下
package:
- datetime # 导入额外的包,在jinja2模板中使用(下面有用到datetime包,所以要先导入)
env:
id:
engine: faker.uuid
time_format:
engine: faker.eq("%Y-%m-%d %H:%M:%S")
tables:
- table: stu
comment: '学生表'
columns:
id:
comment: 数据主键id
engine: eq('{{ env.id }}') # 通过引用环境变量中的值
name:
comment: 姓名
engine: name
idcard:
comment: 身份证号
engine: ssn
age:
comment: 年龄
engine: eq('{{ datetime.datetime.now().year - int(stu.idcard[6:10]) }}') # 通过jinja2模板直接计算
sex:
comment: 性别
engine: faker.eq('{{ "man" if int(stu.idcard[-2]) % 2==1 else "female" }}') # 通过jinja2模板直接计算
- table: course
comment: '课程表'
columns:
id:
comment: 数据主键id
engine: faker.uuid
stu_id:
comment: 数据主键id
engine: faker.eq('{{ stu.id }}') # 引用其他表中的值
course_name:
comment: 课程名称
engine: faker.choice(['数学','语文','英语','化学','地理']) # 通过内置方法从列表中随机取一个值
course_time:
comment: 上课时间
engine: faker.now(format="{{ env.time_format }}") # 通过内置方法获取当前时间,并按照指定格式返回
extraction:
stu_name:
value: '{{ stu.name }}'
course_name:
value: '{{ course.course_name }}'
3,创建sql
PC:~/01 Work/07 MyProject/dbfaker$ source venv/bin/activate
(venv) PC:~/01 Work/07 MyProject/dbfaker$ dbfaker -h
usage: dbfaker [-h] [-n [NUMBER]] [-i] [-c [CONNECT]] [-o [OUTPUT]] [-p]
[--project_name PROJECT_NAME]
[meta_file]
通过yml格式的描述文件来生成数据
positional arguments:
meta_file yml文件所在路径
optional arguments:
-h, --help show this help message and exit
-n [NUMBER], --number [NUMBER]
生成数据数量
-i, --insert 是否插入到数据库
-c [CONNECT], --connect [CONNECT]
数据库连接语法,例如:mysql+mysqldb://pdmsadmin:system001@cpcs.ho
melabs.in/pdms_hospital
-o [OUTPUT], --output [OUTPUT]
指定文件名,输出内容到文件
-p, --_print 是否打印到控制台
--project_name PROJECT_NAME
初始化项目时的项目名称
# 打印输出
dbfaker data/test.yml --number 10 -p
# 保存到文件
dbfaker data/test.yml --number 10 -o out.sql
# 插入到数据库
dbfaker data/test.yml --number 10 -i --connect mysql+mysqldb://pdmsadmin:system001@cpcs.homelabs.in/pdms_hospital
通过上述模板文件生成出sql:
(venv) guolong@guolong-PC:~/01Work/07MyProject/dbfaker$ dbfaker data/test.yml -p -n 10
100%|██████████████████████████████████████████████████████████████████████████
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
项目名称:DbFaker - 基于Python的数据生成器 项目简介: DbFaker是一个基于Python开发的数据生成工具,旨在数据库层面批量生成具有逻辑关联的仿真数据。该项目由纯Python代码编写,结合Shell脚本,提供了高效、便捷的数据生成解决方案。 技术构成: - 主要编程语言:Python - 文件构成:共38个文件,包括: - Python脚本:22个 - Markdown文档:5个 - YAML配置文件:2个 - Git忽略配置:1个 - 许可证文件:1个 - 数据库操作脚本:1个 - SQL语句文件:1个 - 文本文件:1个 - 可执行脚本: - dbfaker:用于生成数据的主脚本 - table2yml:辅助脚本,用于将数据库表转换为YAML配置 项目特性: DbFaker能够根据用户定义的配置,自动化生成符合真实业务逻辑的数据,支持自定义数据模板和数据生成规则,极大提高了数据填充、测试和模拟场景的效率。 使用说明: 通过配置YAML文件和数据库SQL语句,DbFaker可以快速理解并模拟数据表之间的关系,生成高质量的数据集,为开发者提供快速的数据模拟环境。 注意: 本项目采用MIT许可证,允许用户自由使用、修改和分发。
资源推荐
资源详情
资源评论
收起资源包目录
upload.zip (45个子文件)
setup.py 2KB
data
test.yml 4KB
test.db 560KB
test-hide-comment.yml 3KB
test.sql 2KB
LICENSE 9KB
docs
dbfaker版本切换说明.md 593B
使用comment字段来描述生成规则.md 3KB
使用举例.md 12KB
dbfaker内置方法.md 5KB
dbfaker更新说明.md 2KB
自定义方法使用说明.md 5KB
bin
dbfaker 109B
table2yml 116B
dbfaker
__init__.py 136B
table2yml.py 8KB
nsqlparse
__init__.py 0B
mysql_create_table_lex.py 2KB
mysql_create_table_yacc.py 9KB
utils
generator.py 707B
__init__.py 0B
constant.py 211B
init_project.py 3KB
faker_tool.py 7KB
gendata.py 8KB
faker_date_time.py 3KB
__main__.py 86B
common
__init__.py 0B
db_helper.py 2KB
database.py 5KB
setting.py 869B
logger.py 3KB
tools.py 557B
drivers.py 466B
requirements.txt 130B
cli.py 3KB
test
test_gendata.py 831B
test_mfaker.py 2KB
test_table2yml.py 664B
.gitignore 75B
.drone.yml 995B
upload2pypi.sh 55B
readme.txt 12KB
.workflow
pipeline-20220531.yml 1KB
pipeline-20220606.yml 592B
共 45 条
- 1
资源评论
沐知全栈开发
- 粉丝: 4743
- 资源: 3374
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于python编写的Keras深度学习框架开发,利用卷积神经网络CNN,快速识别图片并进行分类
- 最全空间计量实证方法(空间杜宾模型和检验以及结果解释文档).txt
- 5uonly.apk
- 蓝桥杯Python组的历年真题
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 2023-04-06-项目笔记 - 第一百十九阶段 - 4.4.2.117全局变量的作用域-117 -2024.04.30
- 前端开发技术实验报告:内含4四实验&实验报告
- Highlight Plus v20.0.1
- 林周瑜-论文.docx
- 基于MIC+NE555光敏电阻的声光控电路Multisim仿真原理图
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功