Как правильно использовать cover.py в Python?
Я только начал использовать модуль Coverage.py и решил сделать простой тест, чтобы проверить, как он работает.
Sample.py
def sum(num1, num2): return num1 + num2 def sum_only_positive(num1, num2): if num1 > 0 and num2 > 0: return num1 + num2 else: return None
test.py
from sample import sum, sum_only_positive def test_sum(): assert sum(5, 5) == 10 def test_sum_positive_ok(): assert sum_only_positive(2, 2) == 4 def test_sum_positive_fail(): assert sum_only_positive(-1, 2) is None
Как вы видите, весь мой код покрыт тестами, и py.test говорит, что все они проходят. Я ожидаю, что Coverage.py покажет 100% -ный охват. Ну нет.
Ну, Coverage.py может не увидеть файл test.py, поэтому я скопировал тестовые функции в файл sample.py
и снова запустил Coverage:
Затем я добавил этот блок кода:
if __name__ == "__main__": print(sum(2, 4)) print(sum_only_positive(2, 4)) print(sum_only_positive(-1, 3))
и удалили все тестовые функции. После этого Coverage.py показывает 100%:
Почему это так? Не следует ли Coverage.py показывать покрытие кода, а не только покрытие выполнения? Я прочитал официальный FAQ для Coverage.py, но не могу найти решение.
Поскольку многие пользователи SO знакомы с проверкой кода и охватом кода, я надеюсь, вы можете мне сказать, где я ошибаюсь.
У меня есть только одна мысль здесь: Coverage.py может просто наблюдать, какие строки кода не выполняются, поэтому я должен писать тесты для этих строк. Но есть строки, которые уже выполняются, но не покрываются тестами, поэтому Coverage.py не работает.
- Как интерпретировать результаты покрытия Python coverage.py?
- как узнать, работают ли мои тесты Python в режиме покрытия?
- Покрытие кода с помощью сервера отладки django
- Пакет тестирования Python
- Как настроить средство проверки покрытия PyCharm для распознавания .coveragerc?
Coverage ищет файл .coverage для чтения и создания этого отчета для вас. Py.test сам по себе не создает. Вам нужен плагин py.test для покрытия:
pip install pytest-cov
Если у вас уже есть это, вы можете запустить оба сразу:
py.test test.py --cov=sample.py
Это означает, что тестовый модуль test.py
и отчет о sample.py
записи / отображения на sample.py
.
Если вам нужно иметь несколько тестовых прогонов и накапливать записанный охват, а затем отображать окончательный отчет, вы можете запустить его следующим образом:
py.test test.py --cov=sample.py --cov-report= py.test test.py --cov=sample2.py --cov-report= py.test test.py --cov=sample3.py --cov-report=
Это означает, что тестовый модуль test.py
и записывает (только) покрытие на sample.py
– не отображает отчет.
Теперь вы можете запустить команду покрытия отдельно для полного отчета:
coverage report -m
Вышеприведенная команда просто отображает отформатированный отчет о покрытии на основе накопленного файла данных .coverage из предыдущих тестовых прогонов. -m
означает пропущенные линии шоу, т.е. строки, не охватываемые тестами:
Name Stmts Miss Cover Missing ----------------------------------------- sample.py 6 0 100%
Coverage поддерживает больше таких переключателей, как --omit
и --omit
для включения / исключения файлов с использованием шаблонов путей. Для получения дополнительной информации ознакомьтесь со своими документами: http://coverage.readthedocs.org/en/coverage-4.0.3/cmd.html#reporting
Трудно разобрать ваши эксперименты, и вы не включили командные строки, которые вы использовали в каждом эксперименте. Но: если вы запускаете тесты с помощью:
python -m py.test test.py
то вы можете запустить их с помощью функции cover.py с помощью:
coverage run -m py.test test.py
- Воздушный поток: как SSH и запустить BashOperator с другого сервера
- Python: String кластеризация с dbscan scikit-learn, использующая расстояние Левенштейна как показатель:
- Исключая абстрактные свойства отчетов об охвате
- django-jenkins – не генерирует никакого отчета о покрытии .xml для django -restframework
- Почему не были проверены файлы Python с помощью cover.py?
- Python unittest: как удовлетворить покрытие носа для импорта пакетов
- Группировка результатов теста с использованием покрытия Python
- Создание py.test, покрытие и ток работают вместе: __init__.py в папке тестов?
- Охват носа Django против теста manage.py дает разные результаты, зависящие от CLI.
- Как я могу получить данные о покрытии кода из функциональных тестов Python BDD с помощью Behave?
- Поиск неиспользуемого кода Django для удаления