跳转到主要内容

Spiny可以在多个Python版本下运行您的Python测试

项目描述

Spiny

Spiny Norman 是一只刺猬。

它也是一个包,可以在多个Python版本下运行您的Python测试。

“等等!”我听到你说,“Tox 已经有了!”你是对的。Spiny 是我试图深入研究 Tox 覆盖的问题空间,以创建一个更简单的东西,并修复 Tox 的一些问题。

最值得注意的是,在 Spiny 中,Python 不必在路径上,它可以安装除您安装的 virtualenv 版本之外的其他 Python 版本,并且它不总是调用 setup.py。它还可以并行运行测试。

主要功能:对于常见用例,它不需要配置。

不能保证 Spiny 的功能最终不会出现在 Tox 中。

命令行参数

您可以在您想要测试的 Python 项目的根目录中运行 Spiny,即包含 setup.py 文件的目录。

命令行参数是

用法:spiny [-h] [–version] [-c <filename>] [-e <environments>] [-v] [-q]

[<configvar> [<configvar> …]]

在多个Python版本下运行测试。

位置参数
<configvar> 通过“section:variable=value”覆盖配置变量

示例:“spiny:venv-dir=.venv”

可选参数
-h--help

显示此帮助信息并退出。

--version

显示版本号并退出。

-c <filename>--config <filename>

要使用的配置文件。默认为“spiny.cfg”。

-e <environments>--envlist <environments>

要运行的环境的列表,用逗号分隔。

-v--verbose

增加输出,-vv会进一步增加。

-q--quiet

减少输出,只显示运行摘要,-qq会移除摘要。

版本支持

Spiny可以在Python 2.6、2.7、3.3和3.4下运行。它也可以在PyPy、PyPy3和Jython下运行。

它可以在更广泛的Python版本下运行测试,除了上述版本外,还测试了Python 2.4、2.5、3.1和3.2。

理论上支持IronPython,但我无法让virtualenv与IronPython一起工作。其他Python实现未经测试。如果某个实现不起作用,欢迎您提出问题,我可以进行调查。

配置文件

Spiny通常不需要配置文件。它将查看您的setup.py文件,找出您的模块支持哪些Python版本,并使用这些版本运行测试。

您可以使用分类器声明版本支持,如下所示

setup(
    ...
    classifiers=[
        ...
        "Programming Language :: Python",
        "Programming Language :: Python :: 2.6",
        "Programming Language :: Python :: 2.7",
        "Programming Language :: Python :: 3.3",
        "Programming Language :: Python :: 3.4",
        "Programming Language :: Python :: Implementation :: PyPy",
        ...
        ],
    ...
)

有了这些分类器,Spiny将在Python 2.6、2.7、3.3、3.4以及PyPy下运行测试。

您可以在配置基础上显式配置Spiny。您可以在项目根目录中添加一个位于项目根目录的spiny.cfg文件,或者您可以将配置添加到项目的setup.cfg文件中。

您还可以在~/.config/spiny.cfg中有一个个人配置文件,其配置选项将对所有项目有效。

[spiny]部分,支持以下配置选项

  • environments:空格分隔的Python和Python版本列表。

  • venv-dir:安装virtualenvs的目录名称。默认为.venv

  • max-processes:运行测试时可以运行的并发进程的最大数量。默认为CPU的数量。

  • test-commands:运行测试时使用的命令。您可以有多个命令行。默认为{envpython} setup.py test。在命令中可以使用一些变量,它们将被替换

    • {envpython}将被替换为virtualenv中Python可执行文件的完整路径

    • {basepython}将被替换为创建virtualenv的Python可执行文件的完整路径

    • {envdir}将被替换为virtualenv目录的完整路径

    • {projectdir}将被替换为Python项目目录的完整路径(即,当前目录)

  • setup-commands:创建virtualenv时使用的命令。默认值因环境而异,但归结为{envpython} -m virtualenv {envdir}

  • use-setup-py:是否应使用来自setup.py的requirements数据来收集需求。这意味着setup.py需要存在,并且可以在没有副作用的情况下执行。默认为true

  • use-requirements-txt:是否应使用来自requiremenets.txt的requirements数据来收集需求。默认为true

  • changedir:在运行测试之前更改到的目录。可以使用test-commands中的变量。

示例

[spiny]
environments = python2.7
               python3.4
               pypy2.4

venv-dir = .venv

test-commands = {envpython} something.py magic
                {envpython} setup.py test

max-processes = 3

还有一个[pythons]部分,它定义了每个环境的各种可执行文件的路径

