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

Как PyTest понимает, какие тесты нужно запустить

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

PyTest определяет, какие тесты запускать, основываясь на соглашениях об именовании файлов и функций, а также на параметрах командной строки. По умолчанию он ищет файлы, начинающиеся с test_ или заканчивающиеся на _test.py, и функции, начинающиеся с test_. Также можно указать конкретные тесты или директории для запуска через командную строку.

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

PyTest — это популярный фреймворк для тестирования в Python, который автоматически обнаруживает и запускает тесты. Чтобы понять, как PyTest определяет, какие тесты запускать, нужно рассмотреть несколько ключевых аспектов.

Соглашения об именовании

PyTest использует соглашения об именовании для автоматического обнаружения тестов:

  • Файлы: PyTest ищет файлы, которые начинаются с test_ или заканчиваются на _test.py. Например, test_example.py или example_test.py.
  • Функции: Внутри этих файлов PyTest ищет функции, которые начинаются с test_. Например, def test_addition():.

Директории

PyTest рекурсивно обходит директории, начиная с текущей рабочей директории, если не указано иное. Это означает, что он будет искать тестовые файлы и функции во всех поддиректориях.

Параметры командной строки

PyTest позволяет запускать тесты из определенных файлов, модулей или даже отдельных тестов с помощью параметров командной строки. Например:

  • Запуск всех тестов в определенном файле:

    pytest test_example.py
    
  • Запуск конкретного теста в файле:

    pytest test_example.py::test_addition
    
  • Запуск тестов в определенной директории:

    pytest tests/
    

Маркеры и фильтры

PyTest поддерживает использование маркеров для группировки и фильтрации тестов. Например, можно пометить тесты как @pytest.mark.slow и запускать только их:

import pytest
​
@pytest.mark.slow
def test_slow_function():
    pass

Запуск только тестов с маркером slow:

pytest -m slow

Конфигурационные файлы

PyTest также может использовать конфигурационные файлы, такие как pytest.ini, tox.ini или setup.cfg, для настройки поведения тестов. В этих файлах можно указать, какие тесты исключать, какие плагины использовать и другие параметры.

Пример кода

Рассмотрим пример файла с тестами:

# test_math_operations.py
​
def test_addition():
    assert 1 + 1 == 2
​
def test_subtraction():
    assert 2 - 1 == 1
​
def not_a_test():
    assert 1 == 1
  • test_addition и test_subtraction будут обнаружены и запущены PyTest, так как они следуют соглашению об именовании.
  • not_a_test не будет запущена, так как ее имя не начинается с test_.

Запуск всех тестов в файле:

pytest test_math_operations.py

PyTest автоматически обнаружит и выполнит test_addition и test_subtraction, игнорируя not_a_test.

Таким образом, PyTest использует комбинацию соглашений об именовании, параметров командной строки, маркеров и конфигурационных файлов для определения, какие тесты запускать. Это делает его гибким и мощным инструментом для автоматизации тестирования в Python.

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

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

Твои заметки