#python #pytest #code-coverage
#python #pytest #покрытие кода
Вопрос:
Я использую pytest и pytest-cov для покрытия кода.
Мой проект выглядит следующим образом. Есть два модуля services
и workers
.
python_tmp
├── tests
│ └── some_test.py
├── services
│ └── utils.py
└── workers
└── utils.py
Оба они имеют utils.py
inside. Но содержимое отличается.
services/utils.py
def function_1():
return 1
и workers/utils.py
def function_2():
return 2
В tests/some_test.py
вы можете найти тестовые примеры.
import pytest
import services.utils as t1
import workers.utils as t2
def test_function_1():
res = t1.function_1()
assert res == 1
def test_function_2():
res = t2.function_2()
assert res == 2
Если я запущу тест python -m pytest -v tests --cov=services --cov=workers --cov-report=xml:coverage.xml
, он сгенерирует следующий отчет. Но вы можете видеть, что сообщается только об одном utils.py
, и есть двусмысленность в том, что вы не знаете, к какому модулю он принадлежит.
...
<sources>
<source>/Users/xxxxxxx/workspace/tmp/python_tmp/services</source>
<source>/Users/xxxxxxx/workspace/tmp/python_tmp/workers</source>
</sources>
<packages>
<package branch-rate="0" complexity="0" line-rate="1" name=".">
<classes>
<class branch-rate="0" complexity="0" filename="utils.py" line-rate="1" name="utils.py">
<methods/>
<lines>
<line hits="1" number="1"/>
<line hits="1" number="2"/>
</lines>
</class>
</classes>
</package>
</packages>
</coverage>
Как это исправить? Спасибо за ваше время!
Ответ №1:
Эта проблема упоминается здесь
Итак, чтобы исправить это, вы можете запустить python -m pytest -v tests --cov --cov-report=xml:coverage.xml
.
Надеюсь, это поможет.
Комментарии:
1. Вероятно
--cov=.
, AFAIR для этого требуется значение.2. Я запустил его в своей системе для тестирования. Это работает нормально. (Не добавляйте знак ‘=’)
3. Я тоже запускал его в своей системе.
--cov
без аргумента действительно работает (я помню, что раньше это не работало), но также включаетpytest
и вставляет источники в отчет, что вряд ли желательно.4. Каково ваше предложение игнорировать папки, поскольку
--cov
оно будет включать все папки в текущем каталоге. Создать.coveragerc
файл и опустить его? Спасибо!5. Из ссылки, упомянутой в моем ответе, говорится, что эта ошибка не была воспроизведена в версии 2.2.0, но откат к такой старой версии приведет к другим ошибкам. Я думаю, лучшим вариантом будет модификация файла .coveragerc.