运行 匹配名称片段的多个 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 py39
或 tox -e framework2
.
问题
主要缺点是大多数 CI 测试作业最终会被 python 版本隔离,因此您最终会编写像
这样的指令
tox -e $PY-pytest5-framework1,$PY-pytest5-framework2,$PY-pytest6-framework1,$PY-pytest6-framework2
但是 CI 工作定义与 tox 测试矩阵耦合,因为它必须知道:
- 正在添加或删除测试环境
- pytest-5 之类的矩阵排除与 python-3.10
不兼容
而且维护起来很麻烦。
不完整的解决方法
简单易行的解决方法是运行宁tox --skip-missing-interpreters
,但缺点是:
- CI 作业不能按框架版本而不是 python 版本来分隔,例如重用一些特殊的框架缓存
- CI 虚拟机的特点是系统 python 安装超出了每个作业的目标,因此您可以得到例如python-3.8 在所有 CI 个职位中 运行。
问题
我是否缺少一些开箱即用的机制来过滤 testenvs 运行,其中的片段使我能够编写 CI 与 tox 依赖矩阵无关的作业?我的意思是 tox -e '*-framework2'
.
我是否必须使用 shell 技巧过滤和聚合 tox --listenvs
的输出?
您可以取消 TOX_SKIP_ENV
的正则表达式模式,如下所示:
$ env TOX_SKIP_ENV='.*[^-framework2]$' tox
tox4
,将在接下来的几个月内引入,引入labels。虽然这可能无法立即解决您的问题,但也许您找到了一种简化 tox.ini
.
的方法
理由
对于复杂的依赖矩阵,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 py39
或 tox -e framework2
.
问题
主要缺点是大多数 CI 测试作业最终会被 python 版本隔离,因此您最终会编写像
这样的指令tox -e $PY-pytest5-framework1,$PY-pytest5-framework2,$PY-pytest6-framework1,$PY-pytest6-framework2
但是 CI 工作定义与 tox 测试矩阵耦合,因为它必须知道:
- 正在添加或删除测试环境
- pytest-5 之类的矩阵排除与 python-3.10 不兼容
而且维护起来很麻烦。
不完整的解决方法
简单易行的解决方法是运行宁tox --skip-missing-interpreters
,但缺点是:
- CI 作业不能按框架版本而不是 python 版本来分隔,例如重用一些特殊的框架缓存
- CI 虚拟机的特点是系统 python 安装超出了每个作业的目标,因此您可以得到例如python-3.8 在所有 CI 个职位中 运行。
问题
我是否缺少一些开箱即用的机制来过滤 testenvs 运行,其中的片段使我能够编写 CI 与 tox 依赖矩阵无关的作业?我的意思是 tox -e '*-framework2'
.
我是否必须使用 shell 技巧过滤和聚合 tox --listenvs
的输出?
您可以取消 TOX_SKIP_ENV
的正则表达式模式,如下所示:
$ env TOX_SKIP_ENV='.*[^-framework2]$' tox
tox4
,将在接下来的几个月内引入,引入labels。虽然这可能无法立即解决您的问题,但也许您找到了一种简化 tox.ini
.