tox множественные тесты, повторное использование среды tox

Можно ли сделать следующее, используя виртуальную среду с одним током?

[tox]
envlist = test, pylint, flake8, mypy
skipsdist = true

[testenv:lint]
deps = pylint
commands = pylint .

[testenv:flake8]
deps = flake8
commands = flake8 .

[testenv:mypy]
commands = mypy . --strict

[testenv:test]
deps = pytest
commands = pytest


Поскольку я тестирую только свою версию python (py3.7), я не хочу, чтобы tox создавал 4 среды (.tox/test, _3 _, _ 4_, .tox/mypy), когда все они могут быть запущены в одной среде.

Я также хочу видеть, что не удалось по отдельности, поэтому не делать:

[tox]
skipsdist = true

[testenv]
commands = pylint .
           flake8 .
           mypy . --strict
           pytest

так как вывод будет таким:

_____________ summary ___________
ERROR:   python: commands failed

а не так:

____________________summary _________________
ERROR:   test: commands failed
ERROR:   lint: commands failed
ERROR:   mypy: commands failed
  test: commands succeeded

person A H    schedule 26.07.2019    source источник


Ответы (2)


На ум приходят два подхода:

  1. Вы можете настроить их все на использование одного и того же envdir, так что при последовательном построении virtualenv для тестовых сред мало что нужно делать:
[testenv:lint]
envdir = {toxworkdir}/.work_env
deps = pylint
commands = pylint .

[testenv:flake8]
envdir = {toxworkdir}/.work_env
deps = flake8
commands = flake8 .

[testenv:mypy]
envdir = {toxworkdir}/.work_env
commands = mypy . --strict

[testenv:test]
envdir = {toxworkdir}/.work_env
deps = pytest
commands = pytest
  1. На самом деле это примерно то же самое, но с использованием генеративных имен и команд, зависящих от факторов, чтобы сделать его более кратким (поищите эти термины на странице документации по конфигурации tox для получения дополнительной информации). Он также устанавливает все депы заранее:
[testenv:{lint,flake8,mypy,test}]
envdir = {toxworkdir}/.work_env
deps = pylint, flake8, pytest
commands =
    lint: pylint .
    flake8: flake8 .
    mypy: mypy . --strict
    test: pytest
person mikenerone    schedule 25.09.2020

tox останавливается при первой неудачной команде. Поэтому я рекомендую упорядочить команды от самых быстрых к самым медленным и позволить tox сделать все остальное:

[testenv]
commands =
    flake8 .
    pylint .
    mypy . --strict
    pytest
person phd    schedule 26.07.2019