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