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

时间:2017-06-30 15:16:52

标签: python testing tox test-environments

目标:成功执行特定的tox命令,让它运行"只是"那个特定的匹配命令。

示例:tox -e py35-integration

tox应仅针对py35-integration和 not 运行,包括默认或独立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命令定义的内容。这不是正在发生的事情。相反,它会同时运行py27py27-integration

第二种方法

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

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

[testenv:integration]
commands = 
    flake8 {posargs}

现在,我在这里明确地隔离了一个" sub"环境有自己的命令来运行"整合"。

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

我试图避免将testenv结构重复为:[testenv:py27-integration][testenv:py35-integration],其中包含完全相同的定义(目标是尽量减少重复)。

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

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

1 个答案:

答案 0 :(得分:1)

[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}

如果您需要更改集成命令,请在一个位置更改它们:[integration]