Я не могу получить coverage.py
, чтобы правильно измерить покрытие кода для моего пакета Python. Что бы я ни пробовал, я получаю покрытие только для кода, запущенного во время импорта, т.е. package/__init__.py
и кода, вызываемого оттуда, и 0% покрытия для всего кода, вызываемого во время выполнения тестов. Пакет устанавливается как редактируемая установка с pip install -e .
внутри контейнера Docker.
Если я разделю проект, чтобы создать минимальный пример, проблема исчезнет, что означает, что это должно быть вызвано что-то конкретное c в реальном проекте, но, к сожалению, я не могу поделиться фактическим кодом (связанным с работой).
У меня закончились идеи, что попробовать (см. попытки исправления ниже). В чем может быть проблема?
Общая структура проекта
/app/
setup.py
package/
__init__.py
module1.py
...
tests/
__init__.py
conftest.py
test1.py
...
Информация о версии
- Python: 3.7.2 внутри контейнера Docker на основе
python:3.7-slim
- pytest: 6.0.1
- pytest-cov: 2.10.0
- покрытие: 5.2.1
Вещи, которые у меня есть пробовал
- Проверка пути к коду, запущенному в моих тестах через
inspect.getsourcefile(func)
, чтобы убедиться, что используется правильный исходный файл, а не установленная копия где-то еще - Запуск теста / покрытия команды либо через плагин
pytest-cov
, либо напрямую с помощью coverage run --source package -m pytest tests/ && coverage report
- Запуск из разных каталогов, например
/app/
, /app/tests/
и /
- Настройка
PYTHONPATH="."
- Перемещение каталога
package
в отдельный каталог src
, как рекомендовано в документации Pytest - Удаление импорта из
conftest.py
, чтобы избежать импорта до начала анализа покрытия - Импорт кода пакета внутри тестов, а не на уровне тестового модуля
- Переход на более раннюю версию
coverage.py
к более ранней версии