Финализация фикстур

Введение в тестирование на Python

Alexander Levin

Data Scientist

Что такое финализация фикстуры

  • Финализация фикстуры — процесс очистки («финализации») ресурсов, выделенных или созданных при настройке тестового окружения.

Вспомним аналогию с «пикником»:

  1. Приглашаем друзей и готовим еду
  2. Веселимся!
  3. Убираем за собой — это и есть финализация
Введение в тестирование на Python

Зачем использовать финализацию

Важно очищать окружение после каждого теста. Без финализации возможны серьёзные проблемы:

  • Утечки памяти
  • Низкая скорость выполнения и проблемы с производительностью
  • Некорректные результаты тестов
  • Сбои и ошибки в пайплайне
Введение в тестирование на Python

Когда использовать

Когда использовать:

  • Большие объекты
  • Более одного теста
  • Использование autouse

Когда можно обойтись без:

  • Один простой скрипт с одним тестом
Введение в тестирование на Python

Ленивые вычисления в Python

  • yield — ключевое слово Python, позволяющее создавать генераторы
# Example of generator function
def lazy_increment(n):
    for i in range(n):
        yield i
f = lazy_increment(5)
next(f) # 0
next(f) # 1
next(f) # 2
Введение в тестирование на Python

Как использовать

Как использовать:

  • Заменить return на yield
  • Разместить код финализации после yield
  • Убедиться, что код настройки находится только до yield
Введение в тестирование на Python

Пример финализации

@pytest.fixture
def init_list():
    return []

@pytest.fixture(autouse=True)
def add_numbers_to_list(init_list):
    # Fixture Setup
    init_list.extend([i for i in range(10)])
    # Fixture output
    yield init_list
    # Teardown statement
    init_list.clear()

def test_9(init_list):
    assert 9 in init_list
Введение в тестирование на Python

Итоги

  • Определение: финализация фикстуры — процесс очистки ресурсов, выделенных при настройке.
  • Использование:
    • Ключевое слово yield вместо return
    • Код финализации после yield
  • Преимущества:
    • Предотвращает сбои в программе
    • Предотвращает падение производительности
  • Когда использовать: всегда, если тестов больше одного!
Введение в тестирование на Python

Давайте потренируемся!

Введение в тестирование на Python

Preparing Video For Download...