Ответ 1
Используйте --cov {envsitepackagesdir}/<your-package-name>
в tox.ini.
У меня странные проблемы с tox
, py.test
, coverage
и pytest-cov
: когда py.test
с --cov
вариантом запуском от tox
, кажется, требует __init__.py
файла в tests
папке, которая не сразу очевидно.
При написании этого поста я вроде как решил начальную проблему, добавив вышеупомянутые tests/__init__.py
, но на данный момент я не до конца понимаю, почему именно это работает или не работает, поэтому я все еще спрашиваю Помогите. Детали смотрите ниже.
Я нашел связанный вопрос по SO, но это только делает его более запутанным, потому что ответ кажется противоположным тому, что я до сих пор выяснил: файлы 'py.test' и '__init__.py'
Смотрите также официальные документы здесь: py.test - Good Integration Practices (самая нижняя часть страницы).
Упрощенная структура проекта:
setup.py
tox.ini
.coveragerc
project/
__init__.py
module1.py
module2.py
tests/
__init__.py (optional, an empty file)
test_module1.py
test_module2.py
Соответствующая часть tox.ini
:
[testenv:check]
commands = py.test --cov=project --cov-report=term
deps =
pytest
coverage
pytest-cov
[pytest]
python_files = test_*.py
norecursedirs = .tox
Соответствующая часть .coveragerc
:
[run]
branch = True
omit = project/tests/*
Теперь результаты:
py.test --cov=project --cov-report=term
выполнения из корня проекта => правильное покрытие независимо от того, tests/__init__.py
файл tests/__init__.py
или нет.tox -e check
без tests/__init__.py
=> тесты обнаружены и запущены, но я получаю предупреждение "Coverage.py предупреждение: данные не были собраны". и охват составляет 0% для всех модулейtox -e check
с помощью tests/__init__.py
=> снова исправьте покрытие. Для меня не сразу очевидно, почему файл tests/__init__.py
должен быть там (добавление этого пустого файла решило начальную проблему) для запуска tox
, но это не имеет значения, когда вы запускаете тесты/покрытие вручную. Есть идеи?
Используйте --cov {envsitepackagesdir}/<your-package-name>
в tox.ini.
Смотрите: Использование py.test с покрытием не включает импорт
Я избавился от использования pytest-cov
и сразу же pytest-cov
coverage
..
Также заметил, что с pytest
мне нужно было пустое __init__.py
в моей тестовой директории для правильной работы. Вероятно, для этого есть причина.
Я понимаю, что это пара лет, но в случае, если кто-то еще сталкивается с этим..
Другой вариант с tox заключается в установке PYTHONPATH
в tox.ini
:
[testenv]
setenv =
PYTHONPATH = {toxinidir}
commands =
pytest --cov=<your package>
- codecov