我很难找出结合以下内容的 Python 单元测试配置:
tox
环境tox
环境,以提高速度(一些正在测试的东西需要一段时间才能运行)我试过使用像下面这样的
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
,我也看到了上述竞争条件的发生。
谢谢。
可以设置环境依赖。请参阅 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