帮助生成内容以填充测试数据库的小程序包。
python-testdata的Python项目详细描述
python testdata是一个简单的包,用于生成测试数据。
它还提供了许多提供扩展功能的专门工厂。
ce知道它将生成多少个元素,这使我们能够生成统计结果。
ndentfield工厂允许我们创建依赖于其他工厂结果的工厂。(请参阅示例以获取更多信息)。
,但它将始终清除与数据库相关的依赖项。
\installation
更多的
让我们创建一个生成用户的非常简单的工厂:
`` python
导入testdata
类用户(testdata.dictfactory):
id=testdata.countingfactory(10)
firstname=testdata.fakedatafactory('firstname')
lastname=testdata.fakedatafafactoctry('lastname')
address=testdata.fakedatafactory('address')
age=testdata.randomInteger(10,30)
gender=testdata.randomSelection(['female','male'])
for user in users().generate(10):假设我们只需要10个用户
print user
"我","姓氏":"Schaden","性别":"女性","年龄":18,"地址":"0641 Homenick Hills\nsouth Branson,Ri 70388","ID":10}
{"姓氏":"Gene","姓氏":"Greenfelder","性别":"男性","年龄":17,"地址":"292 Loy Lights Suite 328\nFritzfort,in 73914","ID":11}
或者,您可能希望将它们插入您最喜欢的数据库(MongoDB、ElasticSearch等)
```
在为DictFactory创建自己的子类时,我们可以使某些字段依赖于其他字段。
例如:
``python
Class ExampleFactory(DictFactory):
=countingfactory(10)
b=clonedfield("a")b的值与examplefactory()中e的字段"a"
。generate(100):
print e
{a':10,'b':10}
{a':11,'b':11}
希望事件有
一个开始时间,和一个20分钟的结束时间。
此外,我们希望事件的开始时间相隔12分钟。
`` python
导入测试数据
事件类型=["用户断开连接","用户连接","用户登录","用户注销"]
类事件工厂(testdata.dictfactory):
开始时间=testdata.dateintervalfactory(datetime.datetime.now(),datetime.timedelta(minutes=12))
结束时间=testdata.relativeTodateTimefield("开始时间",datetime.timedelta(minutes=20))
事件代码=testdata.randomselection(event_类型)
eventfactory()中的事件。生成(100):
打印事件
{开始时间:datetime.datetime(2013,12,23,13,37,1,591878),'结束时间:datetime.datetime(2013,12,23,13,57,1,591878),'事件代码':'用户连接'}
{开始时间:datetime.datetime(2013,12,23,13,49,1,591878),"结束时间":datetime.datetime(2013,12,23,14,9,1,591878),"事件代码":"用户登录"}
{"开始时间":datetime.datetime(2013,12,23,14,1,1,591878),"结束时间":datetime.datetime(2013,12,23,14,21,1,591878),"事件代码":"用户断开连接"}
```
还有其他的错误。此外,我们希望如果"state"字段是
"error",则分配的用户是"support",否则应该是"admin"。
``python
类作业(testdata.dictfactory):
state=testdata.statisticalvaluesfactory([("pending",90),("error",10))
分配的用户=testdata.conditionalValueField('state',{'error':'support'},'admin')
description=testData.randomLengthStringFactory()
for i in job().generate(10):
print i
{'state':'error',assigned搌user':'support','description':'julyfbypxpdflpbfppagatppuajfshxkkyewzrq'}
#{'state':'pending','assigned戥user':'admin','description':'tozkgmbnxqhsyejvduyxgdlrtquetzqrxmhnxbajbffdnxulkwytdxczgiztlheikeswviydzanuoltxmwhjvazaoyu'}
{'state':'pending','assigned戥user':'admin','description':'tidvuvuzrubllttg'}
{'state':'pending','assigned'_用户':'管理','描述':'rgcsafzmmrhwcazjlofikmxjhtqvotswhnqtxjgrxgztkh'}
{状态':'挂起','分配的用户':'管理','描述':'tlksekcbydvlcdwubgmimmidedoxedbaddknqgwlnxubqzoxfxnbxkigtymugnbunmxyawzlgsiummciwxnsw'}
{状态':'挂起','分配的用户':'管理员n','说明':'tuyylofuzpceawykkirvksqfghgoiwacupivrxmiuftjpsobsqcbcrqnokohqaukfmwry'}
{状态':'pending','分配的用户':'admin','说明':'jbfruxrermobwhetcqgcxebimfotfjrisfkbpyemqufqqqkmvlgslvozrrnetenlcgbfbtmqoz'}
{状态':'pending','分配的用户':'admin','description':'lqatawdckumpiydvmryqgeizolcoozijjdcfxsvoznttqjpbfzqgskpbljrtiylotizoyyrncevuncqfomexecpd'}
{'state':'pending','assigned''u user':'admin','description':'vyxhnhydwtwtiuipsoezvqhuxybiugdyaefzipigwchmmophixexbixxtdwkkuvwimmourmoooocwevqhgapxkolhjaq'}
#{'state':'挂起','分配的用户':'管理','描述':'rcawgtkggchdhppsyqxnbddnxqkgqwnqmslorqnaqldaqwnktgpxazuvdxqbimzvqsyabifuipqvdzwtddrplebrc'}
```
对于特定的实例,
让我们从一开始就以我们的"用户"为例。
`` python
导入testdat a
类用户(testdata.dictfactory):
id=testdata.countingfactory(10)
firstname=testdata.fakedatafactory('firstname')
lastname=testdata.fakedatafactory('lastname')
address=testdata.fakedatafactory('address')
age=testdata.randomInteger(10,30)
gender=testdata.randomSelection(['female','male'])
`````
但是让它重写,这样'firstname'总是返回john,并使age成为随机整数。在40到60之间输入er,然后添加一个"email"字段。
``python
对于用户中的用户(firstname=testdata.constant('john'),age=testdata.randominger(40,60),email=testdata.fakedatafactory('email')。generate(10):假设我们只需要10个用户
print user
{firstname':'john','性别':'male','age':54,'email':'hazle.wehner@brekke.com,'lastname':'willms,'address':'245 pfeffer light apt.309\neast audisede,in 11931,'id':10}
{firstname':'john,'gender':'male','age':47,'email':'mariam25@gmail.com,'lastname':'ratke,'address':'98710 freddygateway\ndelilahborough,gu 50849,'id':11}
{'firstname':'john,'gender':'male,'age':55,'email':'tyler22@yahoo.com,'lastname':'cormier,'address':'432 block locks apt.547\nnew estel,nj 54026,'id':12}
数据库(MongoDB,ElasticSearch,…)
````
r/>有关更多示例和doctest,请参见factorie的docstrings。
允许子分类创建使用特定架构生成dict的工厂(请参见[示例][示例])。|
list factory在每次迭代中返回从对给定工厂的调用返回的"elements"列表项的工厂。|
callable获取一个可调用对象作为参数,并返回在每次迭代中调用该对象的结果
dependentCallable获取一个可调用对象作为参数,并返回在每次迭代中将定义的字段作为参数传递给该对象的结果
|复制另一个工厂价值的工厂。|
odateTimeField生成相对于另一个DateTime字段的DateTime对象,就像您有一个"start_time"这是一个随机日期工厂字段,并且想要一个总是15分钟后的"end_time"字段一样。
TODOS
*为每个工厂添加使用文档(可能使用doctest?)
*添加更多测试
*添加地理位置工厂以生成与位置和距离相关的数据(例如,中心点附近的随机点)。
*添加更多统计工厂
*欢迎更多想法!
ce知道它将生成多少个元素,这使我们能够生成统计结果。
ndentfield工厂允许我们创建依赖于其他工厂结果的工厂。(请参阅示例以获取更多信息)。
\installation
更多的
让我们创建一个生成用户的非常简单的工厂:
`` python
导入testdata
类用户(testdata.dictfactory):
id=testdata.countingfactory(10)
firstname=testdata.fakedatafactory('firstname')
lastname=testdata.fakedatafafactoctry('lastname')
address=testdata.fakedatafactory('address')
age=testdata.randomInteger(10,30)
gender=testdata.randomSelection(['female','male'])
for user in users().generate(10):假设我们只需要10个用户
print user
"我","姓氏":"Schaden","性别":"女性","年龄":18,"地址":"0641 Homenick Hills\nsouth Branson,Ri 70388","ID":10}
{"姓氏":"Gene","姓氏":"Greenfelder","性别":"男性","年龄":17,"地址":"292 Loy Lights Suite 328\nFritzfort,in 73914","ID":11}
或者,您可能希望将它们插入您最喜欢的数据库(MongoDB、ElasticSearch等)
```
在为DictFactory创建自己的子类时,我们可以使某些字段依赖于其他字段。
例如:
``python
Class ExampleFactory(DictFactory):
=countingfactory(10)
b=clonedfield("a")b的值与examplefactory()中e的字段"a"
。generate(100):
print e
{a':10,'b':10}
{a':11,'b':11}
希望事件有
一个开始时间,和一个20分钟的结束时间。
此外,我们希望事件的开始时间相隔12分钟。
`` python
导入测试数据
事件类型=["用户断开连接","用户连接","用户登录","用户注销"]
类事件工厂(testdata.dictfactory):
开始时间=testdata.dateintervalfactory(datetime.datetime.now(),datetime.timedelta(minutes=12))
结束时间=testdata.relativeTodateTimefield("开始时间",datetime.timedelta(minutes=20))
事件代码=testdata.randomselection(event_类型)
eventfactory()中的事件。生成(100):
打印事件
{开始时间:datetime.datetime(2013,12,23,13,37,1,591878),'结束时间:datetime.datetime(2013,12,23,13,57,1,591878),'事件代码':'用户连接'}
{开始时间:datetime.datetime(2013,12,23,13,49,1,591878),"结束时间":datetime.datetime(2013,12,23,14,9,1,591878),"事件代码":"用户登录"}
{"开始时间":datetime.datetime(2013,12,23,14,1,1,591878),"结束时间":datetime.datetime(2013,12,23,14,21,1,591878),"事件代码":"用户断开连接"}
```
还有其他的错误。此外,我们希望如果"state"字段是
"error",则分配的用户是"support",否则应该是"admin"。
``python
类作业(testdata.dictfactory):
state=testdata.statisticalvaluesfactory([("pending",90),("error",10))
分配的用户=testdata.conditionalValueField('state',{'error':'support'},'admin')
description=testData.randomLengthStringFactory()
for i in job().generate(10):
print i
{'state':'error',assigned搌user':'support','description':'julyfbypxpdflpbfppagatppuajfshxkkyewzrq'}
#{'state':'pending','assigned戥user':'admin','description':'tozkgmbnxqhsyejvduyxgdlrtquetzqrxmhnxbajbffdnxulkwytdxczgiztlheikeswviydzanuoltxmwhjvazaoyu'}
{'state':'pending','assigned戥user':'admin','description':'tidvuvuzrubllttg'}
{'state':'pending','assigned'_用户':'管理','描述':'rgcsafzmmrhwcazjlofikmxjhtqvotswhnqtxjgrxgztkh'}
{状态':'挂起','分配的用户':'管理','描述':'tlksekcbydvlcdwubgmimmidedoxedbaddknqgwlnxubqzoxfxnbxkigtymugnbunmxyawzlgsiummciwxnsw'}
{状态':'挂起','分配的用户':'管理员n','说明':'tuyylofuzpceawykkirvksqfghgoiwacupivrxmiuftjpsobsqcbcrqnokohqaukfmwry'}
{状态':'pending','分配的用户':'admin','说明':'jbfruxrermobwhetcqgcxebimfotfjrisfkbpyemqufqqqkmvlgslvozrrnetenlcgbfbtmqoz'}
{状态':'pending','分配的用户':'admin','description':'lqatawdckumpiydvmryqgeizolcoozijjdcfxsvoznttqjpbfzqgskpbljrtiylotizoyyrncevuncqfomexecpd'}
{'state':'pending','assigned''u user':'admin','description':'vyxhnhydwtwtiuipsoezvqhuxybiugdyaefzipigwchmmophixexbixxtdwkkuvwimmourmoooocwevqhgapxkolhjaq'}
#{'state':'挂起','分配的用户':'管理','描述':'rcawgtkggchdhppsyqxnbddnxqkgqwnqmslorqnaqldaqwnktgpxazuvdxqbimzvqsyabifuipqvdzwtddrplebrc'}
```
对于特定的实例,
让我们从一开始就以我们的"用户"为例。
`` python
导入testdat a
类用户(testdata.dictfactory):
id=testdata.countingfactory(10)
firstname=testdata.fakedatafactory('firstname')
lastname=testdata.fakedatafactory('lastname')
address=testdata.fakedatafactory('address')
age=testdata.randomInteger(10,30)
gender=testdata.randomSelection(['female','male'])
`````
但是让它重写,这样'firstname'总是返回john,并使age成为随机整数。在40到60之间输入er,然后添加一个"email"字段。
``python
对于用户中的用户(firstname=testdata.constant('john'),age=testdata.randominger(40,60),email=testdata.fakedatafactory('email')。generate(10):假设我们只需要10个用户
print user
{firstname':'john','性别':'male','age':54,'email':'hazle.wehner@brekke.com,'lastname':'willms,'address':'245 pfeffer light apt.309\neast audisede,in 11931,'id':10}
{firstname':'john,'gender':'male','age':47,'email':'mariam25@gmail.com,'lastname':'ratke,'address':'98710 freddygateway\ndelilahborough,gu 50849,'id':11}
{'firstname':'john,'gender':'male,'age':55,'email':'tyler22@yahoo.com,'lastname':'cormier,'address':'432 block locks apt.547\nnew estel,nj 54026,'id':12}
数据库(MongoDB,ElasticSearch,…)
````
r/>有关更多示例和doctest,请参见factorie的docstrings。
允许子分类创建使用特定架构生成dict的工厂(请参见[示例][示例])。|
list factory在每次迭代中返回从对给定工厂的调用返回的"elements"列表项的工厂。|
callable获取一个可调用对象作为参数,并返回在每次迭代中调用该对象的结果
dependentCallable获取一个可调用对象作为参数,并返回在每次迭代中将定义的字段作为参数传递给该对象的结果
|复制另一个工厂价值的工厂。|
odateTimeField生成相对于另一个DateTime字段的DateTime对象,就像您有一个"start_time"这是一个随机日期工厂字段,并且想要一个总是15分钟后的"end_time"字段一样。
TODOS
*为每个工厂添加使用文档(可能使用doctest?)
*添加更多测试
*添加地理位置工厂以生成与位置和距离相关的数据(例如,中心点附近的随机点)。
*添加更多统计工厂
*欢迎更多想法!