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

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获取textview的文本并将其粘贴到另一个上   java ImageIO。write()不保存文件   java H2数据库排序字符串时间戳,格式为yyyyMMdd'T'hh:mm:ss。SSSSSSS'Z'   java匿名类与静态字段   java将一个句子拆分为字符串数组,并保留特殊字符或空格   JavaBIRT报告引擎。计算Javascript表达式时出错   日志表的java MySQL隔离级别读取未提交   java Android调用意图权限   java如何在iText 7中查找文本位置和边界   从Groovy调用Java类主方法时,避免参数数量不正确   java libGDX:在批处理调用stage constructor时,为舞台上的演员绘制纹理作为背景   java randoop可以利用usermade JUnit测试生成测试吗?   java Eclipse工作区将不再显示我的项目