运行 匹配名称片段的多个 tox testenv

Running multiple tox testenv matching a name fragment

理由

对于复杂的依赖矩阵,tox testenv 名称模式最终会成为一个列表,如

py37-pytest5-framework1
py37-pytest5-framework2
py37-pytest6-framework1
py37-pytest6-framework2
py38-pytest5-framework1
py38-pytest5-framework2
py38-pytest6-framework1
py38-pytest6-framework2
...
py310-pytest6-framework2

虽然内部 tox.ini 语法允许使用名称片段配置很多东西,例如

[testenv]
basepython =
    py37: python3.7
    py38: python3.8
    py39: python3.9
    py310: python3.10
deps =
    pytest5: pytest ~= 5.0
    pytest6: pytest ~= 6.0
    framework1: framework ~= 1.0
    framework2: framework ~= 2.0
setenv =
    framework2: FOO=bar

我发现在 运行 中无法告诉 tox CLI 匹配名称片段的所有测试环境,如 tox -e py39tox -e framework2.

问题

主要缺点是大多数 CI 测试作业最终会被 python 版本隔离,因此您最终会编写像

这样的指令
tox -e $PY-pytest5-framework1,$PY-pytest5-framework2,$PY-pytest6-framework1,$PY-pytest6-framework2

但是 CI 工作定义与 tox 测试矩阵耦合,因为它必须知道:

而且维护起来很麻烦。

不完整的解决方法

简单易行的解决方法是运行宁tox --skip-missing-interpreters,但缺点是:

问题

我是否缺少一些开箱即用的机制来过滤 testenvs 运行,其中的片段使我能够编写 CI 与 tox 依赖矩阵无关的作业?我的意思是 tox -e '*-framework2'.

我是否必须使用 shell 技巧过滤和聚合 tox --listenvs 的输出?

您可以取消 TOX_SKIP_ENV 的正则表达式模式,如下所示:

$ env TOX_SKIP_ENV='.*[^-framework2]$' tox

tox4,将在接下来的几个月内引入,引入labels。虽然这可能无法立即解决您的问题,但也许您找到了一种简化 tox.ini.

的方法