Fixtures
Fixtures — это функции, выполняемые pytest до (а иногда и после) фактических тестовых функций. Код в фикстуре может делать все, что вам необходимо. Вы можете использовать Fixtures, чтобы получить набор данных для тестирования. Вы можете использовать Fixtures, чтобы получить систему в известном состоянии перед запуском теста. Fixtures также используются для получения данных для нескольких тестов.
Example
Вот простой пример фикстуры, который возвращает число:
import pytest
@pytest.fixture()
def some_data():
"""Return answer to ultimate question."""
return 42
def test_some_data(some_data):
"""Use fixture return value in a test."""
assert some_data == 42
Фикстуры отлично подходят для хранения данных и передачи их в тесты!
Фикстуры в первую очередь ищутся в том же файле, что и сам тест, потом по всем conftest.py (это модуль, фикстуры из которого доступны всем тестам в том же каталоге, импортировать его не надо!).
Пример текстуры с подключением к db
Здесь используем Built-in фикстуру — tmpdir. Следовательно, фикстуры могут переиспользоваться.
import pytest
import tasks
from tasks import Task
@pytest.fixture()
def tasks_db(tmpdir):
"""Подключение к БД перед тестами, отключение после."""
# Setup : start db
tasks.start_tasks_db(str(tmpdir), 'tiny')
yield # здесь происходит тестирование
# Teardown : stop db
tasks.stop_tasks_db()
Параметры фикстур
Параметр Scope
Ниже приведено краткое описание каждого значения Scope:
scope='function'
Выполняется один раз для каждой функции теста. Часть setup запускается перед каждым тестом с помощью fixture. Часть teardown запускается после каждого теста с использованием fixture. Это область используемая по умолчанию, если параметр scope не указан.
scope='class'
Выполняется один раз для каждого тестового класса, независимо от количества тестовых методов в классе.
scope='module'
Выполняется один раз для каждого модуля, независимо от того, сколько тестовых функций или методов или других фикстур при использовании модуля.
scope='session'
Выполняется один раз за сеанс. Все методы и функции тестирования, использующие фикстуру области сеанса, используют один вызов setup и teardown.
@pytest.fixture(scope='function')
Параметр Autouse
Если мы хотим, чтобы фикстура применялась к каждому тесту без доп указаний, используем параметр autouse:
@pytest.fixture(autouse=True)
Параметр Name
Чтобы переименовать фикстуру:
import pytest
@pytest.fixture(name='lue')
def ultimate_answer_to_life_the_universe_and_everything():
"""Возвращает окончательный ответ."""
return 42
def test_everything(lue):
"""Использует более короткое имя."""
assert lue == 42
Built-in fixtures
tmpdir, tmpdir_factory — фикстура для работы с временными директориями (для создания файлов)
pytestconfig — фикстура для управления аргументами pytest
capsys — работа с stdin и stdout, а так же с отключением захвата этих потоков
monkeypatch — позволяет изменить параметры среды и текущий каталог во время теста
Last updated