← Назад ко всем вопросам

Как измерять покрытие тестами (pytest-cov) и что это реально показывает?

1️⃣ Как кратко ответить

Покрытие тестами измеряется с помощью инструмента pytest-cov, который интегрируется с pytest для оценки того, какая часть кода была выполнена во время тестирования. Это показывает процент строк кода, которые были выполнены, помогая выявить не протестированные участки и улучшить качество тестирования.

2️⃣ Подробное объяснение темы

Покрытие тестами — это метрика, которая показывает, какая часть вашего кода была выполнена во время тестирования. Это важно для понимания того, насколько полно ваши тесты проверяют функциональность приложения. Инструмент pytest-cov позволяет измерять это покрытие в Python-проектах, используя pytest.

Зачем это нужно?

Покрытие тестами помогает:

  • Определить не протестированные участки кода.
  • Улучшить качество тестов, добавляя недостающие тесты.
  • Убедиться, что изменения в коде не нарушают существующую функциональность.
  • Повысить уверенность в стабильности и надежности кода.

Как это работает?

Pytest-cov — это плагин для pytest, который использует библиотеку coverage.py для измерения покрытия. Он отслеживает, какие строки кода были выполнены во время тестов, и генерирует отчет о покрытии.

Установка и использование

  1. Установка pytest-cov:

    Установите плагин с помощью pip:

    pip install pytest-cov
    
  2. Запуск тестов с измерением покрытия:

    Используйте команду pytest с параметром --cov, указывая модуль или пакет, который вы хотите проверить:

    pytest --cov=my_package tests/
    
    • --cov=my_package: указывает, что нужно измерять покрытие для пакета my_package.
    • tests/: директория, содержащая тесты.
  3. Генерация отчета о покрытии:

    Pytest-cov может генерировать различные типы отчетов, например, в виде HTML:

    pytest --cov=my_package --cov-report=html tests/
    
    • --cov-report=html: генерирует отчет в формате HTML, который можно открыть в браузере для визуального анализа.

Пример использования

Предположим, у вас есть простой модуль calculator.py:

def add(a, b):
    return a + b
​
def subtract(a, b):
    return a - b

И тесты для него в test_calculator.py:

from calculator import add, subtract
​
def test_add():
    assert add(2, 3) == 5
​
def test_subtract():
    assert subtract(5, 3) == 2

Запустив pytest с pytest-cov, вы получите отчет о том, что 100% строк кода были выполнены, так как все функции были вызваны в тестах.

Что показывает покрытие?

Покрытие тестами показывает процент строк кода, которые были выполнены во время тестов. Однако, важно понимать, что 100% покрытие не гарантирует отсутствие ошибок. Оно лишь указывает на то, что все части кода были выполнены, но не обязательно протестированы на все возможные сценарии.

Тема: PyTest
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки