PyTest автоматически обнаруживает тестовые функции и методы по определённым правилам именования и структуре. По умолчанию, он ищет:
Какие тесты запустятся, если запустить команду 'pytest' из корня проекта?
PyTest автоматически обнаруживает тестовые функции и методы по определённым правилам именования и структуре. По умолчанию, он ищет:
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Какие тесты запустятся, если запустить команду 'pytest' из корня проекта?
project/ ├── conftest.py ├── tests/ │ ├── check_api.py │ │ └── def test_get_users(): pass # (A) │ ├── test_ui_login.py │ │ ├── def test_button(): pass # (B) │ │ └── def check_label(): pass # (C) │ ├── web_test.py │ │ ├── def test_login_flow(): pass # (D) │ │ └── def logout_test(): pass # (E) │ └── integration/ │ └── test_db.py │ ├── class TestDatabase: │ │ └── def test_connect(): pass # (F) │ └── class DB_Helper: │ └── def test_ping(): pass # (G) ├── scripts/ │ └── test_cleaner.py │ └── def test_wipe_cache(): pass # (H) └── my_test_file.py └── def test_is_valid(): pass # (I)
Ответ
PyTest автоматически обнаруживает тестовые функции и методы по определённым правилам именования и структуре. По умолчанию, он ищет:
- Функции, имена которых начинаются с
test_. - Методы внутри классов, имена которых начинаются с
test_, при условии, что класс тоже начинается сTestи не наследуется отunittest.TestCase. - Файлы с именами, начинающимися с
test_или заканчивающимися на_test.py.
Таким образом, PyTest сканирует директории, находит такие файлы, импортирует их и запускает все функции и методы, соответствующие этим критериям. Это позволяет легко организовывать тесты без необходимости явно регистрировать их.
Пример:
# test_example.py
def test_sum():
assert sum([1, 2, 3]) == 6
class TestMath:
def test_multiply(self):
assert 2 * 3 == 6
При запуске pytest эти два теста будут обнаружены и выполнены.