[pythons]
python2.6 = /pythons/python26/bin/python
python2.7 = /pythons/python27/bin/python
python3.3 = /pythons/python33/bin/python3
python3.4 = /pythons/python34/bin/python3

如果不进行配置,将使用PATH中存在的可执行文件。

在项目spiny.cfg中设置这并无多大意义,因为每个人运行测试时很可能拥有不同的Python安装。然而,在个人配置文件中设置这一点却非常有意义。

您可以在项目的spiny.cfg中添加[pythons]部分,但这种情况的使用场景非常有限。可能是在您的项目中使用自定义Python时。

max-processes在个人文件中也是合理的,例如,如果您有非常长的测试,并且希望保持CPU空闲(例如,在测试运行时浏览网页)。如果测试使用了大量内存,在项目文件中使用它也是合理的,以避免内存不足。

environmentstest-commands只对每个配置有意义,而不是在个人文件中。然而,没有对此进行检查,所以如果您想的话可以添加它们,但结果可能不太实用。

待办事项

需要完成的事项

  • 使测试在自身下运行。

  • 找出如何对子进程运行的内容执行覆盖率。

  • 为每个环境添加命令,启用像检查pep8合规性的pep8环境等。

  • Windows支持。也许。

变更记录

0.6 (2017-04-12)

  • 使用/dev/null作为stdin意味着测试不会挂起,但会报错。

  • 当只使用一个进程时,不会重定向测试输出(或输入)。

  • 它不是一个库,所以不需要支持Python 2。

0.5 (2016-02-26)

  • 现在按CTRL-C将终止程序。

  • 将{envpath}重命名为{envdir},{python}重命名为{envpython},{project_dir}重命名为{projectdir}。还添加了{basepython}到用于安装虚拟环境的Python版本中。

  • 对自定义命令进行了多项更改,以使其更加稳定和灵活。

  • 在配置中添加了changedir选项。

  • 现在可以运行不支持任何版本虚拟环境的Python的测试,例如Python 2.3及更早版本。

  • 如果不知道使用哪些版本,会给出一个友好的错误信息并退出为-1。

  • 不再支持使用Python 2.6运行Spiny。

  • 如果使用系统Python 3,虚拟环境将不再安装系统Python 2。

  • Spiny现在支持在setup.py中对不同版本的Python使用不同的要求。

  • 找不到特定环境的可执行文件不再是致命错误,因此不需要安装所有支持的版本。

0.4 (2014-11-01)

  • 添加了对requirements.txt的支持。

  • 添加了跳过执行setup.py的参数。

  • 添加了setup-commands参数来覆盖创建虚拟环境的方式。

  • -e参数现在实际上生效了。

  • 关于python可执行文件的信息现在被缓存。这大大加快了启动速度,获取Python环境从大约5秒减少到不到十分之一。

  • 现在将每个虚拟环境的配置保存到虚拟环境本身中,包括其名称、Python可执行文件的完整路径和已安装的要求。虚拟环境现在只有在上次运行后这些内容有变化时才会更新。这也在典型情况下大大加快了测试运行速度。

0.3 (2014-10-30)

  • 现在可以在Python 3、PyPy、PyPy3、Jython下运行。

  • 所有输出现在通过日志进行,这允许您选择详细程度。

  • 添加了–version、–verbose和–quiet选项。

  • 现在在Python 2下使用subprocess32。

  • 现在将以多进程并行运行测试。在[spiny]部分有一个“max-processes”选项,可以限制进程数,以防您不想使电脑达到最大性能。否则,它将使用多进程报告的cpu数量。

0.2 (2014-10-27)

  • 现在会在结束时打印一个总结。

  • 将更多的虚拟环境测试视为失败。

  • 如果所有测试没有全部成功,则返回1。

  • 如果没有找到spiny配置文件,则回退到setup.cfg。

  • 为保持一致性,已将spiny.conf重命名为spiny.cfg。

  • 已将配置文件设置为可选。

  • 如果未找到环境配置,Spiny现在将使用grep搜索setup.py中的Python版本分类器。

  • 如果同时指定了Python X和Python X.Y作为环境,则会跳过Python X的测试,因为Python X.Y已满足要求。

  • 现在优先考虑[pythons]部分中指定的版本。

  • 即使该部分不存在,现在也可以从命令行设置配置选项。

  • Spiny现在将在运行测试之前尝试提取测试依赖项并将其安装到virtualenv中,以避免将.egg目录污染项目目录。

0.1.1 (2014-10-18)

  • 初始发布

项目详情


下载文件

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

源分布

spiny-0.6.tar.gz (16.4 kB 查看哈希值)

上传时间

由以下提供支持

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