Sobes.tech
Назад к вопросам
Middle
8

Что такое фикстура в pytest? Какова область видимости (scope)? Можно ли вызвать фикстуру из фикстуры? Что такое autouse? Можно ли передать параметры в фикстуру?

Компании, где спрашивали
IT1

Ответ от нейросети

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 параметризована по разным значениям.