首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >运行多个与名称片段匹配的testenv

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

Stack Overflow用户
提问于 2022-02-02 12:15:04
回答 1查看 123关注 0票数 0

基本原理

对于复杂的依赖矩阵,tox testenv名称模式最终成为如下所示的列表

代码语言:javascript
复制
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语法允许使用名称片段配置许多东西,例如

代码语言:javascript
复制
[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

我发现在运行与名称片段匹配的所有testenv(如tox -e py39tox -e framework2 )时,无法告诉tox。

问题

主要的缺点是,大多数CI测试作业最终都会被python版本隔离,所以您最终编写的指令如下

代码语言:javascript
复制
tox -e $PY-pytest5-framework1,$PY-pytest5-framework2,$PY-pytest6-framework1,$PY-pytest6-framework2

但是,CI作业定义耦合到毒物检验矩阵,因为它必须知道:

  • 被添加或删除的testenv
  • 矩阵排除(如pytest-5 )与python-3.10不兼容

这是很难维护的。

不完全解决办法

一个简单的解决方法就是简单地运行tox --skip-missing-interpreters,但缺点是:

  • CI作业不能按框架版本而不是python版本隔离,例如重用一些特殊的框架缓存。
  • CI VM可以在每个作业的目标之外安装系统python,因此您可以在所有CI作业中运行python-3.8。

问题

我是不是缺少了一些开箱即用的机制来过滤要运行的testenv,这个片段使我能够编写与毒性依赖矩阵无关的CI作业?我指的是像tox -e '*-framework2'这样的东西。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-02 12:46:53

您可以将TOX_SKIP_ENV的regex模式否定如下:

代码语言:javascript
复制
$ env TOX_SKIP_ENV='.*[^-framework2]$' tox

tox4将在未来几个月内推出,它引入了标签。虽然这可能不是对您的问题的直接帮助,但也许您可以找到一种简化tox.ini的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70955457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档