帮助生成内容以填充测试数据库的小程序包。

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?)
*添加更多测试
*添加地理位置工厂以生成与位置和距离相关的数据(例如,中心点附近的随机点)。
*添加更多统计工厂
*欢迎更多想法!

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

推荐PyPI第三方库


热门话题
java如何获取所有链接并使用SeleniumWebDriver逐个单击这些链接   java中数组列表的arraylist移位元素   java如何存储具有不同类型参数的元素   java不能使用List<Future<?>>当从不同位置调用时,在方法参数中   java我应该如何修复代码以避免测试代码出错?   安卓 PreferenceFragment java。lang.RuntimeException   java在运行emulator时发现错误   java取消多个AsyncTask回调的有效方法是什么?如果中途满足条件,这些回调将在将来返回?   有没有办法在运行时将方法动态分配给Java类?   java如何将propertyfile与GlassFish一起使用   如何在PHP中使用bcrypt对密码进行哈希处理?   Java和UDP web服务器   java JPA允许EntityListeners执行JPA操作吗?   java执行do while语句时不会产生错误   java无法在edittext中显示数据库中的数据   java Tomcat中活动会话的数量   java在何处使用@SuppressWarnings(“requestfactory”)   netty连接中的java HornetQ异常