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

fake-gen的Python项目详细描述


testscoverage

假发电机

为测试生成数据的简单包。

Fake_Gen提供生成内容的基本工厂类和dictFactory类。 它还提供了许多提供扩展功能的更专业的工厂。 每个工厂实例都知道它将生成多少元素,这使我们能够生成统计结果。

如果您希望生成稍后将输入到nosql的基于文档的数据,那么dictfactory尤其有用。 数据库

此外,使用dictfactory和dependentfield工厂允许我们创建依赖于结果的工厂 其他工厂。(有关更多信息,请参见示例)。

fake_gen没有绑定到指定的数据库,但在其中包含数据库特定模块,如-extra.mongodb.py) 但它将始终清除与数据库相关的依赖项。

安装

pip install fake-gen

示例

我们集成了awsome faker包来使用fakedatafactory生成数据, 这允许我们生成各种内容,如: *姓名(名字、姓氏、全名) *公司 *地址 *电子邮件 *网址 *还有更多

让我们创建一个生成用户的非常简单的工厂:

importfake_genclassUsers(fake_gen.DictFactory):id=fake_gen.CountingFactory(10)firstname=fake_gen.FakeDataFactory('firstName')lastname=fake_gen.FakeDataFactory('lastName')address=fake_gen.FakeDataFactory('address')age=fake_gen.RandomInteger(10,30)gender=fake_gen.RandomSelection(['female','male'])foruserinUsers().generate(10):# let say we only want 10 usersprintuser# {'firstname': 'Toni', 'lastname': 'Schaden', 'gender': 'female', 'age': 18, 'address': '0641 Homenick Hills\nSouth Branson, RI 70388', 'id': 10}# {'firstname': 'Gene', 'lastname': 'Greenfelder', 'gender': 'male', 'age': 17, 'address': '292 Loy Lights Suite 328\nFritzfort, IN 73914', 'id': 11}# or more likely you'd want to insert them into your favorite database (MongoDB, ElasticSearch, ..)

在为dictfactory创建自己的子类时,我们可以使一些字段依赖于其他字段。 例如:

classExampleFactory(DictFactory):a=CountingFactory(10)b=ClonedField("a")# b will have the same value as field 'a'foreinExampleFactory().generate(100):printe# {'a': 10, 'b': 10}# {'a': 11, 'b': 11}# ...

假设我们想要生成类似事件数据的东西,我们想要事件具有 一个开始时间,一个结束时间是20分钟。 此外,我们希望活动的开始时间相隔12分钟。

importfake_genEVENT_TYPES=["USER_DISCONNECT","USER_CONNECTED","USER_LOGIN","USER_LOGOUT"]classEventsFactory(fake_gen.DictFactory):start_time=fake_gen.DateIntervalFactory(datetime.datetime.now(),datetime.timedelta(minutes=12))end_time=fake_gen.RelativeToDatetimeField("start_time",datetime.timedelta(minutes=20))event_code=fake_gen.RandomSelection(EVENT_TYPES)foreventinEventFactory().generate(100):printevent# {'start_time': datetime.datetime(2013, 12, 23, 13, 37, 1, 591878), 'end_time': datetime.datetime(2013, 12, 23, 13, 57, 1, 591878), 'event_code': 'USER_CONNECTED'}# {'start_time': datetime.datetime(2013, 12, 23, 13, 49, 1, 591878), 'end_time': datetime.datetime(2013, 12, 23, 14, 9, 1, 591878), 'event_code': 'USER_LOGIN'}# {'start_time': datetime.datetime(2013, 12, 23, 14, 1, 1, 591878), 'end_time': datetime.datetime(2013, 12, 23, 14, 21, 1, 591878), 'event_code': 'USER_DISCONNECT'}

我们也有工厂,允许我们生成按不同百分比分布的不同数据,例如, 假设我们要创建一个“作业”,它将有一个分配的用户字段、一个状态字段和一个描述字段。 我们希望90%的字典中的状态为“挂起”,其余字典中的状态为“错误”。另外,如果“state”字段是 “error”分配的用户将是“support”,否则应该是“admin”。

