Как 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.
🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!
Подписаться