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
в качестве аргумента и использует его для взаимодействия с базой данных.