Coverage python как использовать
Перейти к содержимому

Coverage python как использовать

  • автор:

Как использовать Coverage в Django

Когда вы разрабатываете большой проект, случайно можно забыть некоторые части кода, которые нужно протестировать. Coverage.py — это инструмент на python, который поможет вам в этом.

Установка

Используйте pip или easy_install, как вам по душе

pip install coverage
Запуск и удаление

Для запуска в проекте Django используйте команду:

overage run --source='.' manage.py test the-app-you-want-to-test

Эта команда заполнит «.coverage», который расположен в COVERAGE_FILE, а затем вы можете увидеть результаты или отчет. Если вам нужно удалить полученные данные, воспользуйтесь командой:

coverage erase
Для одного файла

Если вы хотите проверить только код Python, то вам необходимо сделать:

coverage run your_program.py arg1 arg2 arg3

Есть несколько дополнительных опций, которые вы можете посмотреть по ссылке .
О шаблонах можно узнать в разделе плагинов .

Просмотр результата

Если вы хотите вывести результаты в командной строке:

coverage report

Для более понятных и удобных отчетов:

coverage html

Чтобы точно знать, какая часть вашего кода покрыта тестами, используйте следующую команду:

coverage annotate -d directory-where-to-put-annotated-files

Программа сгенерирует тот же файл исходного кода с дополнительным синтаксисом:

- Строка с «>» означает, что она была выполнена.

- Строка, начинающаяся с «!», Означает, что она не была выполнена.

- Строка, начинающаяся с «-» означает, что строка была исключена из статистики покрытия.

Хороший уровень покрытия

Хорошее покрытие обычно приходится на 90%. Однако, если результат 100%, это может быть плохим сигналом, так как, возможно, дело с покрытием, а не с качеством тестов. Несколько советов:

- Будьте осторожны с качеством ваших тестов.

- Не замедляйте скорости своего разработчика ради покрытия.

- Используйте покрытие, чтобы найти непроверенный код и решить, заслуживает ли он покрытия.

Исключаем код

Иногда нам нужно исключить некоторый код, который не нуждается в покрытии. Существует несколько вариантов:

- Указание файлов для исключения и пропуска в .coveragerc.

- Написание в одной строке блока комментария.

 
# pragma: no cover

Например, если вы хотите исключить сгенерированный код из покрытия, потому что он должен поддерживаться инструментом генерации:

def generated_code(): # pragma: no cover do_something()

Рекомендуем хостинг TIMEWEB

Рекомендуем хостинг TIMEWEB

Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

По статье задано0 вопрос(ов)
Подписка на обсуждение 2
Подписка на раздел 176

Вам это нравится? Поделитесь в социальных сетях!

Покрытие кода тестами — Python: Автоматическое тестирование

С ростом проекта становится сложно определить, какой код уже протестирован, а какой — еще нет. При этом подобная потребность возникает регулярно. Обычно это происходит тогда, когда не все члены команды ответственно подходят к написанию тестов. В таком случае может страдать качество проекта.

Но есть решение — протестированность кода можно измерить. В этом уроке мы познакомимся с метрикой, которая помогает подсчитать количество тестов и качество тестирования.

Как работает покрытие тестами

В тестировании часто используют метрику code coverage — это покрытие кода тестами. Покрытие анализируется тестовыми фреймворками, которые считают отношения строчек, задействованных в тестах, ко всем строчкам исходного кода.

Например, если в коде есть условная конструкция, не проверенная тестами, то все строки кода в этой конструкции будут не покрытыми.

В Pytest покрытие измеряется крайне просто. Достаточно установить одну зависимость и запустить тесты с правильным флагом:

--cov # Примерный вывод tests/test_example.py .. [ 66%] tests/test_hexlet_pytest.py . [100%] Name Stmts Miss Cover ----------------------------------------------- hexlet_pytest/__init__.py 1 0 100% hexlet_pytest/example.py 4 1 75% ----------------------------------------------- TOTAL 5 1 80% 

После всех тестов Pytest выводит сводную таблицу по каждому файлу. В ней показан процент покрытия кода тестами.

В примере выше видно, что в файле _init_.py покрыто 100% кода, а вот в файле example.py — только 75%. При этом общее покрытие кода 80%.

Обратите внимание, что покрытие сильно зависит от того, какие тесты выполнились. Если часть тестов упало с ошибкой, то Pytest покажет намного меньшее покрытие — тесты просто не доберутся до всего кода. Поэтому покрытие измеряют только тогда, когда все тесты зеленые.

Эта статистика помогает найти места, где тестов мало. Дальше по ситуации их можно добавлять. Если в проекте тестов не было вообще, то эта статистика начинает быстро расти. А вот дальше, ближе к 90 процентам, придется бороться за каждую строчку кода.

Каким должно быть покрытие

Само по себе покрытие не гарантирует, что код работает правильно во всех ситуациях. Логические ошибки в коде невозможно отследить только покрытием. Для этого нужны тесты на одну и ту же функциональность, но с разным набором данных.

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Coverage.py

