


Если тест создаёт файл, передайте проверяемой функции путь из фикстуры tmp_path. Каждый тест получит собственную временную папку, поэтому результат предыдущего запуска не должен подменить проверку нового. На Mentoring.digital покажем это на сохранении JSON и отдельно разберём, что именно доказывает тест.
Постоянная папка рядом с исходниками связывает тесты состоянием диска. Один тест может прочитать файл другого, а забытый артефакт создаёт ложное впечатление успешной записи. При параллельном запуске появляется ещё и соревнование за один путь.
tmp_path даёт объект pathlib.Path, уникальный для тестовой функции. Это удобная граница зависимости: функция получает путь аргументом и не обязана знать, где тестовая среда хранит свои данные.
import json
def save_report(path, report):
path.write_text(
json.dumps(report, ensure_ascii=False),
encoding="utf-8",
)
def test_save_report(tmp_path):
path = tmp_path / "report.json"
expected = {"status": "готово", "count": 2}
save_report(path, expected)
actual = json.loads(path.read_text(encoding="utf-8"))
assert actual == expected
assert sorted(p.name for p in tmp_path.iterdir()) == ["report.json"]Сохраните код в test_report.py и запустите python -m pytest test_report.py. Проверка сравнивает восстановленные данные, включая русскую строку, а не только существование файла. Последняя строка выявляет неожиданные соседние файлы в этой папке.
Равенство словарей не проверяет точное форматирование JSON. Если внешнему потребителю важны отступы или порядок полей, сформулируйте отдельное требование. Пример также не доказывает атомарность записи, устойчивость к заполнению диска или корректность разрешений в рабочей среде.
Если функция должна сама создавать вложенную папку, тест должен передать ещё не существующий вложенный путь. Иначе создание каталога в тесте может скрыть отсутствующую логику приложения. Если функция, наоборот, требует готовый каталог, этот контракт стоит проверить ожидаемой ошибкой.
pytest может сохранять временные каталоги нескольких последних запусков для диагностики. Не записывайте в них реальные ключи и персональные данные. Пользовательский параметр базовой временной директории требует внимательного выбора пути: не направляйте тестовый запуск в папку с нужными файлами.
В существующем проекте начните с одного нестабильного файлового теста: передайте путь явно, уберите общий output.json и сравните результат повторного запуска. При необходимости устройство фикстур можно разобрать с ментором по Python. Успех здесь означает проверенный контракт записи, а не просто зелёный запуск без утверждений.