跳转到主要内容

样本数据生成器

项目描述

本包旨在尽最大努力支持样本数据生成器的开发。样本数据生成器是一个可插拔工具,用于创建测试所需的数据。

详细文档

可插拔样本数据框架

创建良好的测试环境是创建高质量软件的最重要方式。

但大多数时候,这是一件头疼的事情!

本包旨在尽最大努力支持样本数据生成器的开发。样本数据生成器是一个可插拔工具,用于创建测试所需的数据。

本框架有几个目标

  • 为开发者提供接近实际使用的自动设置。

  • 为用户提供易于评估的设置,使用合理的测试数据。

  • 为用户提供管理不同样本生成器的接口。

该框架是可插拔的,允许生成器扩展的创建者提供自己的插件,为这些扩展生成样本数据。

生成器

生成器生成样本数据。

>>> from zope import interface
>>> from zope import component
>>> from z3c.sampledata.interfaces import ISampleDataPlugin
>>> @interface.implementer(ISampleDataPlugin)
... class GeneratePrincipals(object):
...     dependencies = []
...     schema = None
...     def generate(self, context, param={}, dataSource=None, seed=None):
...         print(self.__class__.__name__)
...         if dataSource is not None:
...             for data in dataSource:
...                 print('- %s'%data['login'])
>>> principalPlugin = GeneratePrincipals()

对于我们的测试,我们提供了另一个生成器

>>> @interface.implementer(ISampleDataPlugin)
... class GenerateSite(object):
...     dependencies = []
...     schema = None
...     def generate(self, context, param={}, dataSource=None, seed=None):
...         if 'sitename' in param:
...             print('This is site %r'%param['sitename'])
...         else:
...             print(self.__class__.__name__)
...         return 'I am from the site'
>>> sitePlugin = GenerateSite()

生成器管理器

生成器管理器将一组生成器分组。管理器允许

  • 定义生成器之间的依赖关系

  • 定义依赖生成器之间的数据连接

  • 提供默认配置数据

>>> from z3c.sampledata import Manager
>>> manager = Manager('manager', '')
生成器插件

对于管理者,我们的样本生成器必须注册为命名服务。

>>> component.provideUtility(sitePlugin,
...                          ISampleDataPlugin,'z3c.sampledata.site')
>>> component.provideUtility(principalPlugin,
...                          ISampleDataPlugin,'z3c.sampledata.principals')
生成样本数据

现在我们可以将生成器添加到管理者中。

>>> manager.add('z3c.sampledata.principals',
...             dependsOn=['z3c.sampledata.site',],
...             contextFrom='z3c.sampledata.site')

除了每个生成器中由依赖属性定义的“硬编码”依赖项外,还可以在生成器管理器中添加依赖项。

管理者提供了它的生成器。

>>> list(manager.generators.keys())
['z3c.sampledata.principals']

我们可以告诉管理者生成所有样本。无需添加样本生成器“z3c.sampledata.site”,因为它会自动添加,因为依赖于“z3c.sampledata.principals”。

>>> infos = manager.generate(context=None, param={}, seed='something')
GenerateSite
GeneratePrincipals
>>> [info.name for info in infos]
['z3c.sampledata.site', 'z3c.sampledata.principals']

样本生成器的参数

为了更好地控制样本生成过程,可以为生成器设置参数。

>>> manager = Manager('manager', '')
>>> manager.add('z3c.sampledata.site',
...             param={'sitename':'samplesite'})
>>> manager.add('z3c.sampledata.principals',
...             dependsOn=['z3c.sampledata.site',],
...             contextFrom='z3c.sampledata.site')
>>> infos = manager.generate(context=None, param={}, seed='something')
This is site 'samplesite'
GeneratePrincipals

还可以从配置中覆盖参数。

>>> infos = manager.generate(context=None,
...                          param={'z3c.sampledata.site':
...                                 {'sitename':'managers site'}},
...                          seed='something')
This is site 'managers site'
GeneratePrincipals

生成器定义中的循环

>>> manager = Manager('manager', '')
>>> manager.add('z3c.sampledata.principals',
...             dependsOn=['z3c.sampledata.site',],
...             contextFrom='z3c.sampledata.site')
>>> manager.add('z3c.sampledata.site',
...             dependsOn=['z3c.sampledata.principals',])
>>> infos = manager.generate(context=None, param={}, seed='something')
Traceback (most recent call last):
...
CyclicDependencyError: cyclic dependency at 'z3c.sampledata.principals'

一个复杂依赖关系的测试。

>>> @interface.implementer(ISampleDataPlugin)
... class Generator(object):
...     name = 'generator'
...     dependencies = []
...     schema = None
...     def generate(self, context, param={}, dataSource=None, seed=None):
...         return 'I am a generator'
>>> component.provideUtility(Generator(), ISampleDataPlugin,'g.1')
>>> component.provideUtility(Generator(), ISampleDataPlugin,'g.2')
>>> component.provideUtility(Generator(), ISampleDataPlugin,'g.3')
>>> manager = Manager('manager', '')
>>> manager.add('g.1')
>>> manager.add('g.2', contextFrom='g.1')
>>> manager.add('g.3', dependsOn=['g.2', 'g.1'], contextFrom='g.1')
>>> infos = manager.generate(context=None, param={}, seed=None)
>>> [info.name for info in infos]
['g.1', 'g.2', 'g.3']