Coverage.py is a tool for measuring code coverage of Python programs. It monitors your program, noting which parts of the code have been executed, then analyzes the source to identify code that could have been executed but was not.

Coverage measurement is typically used to gauge the effectiveness of tests. It can show which parts of your code are being exercised by tests, and which are not.

The latest version is coverage.py 7.3.2, released October 2, 2023. It is supported on:

  • Python versions 3.8 through 3.12.
  • PyPy3 versions 3.8 through 3.10.

For Enterprise

Available as part of the Tidelift Subscription.
Coverage and thousands of other packages are working with Tidelift to deliver one enterprise subscription that covers all of the open source you use. If you want the flexibility of open source and the confidence of commercial-grade software, this is for you. Learn more.

Quick start

Getting started is easy:

$ python3 -m pip install coverage

Tip If your test runner command starts with “python”, just replace the initial “python” with “coverage run”. python something.py becomes coverage run something.py python -m amodule becomes coverage run -m amodule

Other instructions for specific test runners:

  • pytest
  • unittest
  • nosetest

If you usually use:

$ pytest arg1 arg2 arg3

then you can run your tests under coverage with:

$ coverage run -m pytest arg1 arg2 arg3

Many people choose to use the pytest-cov plugin, but for most purposes, it is unnecessary.

Change “python” to “coverage run”, so this:

$ python3 -m unittest discover
$ coverage run -m unittest discover

Nose has been unmaintained since at least 2015. You should seriously consider using a different test runner.

$ nosetests arg1 arg2
$ coverage run -m nose arg1 arg2

To limit coverage measurement to code in the current directory, and also find files that weren’t executed at all, add the --source=. argument to your coverage command line.

$ coverage report -m Name Stmts Miss Cover Missing ------------------------------------------------------- my_program.py 20 4 80% 33-35, 39 my_other_module.py 56 6 89% 17-23 ------------------------------------------------------- TOTAL 76 10 87%
$ coverage html

Capabilities

Coverage.py can do a number of things:

  • By default it will measure line (statement) coverage.
  • It can also measure branch coverage .
  • It can tell you what tests ran which lines .
  • It can produce reports in a number of formats: text , HTML , XML , LCOV , and JSON .
  • For advanced uses, there’s an API , and the result data is available in a SQLite database .

Using coverage.py

There are a few different ways to use coverage.py. The simplest is the command line , which lets you run your program and see the results. If you need more control over how your project is measured, you can use the API .

Some test runners provide coverage integration to make it easy to use coverage.py while running tests. For example, pytest has the pytest-cov plugin.

You can fine-tune coverage.py’s view of your code by directing it to ignore parts that you know aren’t interesting. See Specifying source files and Excluding code from coverage.py for details.

Getting help

If the FAQ doesn’t answer your question, you can discuss coverage.py or get help using it on the Python discussion forums. If you ping me ( @nedbat ), there’s a higher chance I’ll see the post.

Bug reports are gladly accepted at the GitHub issue tracker. GitHub also hosts the code repository.

Professional support for coverage.py is available as part of the Tidelift Subscription.

I can be reached in a number of ways. I’m happy to answer questions about using coverage.py.

For news and other chatter, follow the project on Mastodon: @coveragepy@hachyderm.io.

More information

  • Installation
  • For enterprise
  • Command line usage
  • Configuration reference
  • Specifying source files
  • Excluding code from coverage.py
  • Branch coverage measurement
  • Measuring sub-processes
  • Measurement contexts
  • Coverage.py API
  • How coverage.py works
  • Plug-ins
  • Contributing to coverage.py
  • Things that cause trouble
  • FAQ and other help
  • Change history
  • Migrating between versions
  • Sleepy Snake

© Copyright 2009–2023, Ned Batchelder. Revision 2a3bb838 .

Как узнать процент покрытия кода тестами?

Использую для тестов unittest. Запускаю через pytest. Каким способом можно узнать процент покрытия кода тестами? Вроде как-то coverage.py можно использовать?

Отслеживать
12.9k 10 10 золотых знаков 40 40 серебряных знаков 76 76 бронзовых знаков
задан 30 ноя 2019 в 14:55
744 6 6 серебряных знаков 19 19 бронзовых знаков

Либо pip install coverage и coverage run pytest && coverage report -m , либо pytest-cov , как в ответе.

30 ноя 2019 в 21:44

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Нужно установить плагин pytest-cov для pytest ( pip install pytest-cov ), при запуске pytest добавить ключ --cov=proj (где proj - имя директории, для файлов которой будет считаться покрытие).

После выполнения тестов создастся файл .coverage с информацией по покрытию. Также можно генерировать отчеты по покрытию, например, в виде html и других форматах (см. pytest-cov - Reporting)

Отслеживать
ответ дан 30 ноя 2019 в 15:11
47.5k 17 17 золотых знаков 56 56 серебряных знаков 99 99 бронзовых знаков

  • python
  • юнит-тесты
  • pytest
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *