Каким образом PyTest определяет, какие тестовые функции или случаи следует выполнить в процессе тестирования?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
PyTest находит тесты по соглашениям об именовании и по структуре файлов, а затем собирает их в набор для запуска. Обычно он ищет файлы, классы и функции с тестовыми именами, а также учитывает маркеры, параметры и явные ограничения через команды запуска. В итоге выполняются только те тесты, которые попали в collection и не были исключены фильтрами.
Определение:
PyTest определяет, что запускать, через этап collection — он проходит по файловой системе, импортирует подходящие модули и ищет тестовые сущности по правилам. По умолчанию это файлы вида test_*.py или *_test.py, функции и методы с префиксом test_, а также классы с именем, начинающимся на Test и не имеющие собственного __init__. Дополнительно выбор можно сузить через -k, -m, путь к файлу/каталогу и параметры параметризованных тестов.
Пример использования:
import pytest
def test_sum():
assert 1 + 1 == 2
@pytest.mark.smoke
def test_login():
assert True
@pytest.mark.parametrize("a,b,result", [
(1, 2, 3),
(2, 2, 4),
])
def test_addition(a, b, result):
assert a + b == result
Запуск:
pytest
pytest -k "login or sum"
pytest -m smoke
pytest tests/test_math.py
Пояснение кода:
Код показывает три разных случая, которые PyTest сможет собрать автоматически.
test_sum и test_login будут найдены по префиксу test_.
test_login дополнительно помечен маркером smoke, поэтому его можно запускать выборочно через -m smoke.
test_addition будет выполнен несколько раз, потому что parametrize создает отдельный тест-кейс на каждую строку данных.
При запуске pytest -k "login or sum" PyTest отфильтрует тесты по имени, а pytest tests/test_math.py ограничит поиск конкретным файлом.
Ключевые моменты:
- PyTest сначала делает collection, а уже потом выполняет найденные тесты.
- По умолчанию он ориентируется на имена файлов, функций, методов и классов.
- Параметризованные тесты превращаются в несколько отдельных случаев.
- Маркеры
-mи выражение-kпозволяют гибко отбирать нужные тесты. - Можно запускать тесты по конкретному пути, файлу, классу или функции.
- Если тест не соответствует соглашениям PyTest, он просто не попадет в сборку.