如何最小化tox文件中的重复

目标:成功执行特定的tox命令,并使其“仅”运行特定的匹配命令.

示例:tox -e py35-integration

tox应仅针对py35集成运行,不包括默认或独立的py35定义.

我尝试了两种不同的方法,据我所知,有两种方法可以尝试做我想做的事情.

>注意flake8命令是在不同命令之间轻松隔离并指示我正在运行什么.它并不表示我正在尝试运行的命令.

此外,ini文件仅显示相关部分.

第一种方法

[tox]
envlist = {py27,py35}, {py27,py35}-integration

[testenv]
commands =
    py27: python -m testtools.run discover
    py35: python -m testtools.run discover
    py27-integration: flake8 {posargs}
    py35-integration: flake8 {posargs}

使用这种方法,这里的理解是我想要运行tox -e py27-integration而不运行py27命令的定义.这不是正在发生的事情.相反,它将运行py27和py27集成.

第二种方法

[tox]
envlist = {py27,py35}, {py27,py35}-integration

[testenv]
commands =
    python -m testtools.run discover

[testenv:integration]
commands = 
    flake8 {posargs}

现在,我在这里明确地隔离了一个“子”环境,它有自己的命令来运行“集成”.

然而,不幸的是,我遇到了所有匹配的“py27”模式被执行的完全相同的行为.

我试图避免重复testenv结构:[testenv:py27-integration]和[testenv:py35-integration],它们包含完全相同的定义(目标是最小化重复).

我很想知道我是否有办法实现我想做的事情.

我不想冒险尝试将p27-integration作为替代命名方案,因为我们的CI管道具有期望某些名称结构的模板,并且这些名称对于tox也是惯用的,例如py27被理解为安装2.7虚拟环境.

最佳答案

[tox]
envlist = {py27,py35}, {py27,py35}-integration

[testenv]
commands =
    python -m testtools.run discover

[integration]
commands = 
    flake8 {posargs}

[testenv:py27-integration]
commands = 
    {[integration]commands}

[testenv:py35-integration]
commands = 
    {[integration]commands}

如果需要更改集成命令,可以在一个位置更改它们:在[集成]中.

点赞