Фикстуры pytest позволяют создавать временные файлы и автоматически удалять их после теста:
import pytest
import tempfile
import os
@pytest.fixture
def temp_file():
"""Создает временный файл и возвращает его имя."""
with tempfile.NamedTemporaryFile(delete=False) as tmp:
tmp_name = tmp.name
yield tmp_name
os.remove(tmp_name) # Удаляем файл после выполнения теста
def test_use_temp_file(temp_file):
"""Тест, использующий временный файл."""
file_path = temp_file
with open(file_path, 'w') as f:
f.write("Test data")
assert os.path.exists(file_path)
# После завершения теста файл будет автоматически удален.
Пояснения:
tempfile.NamedTemporaryFile(delete=False) чтобы файл не удалялся сразу после закрытия.yield разделяет фикстуру на этапы: создание (до yield) и удаление (после yield).yield вызываем os.remove() для удаления временного файла.temp_file передается в тест как аргумент.Для создания временных файлов и их автоматического удаления после выполнения тестов в Python с использованием pytest, можно использовать фикстуру tmp_path.
Вот пример:
import pytest
import os
@pytest.fixture
def temp_file(tmp_path):
"""
Создает временный файл и возвращает его путь.
После завершения теста файл будет автоматически удален.
"""
d = tmp_path / "sub"
d.mkdir()
p = d / "temp_file.txt"
p.write_text("содержимое файла")
return p
def test_use_temp_file(temp_file):
"""
Тест, использующий временный файл.
"""
path = temp_file
assert os.path.exists(path)
content = path.read_text()
assert content == "содержимое файла"
# после завершения этого теста файл будет удален
Объяснение:
tmp_path: Это встроенная фикстура pytest, которая предоставляет объект pathlib.Path, указывающий на временный каталог, уникальный для каждого теста. Этот каталог и все его содержимое будут автоматически удалены после завершения теста, даже если тест завершится неудачно.temp_file фикстура:
tmp_path в качестве аргумента, получая доступ к временному каталогу.d = tmp_path / "sub", d.mkdir()).p = d / "temp_file.txt").p.write_text("содержимое файла")).pathlib.Path, представляющий путь к созданному файлу.test_use_temp_file функция:
temp_file в качестве аргумента, получая путь к временному файлу, созданному фикстурой.test_use_temp_file pytest автоматически удалит временный каталог и все его содержимое (включая "sub" и "temp_file.txt"), обеспечивая чистую среду для следующих тестов.Преимущества использования tmp_path:
tmp_path работает на разных операционных системах.Альтернативные подходы (менее предпочтительны):
Хотя tmp_path является рекомендуемым способом, можно использовать модули tempfile и os для создания и удаления временных файлов, но это потребует ручного управления удалением, что более подвержено ошибкам и менее удобно.