样本数据源

样本数据生成器通常从数据源获取样本数据。通常需要为不同的用途有不同的数据源。

例如,如果测试的样本数据与UI稍后提供给客户进行点击的数据相同,那么总是很痛苦。

>>> manager = Manager('manager', '')
>>> manager.addSource('z3c.datasource.principals',
...                   data=[{'login':'jukart', 'password':'trakuj'},
...                         {'login':'srichter', 'password':'rethcirs'}])
>>> manager.add('z3c.sampledata.principals',
...             dataSource='z3c.datasource.principals',
...             dependsOn=['z3c.sampledata.site',],
...             contextFrom='z3c.sampledata.site')
>>> infos = manager.generate(context=None, param={}, seed='something')
GenerateSite
GeneratePrincipals
- jukart
- srichter

还可以使用适配器作为数据源。

>>> manager = Manager('manager', '')
>>> class IPrincipalDataSource(interface.Interface):
...     pass
>>> def principalDataFactory(object):
...      return [{'login':'jukart', 'password':'trakuj'},
...              {'login':'srichter', 'password':'rethcirs'}]
>>> component.provideAdapter(
...                          factory=principalDataFactory,
...                          adapts=(ISampleDataPlugin,),
...                          provides=IPrincipalDataSource,
...                          name='testprincipals')
>>> manager.addSource('z3c.datasource.principals',
...                   adapterName='testprincipals',
...                   adaptTo=IPrincipalDataSource)
>>> manager.add('z3c.sampledata.principals',
...             dataSource='z3c.datasource.principals',
...             dependsOn=['z3c.sampledata.site',],
...             contextFrom='z3c.sampledata.site')
>>> infos = manager.generate(context=None, param={}, seed='something')
GenerateSite
GeneratePrincipals
- jukart
- srichter

如何设置生成器管理器的配置

可以使用ZCML进行配置。

<configure xmlns="http://namespaces.zope.org/zope">

  <configure
      xmlns:zcml="http://namespaces.zope.org/zcml"
      zcml:condition="have devmode">

    <utility
        factory=".SampleSite"
        provides="z3c.sampledata.interfaces.ISampleDataPlugin"
        name="z3c.site"
        />

    <utility
        factory=".SamplePrincipals"
        provides="z3c.sampledata.interfaces.ISampleDataPlugin"
        name="z3c.principals"
        />

    <SampleManager
      name="Site with principals"
      >
      <generator name="z3c.site" />
      <generator
        name="z3c.principal"
        dependsOn="z3c.site"
        contextFrom="z3c.site" />
    </SampleManager>

  </configure>

</configure>

数据源

此包实现了数据生成器的基本功能。数据生成器用于为样本生成器提供原始数据。原始数据可以以不同的方式从文本文件中读取。

>>> from z3c.sampledata.data import DataGenerator
>>> generator = DataGenerator(55)

生成器可以读取文件中的数据行。

>>> generator.readLines('testlines.txt')
[u'Line 1', u'Another line']

生成器可以读取CSV文件中的数据。

>>> generator.readCSV('testlines.csv')
[['Line 1', 'Col 2'], ['Another line', 'Another Col']]

生成器可以读取路径中的文件列表。

>>> import os
>>> generator.files(os.path.dirname(__file__))
['...README.txt', ...]

变更

2.0.0 (2015-11-09)

  • 标准化__init__命名空间

2.0.0a1 (2013-03-04)

  • 添加了对Python 3.3的支持。

  • 完全删除了浏览器支持,因为它依赖于非常旧的o-wrap技术。此外,它包含大约7年前的一个可爱的特定项目语言。:-)

  • 用等效的zope.interface.implementer装饰器替换了已废弃的zope.interface.implements用法。

  • 删除了对Python 2.4和2.5的支持。

1.0.0 (2013-02-26)

  • 将特殊SampleDataLayer设置的依赖项移动到“testing”额外组件。

  • 添加了MANIFEST.intox.ini

  • 修复了文件头。

  • 浏览器视图仅可通过“browser”额外组件使用。

  • zope.app.pagetemplate依赖项更改为zope.browserpage

0.4.0 (2010-08-30)

  • 使用当前包。

0.3.1 (2010-08-30)

  • 更新依赖项元数据,清理导入。

0.3.0 (2010-06-28)

  • 配置测试运行器以运行功能测试。

  • 删除了ZPKG和ZCML占位符。

  • 现在需要zope.app.pagetemplate >= 3.6.0,因为zope.formlib.namedtemplate已移至其中,并且不再有BBB导入zope.formlib >= 4.0。

  • 修复了与zope.app.authentication >= 3.7.0一起运行的测试。

  • 修复了与zope.publisher >= 3.12.0一起运行的测试。

  • 使用python的doctest模块代替已废弃的zope.testing.doctestunit

0.2.0 (2010-06-25)

  • 在ftesting.zcml中将zope.app.session调整为zope.session。

  • 在ftesting.zcml中将zope.app.securitypolicy调整为zope.securitypolicy

  • 在zope包重构后修复了测试。更新了导入和依赖项。

0.1.0 (2008-02-14)

  • 初始版本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分发

z3c.sampledata-2.0.0.tar.gz (21.6 kB 查看哈希值)

上传时间:

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面