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空闲(例如,在测试运行时浏览网页)。如果测试使用了大量内存,在项目文件中使用它也是合理的,以避免内存不足。
environments和test-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的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0f76aac20432fb4b11a7dbbf9020ea795fb172e24132c5ade4a4eb6292408148 |
|
MD5 | 52e63c5804e6477afa7e5d00baae7b73 |
|
BLAKE2b-256 | ad1f228bdd24ba9b750b82e0fe225623daab41e1b70c659798554caeebc05f7d |