Python 测试 - 具有并行运行和覆盖率报告的多个“tox”环境

问题描述 投票:0回答:1

我很难找出结合以下内容的 Python 单元测试配置:

  1. 多个环境(指定例如 python 或依赖包的版本)作为
    tox
    环境
  2. 并行运行
    tox
    环境,以提高速度(一些正在测试的东西需要一段时间才能运行)
  3. 测试覆盖率报告

我试过使用像下面这样的

tox.ini
文件(然后用
python -m tox --parallel=auto
运行它),但我不知道如何在最后而不是在每个环境中执行
combine
步骤:

[tox]
envlist = py{38,39}-more_itertools{812,813,814}

[testenv]
deps = pytest
       coverage
       more_itertools812: more_itertools>=8.12,<8.13
       more_itertools813: more_itertools>=8.13,<8.14
       more_itertools814: more_itertools>=8.14,<8.15
commands = python -m coverage run --parallel -m pytest
           python -m coverage combine
           python -m coverage xml
           python -m coverage html

如果我不在

--parallel
部分使用
commands
,所有环境都会尝试写入同一个
.coverage
文件,它们会遇到各种竞争条件,导致死亡。 (我为此开了一张票。)

如果可能的话,我试图避免在运行

tox
后需要进行后处理的解决方案。不确定这是否可能。

我需要同时支持

pytest
unittest
的测试套件,FWIW。不确定这是否排除了使用
pytest-cov
的可能性,但是如果我在我的
commands = python -m pytest --cov=.
中使用
tox.ini
,我也看到了上述竞争条件的发生。

谢谢。

python unit-testing parallel-processing coverage.py
1个回答
0
投票

可以设置环境依赖。请参阅 pytest-cov 文档中的示例:https://pytest-cov.readthedocs.io/en/latest/tox.html

[tox]
envlist = 
    clean
    py{38,39}-more_itertools{812,813,814}
    report

[testenv]
...
commands = python -m coverage run --parallel -m pytest
depends =
    clean: py{38,39}-more_itertools{812,813,814}
    py{38,39}-more_itertools{812,813,814}: report

[testenv:clean]
deps = coverage
skip_install = true
commands = -coverage erase

[testenv:report]
deps = coverage
skip_install = true
commands =
    -coverage combine
    -coverage report
    -coverage html
© www.soinside.com 2019 - 2024. All rights reserved.