Что такое фикстура в pytest? Какова область видимости (scope)? Можно ли вызвать фикстуру из фикстуры? Что такое autouse? Можно ли передать параметры в фикстуру?
Ответ от нейросети
sobes.tech AI
В pytest фикстура — это функция, которая подготавливает тестовое окружение или данные, необходимые для тестов. Она может создавать объекты, настраивать состояние, выполнять подготовительные действия и освобождать ресурсы после теста.
Область видимости (scope) фикстуры определяет, как часто она вызывается:
- function (по умолчанию) — фикстура вызывается для каждого теста.
- class — фикстура вызывается один раз на класс тестов.
- module — один раз на модуль (файл с тестами).
- package — один раз на пакет.
- session — один раз за всю сессию запуска тестов.
Да, фикстуру можно вызвать из другой фикстуры, просто указав её имя в параметрах функции. Это позволяет строить цепочки зависимостей.
Параметр autouse=True в декораторе @pytest.fixture означает, что фикстура будет автоматически применяться ко всем тестам в области видимости, без явного указания в параметрах теста.
В pytest можно передавать параметры в фикстуру через параметризацию с помощью @pytest.mark.parametrize или используя request.param в самой фикстуре при параметризации. Это позволяет запускать тесты с разными наборами данных.
Пример фикстуры с параметризацией и вызовом другой фикстуры:
import pytest
@pytest.fixture(scope='module')
def db_connection():
conn = create_db_connection()
yield conn
conn.close()
@pytest.fixture(params=["user1", "user2"])
def user(db_connection, request):
return db_connection.get_user(request.param)
def test_user_access(user):
assert user.has_access()
Здесь user зависит от db_connection, а сама user параметризована по разным значениям.