pytest - это функции, которые выполняются перед или после тестовых функций для подготовки тестовой среды (например, создание подключения к БД, инициализация данных). Они обеспечивают переиспользуемость и организованность тестового кода. Фикстуры определяются с помощью декоратора @pytest.fixture.  В тестовой функции фикстура указывается как аргумент, и pytest автоматически вызывает её перед выполнением теста и передает результат (если есть) в тест.
Фикстуры в pytest - это функции, которые предоставляют тестовым функциям предопределённое состояние или данные, необходимые для их работы. Они позволяют централизованно управлять настройкой и очисткой тестового окружения, делая тесты более читаемыми, поддерживаемыми и переиспользуемыми.
Основные характеристики фикстур:
@pytest.fixture.pytest автоматически вызывает фикстуру перед выполнением теста и передаёт возвращаемое значение фикстуры в тестовую функцию.function (по умолчанию): Фикстура выполняется перед каждым тестом, который ее использует.class: Фикстура выполняется один раз для каждого класса, содержащего тесты, использующие её.module: Фикстура выполняется один раз для каждого модуля, содержащего тесты, использующие её.package: Фикстура выполняется один раз для каждого пакета, содержащего тесты, использующие её.session: Фикстура выполняется один раз для всей тестовой сессии.autouse=True, тогда она будет автоматически применена ко всем тестам в определенной области видимости (например, в модуле или классе), даже если они явно не запрашивают её.yield для выполнения кода после завершения теста, например, для освобождения ресурсов, закрытия соединений с базой данных и т.п. Код после yield называется teardown-кодом.Преимущества использования фикстур:
Пример:
import pytest
@pytest.fixture
def database_connection():
    # Setup: Connect to the database
    conn = connect_to_database()
    yield conn  # Provide the database connection to the test
    # Teardown: Close the connection after the test
    conn.close()
def test_data_insertion(database_connection):
    # Use the database connection to insert data
    insert_data(database_connection, data={"name": "Test"})
    # Assert that the data was inserted correctly
    assert query_data(database_connection, "name") == "Test"
    В этом примере database_connection - это фикстура, которая устанавливает соединение с базой данных перед каждым тестом, использующим её, и закрывает соединение после завершения теста.  Тестовая функция test_data_insertion принимает database_connection в качестве аргумента и использует его для взаимодействия с базой данных.