Ответ
PyTest использует соглашения об именовании и мощный механизм автообнаружения тестов (test discovery).
Основные правила именования:
- Файлы: Тестовые файлы должны называться
test_*.pyили*_test.py. - Функции: Тестовые функции должны начинаться с
test_. - Классы: Тестовые классы должны начинаться с
Test(и не иметь метода__init__). Методы внутри таких классов, начинающиеся сtest_, также будут обнаружены.
Пример структуры каталога:
project/
├── src/
└── tests/
├── test_math_operations.py # Будет обнаружен
├── user_test.py # Будет обнаружен
└── helpers.py # Проигнорирован (не соответствует шаблону)
Содержимое test_math_operations.py:
# Обнаружена как тестовая функция
def test_addition():
assert 1 + 1 == 2
# Обнаружен как тестовый класс
class TestCalculator:
# Обнаружен как тестовый метод
def test_multiplication(self):
assert 2 * 3 == 6
# Игнорируется, так как не начинается с test_
def helper_method(self):
pass
Как управлять процессом обнаружения:
- Запуск из командной строки:
pytest— запустит все тесты в текущей директории и поддиректориях.pytest tests/— запустит тесты в конкретной директории.pytest test_file.py::test_function— запустит конкретный тест.
-
Использование маркеров: Декоратор
@pytest.markпозволяет помечать тесты для выборочного запуска.import pytest @pytest.mark.slow def test_long_operation(): ...Запуск:
pytest -m slow - Конфигурация: В файле
pytest.iniможно переопределить стандартные шаблоны именования.