classJob(fake_gen.DictFactory):state=fake_gen.StatisticalValuesFactory([('pending',90),('error',10)])assigned_user=fake_gen.ConditionalValueField('state',{'error':'support'},'admin')description=fake_gen.RandomLengthStringFactory()foriinJob().generate(10):printi# {'state': 'error', 'assigned_user': 'support', 'description': 'jUlyFByPxPdFlBPBfPaGaTPPuajFSHXKkyewzrQ'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'tOzkgmBBnxQZhSYEjVduyXGdLrtqeTZqRxmHNXbaJBfpdNxuLKWyTDxkCZgiZTLHeiKEswvIyDzAnuuOLtXmVWhjvazaOYuu'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'TIDVuvZRUBLLTtG'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'RgcSaFzmMrhwCAZjLofikmXJhtqkVOTsWHnqTXjgrxgzTKH'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'tLkSEkCbYDvlcDBDWUBGMmidEdOxeiLDBADDKnqGqWLnxUBqzOXFXnBxkiGTymuGNbUnmxyawzLGsiummCiwxNSw'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'tUyYLofuZpceaWYKkiRvksQLqFHGOiwACuPIvRxMIuftJPsObSqCBcrQnOkOhqAukfMwrY'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'JbFrUxrERMObfwhEtCQGcxEbimvoTFwJriSfRFLFkBpyemqEfqUCGKmVlgSlVoZrrnetEnLCgbfobFbTMQOZ'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'lqatAwdcQuMMOPiYdVMRyyQgEIzOlcoozijjdCfXsVoZnnTtQjPSGBFZQGSkPblJrTIYLAotiZoyYRFrlncevwuNcqfOmeXeCPD'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'VYxnhydWtIUFiOEPszVQHuxYBIUGDyAefZiPIgkWHCMmophiueXbixXtdwKQkuvWImuErMOOOcwevQHGApXkolhjAq'}# {'state': 'pending', 'assigned_user': 'admin', 'description': 'RcawgTkQggchdHppSyQxnbDdNxqkGqbQWnQMSlorqnAQLdAqyWnKtGpXaZuVdxcGQBImzVPQsYAbIFUIpqvDzwTDdRpleBrc'}

1.0.5中,我们扩展了独占工厂,以支持通过额外的工厂,或覆盖现有工厂,用于特定的实例。 让我们从一开始就以我们的“用户”为例。

importfake_genclassUsers(fake_gen.DictFactory):id=fake_gen.CountingFactory(10)firstname=fake_gen.FakeDataFactory('firstName')lastname=fake_gen.FakeDataFactory('lastName')address=fake_gen.FakeDataFactory('address')age=fake_gen.RandomInteger(10,30)gender=fake_gen.RandomSelection(['female','male'])

但是让我们重写它,这样“firstname”总是返回john,并将年龄设置为40到60之间的随机整数,然后添加一个“email”字段。

foruserinUsers(firstname=fake_gen.Constant('John'),age=fake_gen.RandomInteger(40,60),email=fake_gen.FakeDataFactory('email')).generate(10):# let say we only want 10 usersprintuser#{'firstname': 'John', 'gender': 'male', 'age': 54, 'email': 'hazle.wehner@brekke.com', 'lastname': 'Willms', 'address': '245 Pfeffer Light Apt. 309\nEast Audieside, IN 11931', 'id': 10}#{'firstname': 'John', 'gender': 'male', 'age': 47, 'email': 'mariam25@gmail.com', 'lastname': 'Ratke', 'address': '98710 Freddy Gateway\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}# or more likely you'd want to insert them into your favorite database (MongoDB, ElasticSearch, ..)

工厂

有关更多示例和doctest,请参阅factorie的docstrings。

碱基

Factory ClassDescription
FactoryThe base class of all the factories.
DictFactoryA very powerful base class. allows sub classing to create factories that generate dicts with a specific schema (see [Examples][#Examples]).
ListFactoryA factory that returns on each iteration a list of ^{} items returned from calls to the given factory.
CallableGets a callable object as an argument and returns the result of calling the object on every iteration
DependentCallableGets a callable object as an argument and returns the result of calling the object passing the defined fields as arguments on every iteration
ClonedFieldA factory that copies the value of another factory.

日期

Factory ClassDescription
RandomDateFactoryGenerates random dates (python's datetime) between 2 dates
DateIntervalFactoryGenerates datetime objects starting from ^{} while adding ^{} to it each iteration.
RelativeToDatetimeFieldGenerates datetime object relative to another datetime field, like if you have ^{} which is a RandomDateFactory field, and want an ^{} field that is always 15 minutes later.

还有更多……

待办事项

  • 为每个工厂添加使用文档(可能使用doctest?)
  • 添加更多测试
  • 添加geolocationfactories以生成与位置和距离相关的数据(例如,中心点附近的随机点)。
  • 添加更多统计工厂
  • 欢迎更多想法!

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

推荐PyPI第三方库


热门话题
带条纹的java开源CMS?   Java中的模板类   java为我的圣诞树建造底座   算法首次用户输入尝试不起作用(Java)   简单服务器客户端程序中的java EOF和SocketException   java的OpenJPA与OSGi配合使用吗   arraylist中的java排序   Java工具创建的WSDL文件存在WCF序列化问题   java公共布尔removeStudent(int-id)   正则表达式java正则表达式需要字符串验证   JavaSpring任务调度   java表“places”没有名为“smallDesc”的列   java将枚举集转换为整数数组   java将int数组转换为byte数组,反之亦然,最有效的方法是什么?   java错误:找不到适合添加的方法(字符串,类<RouterRequestManagerFragment>)   java JComponent不可见   javasocket编程中线程“awteventque0”java.lang.NullPointerException“异常”错误