使用sqlalchemy生成模糊测试的数据库记录

dustbunn的Python项目详细描述


#dustbunny

***作者:**jefferson heard
***版本:**0.0.1

\introduction


dustbunny为sql数据库创建模糊记录。它基于[假设](http://hypothesis.works/)并使用它为数据列生成随机值。直接使用dustbunny与假设的区别在于,生成相对于已经生成的值的值更容易,构造表之间关系(如外键)的生成也更容易。

dustbunny也会记录它生成的记录,因此当您完成对它们的处理后,可以将它们从数据库中删除。

使用要生成的sqla会话和orm模型创建一个generate实例。
2。更改创建函数(如果不更改,将使用默认的模型创建)
3。设置要生成的记录总数
4。使用"for_some"或"for all"设置父记录
4。设置固定值和随机值
5。设置相对值函数
6。调用`.execute()`函数
7。提交到数据库。一般来说,您的创建函数应该只是为了速度而创建,而不是提交。



分钟,跨越预定的与会者样本(在别处定义为
),跨越预定的日期样本。它使用模型的controller class
属性创建50条记录。它练习了基于前两种策略生成固定值、随机值、
和相对值的功能:

``python
来自app.extensions import db
import importlib
来自假设导入策略,如st,settings,给定
来自dustbunny.hyp.strATegies import*
从dustbunny import生成
从dustbunny.hyp.strategies导入gfywords、gfycodes、words


在配置后导入(db.model,此处)

……
ommit=false,**kwargs)

做一些事情,,,

获取一些我们将要在固定值中使用的初始记录
org=org.query.first()
appointment\u type=appointmenttype.query.first()

gen=generate(db,appointment)\
。按方法(使用控制器)调用,而不是create
。num(50)\#生成50条记录
。对于固定值(对以下记录属性使用固定值
日历同步Google=false,
私有=false,
全天=false,
启用通知=false,
组织=org,
约会类型=约会类型.pk,
)。使用(使用假设策略生成以下属性
约会注册类型=st.sampled(在appointment registration type.query.all()中,[x.pk代表x),
标题=gfywords(),尘兔策略用于生成唯一的adj名词三元组
location=gfywords(),
appt_date=st.sampled_from(date_range),
notes=words(),
生成随机单词
工资分钟=st.sampled_from((15,30,45,60,90)),
工资代码=st.sampled from([x.pk代表wagecode.query.all()),
members=st.lists(st.sampled_from(workers),average_size=5,min_size=1,max_size=25)
)中的x。使用相对值_代表(
开始时间=lambda**k:k['appt_date']小时,
结束时间=lambda**k:(k['appt_date']+timedelta(minutes=k['wage_minutes'])。小时,
开始时间=lambda**k:k['appt_date']。分钟,
结束时间=lambda**k:(k['appt_date']+时间增量(分钟=k['wage_minutes'])。分钟,
工资开始时间=lambda**k:k['appt_date'].小时,
工资结束时间=lambda**k:(k['appt_date']+时间增量(分钟=k['wage_minutes']).小时,
工资开始时间=lambda**k:k['appt_date'].分钟,
工资结束时间=lambda**k:(k['appt_date']+时间增量(分钟=k['wage_m分钟,
必须=lambda**k:k['wage_minutes']>;0,
开始日期=lambda**k:k['appt_u date'],
结束日期=lambda**k:k['appt_u date']+timedelta(分钟=k['wage_minutes'],


员工约会。延长(gen.execute())\创建记录

db.session.commit();我们不会在生成过程中提交,因为它需要永远。
````

orm实例
log=…数据库模型。
使用"控制器"="……一个函数。
gen=generate(db,log)\
.by_method(use_controller)\
.num(n=1)\
.for_every(
('config',config.query.all())的每个排列,
('log_start_date,date_range)52周
)。对于固定值,将记录的这些属性设置为固定值
log_stage_seq=0,
log_review_date=none
)。对于相对值,将记录的这些属性设置为基于
log_end_date=lambda*之前的所有值。kwargs:kwargs['log_start_date']+timedelta(days=7)将结束日期设置在给定配置后1周



logs=gen.execute()执行插入
```

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException