Was ist eine Fixture in pytest? Was ist der Gültigkeitsbereich (Scope)? Kann man eine Fixture aus einer anderen Fixture aufrufen? Was ist autouse? Kann man Parameter an eine Fixture übergeben?
Antwort von AI
sobes.tech KI
В 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 параметризована по разным значениям.