Как создать структуру временного файла для тестирования

Во время модульного тестирования и функционального тестирования Selenium создаются файлы, которые впоследствии не очищаются. Я потратил очень много времени, пытаясь заставить django-cleanup работать, но это просто работает ничего такого.

Я полагаю, что мне нужно создать временную файловую структуру, в которую файлы можно загружать во время тестирования, а затем уничтожать. Вот как я создал временный файл MEDIA_ROOT:

MEDIA_ROOT = tempfile.mkdtemp()

@override_settings(MEDIA_ROOT=MEDIA_ROOT)
class UnitTest(TestCase):

    @classmethod
    def tearDownClass(cls): 
        shutil.rmtree(MEDIA_ROOT, ignore_errors=True)
        super().tearDownClass()

Проблема в том, что хотя я и создал временную папку MEDIA_ROOT, она не создает подпапки и файлы.

Моя файловая структура в моем проекте выглядит так

MEDIA_ROOT
    profile_pics
        default.jpg
    user_files

Перед выполнением каждого теста создается пользователь, и во время создания пользователя ему присваивается изображение профиля «default.jpg». Это приводит к сбою каждого теста, поскольку ни папки profile_pics, ни изображения default.jpg не существует. Если он не рухнет здесь, он рухнет позже, поскольку попытается сохранить файлы в папках, расположенных в МЕДИА, которых не будет в моем временном файле.

Как я могу удалить все файлы после тестирования без использования Django Cleanup? Или как я могу создать временный медиафайл (аналогично тому, что я уже делаю), а также файловую структуру внутри него (он также должен включать изображение default.jpg, которое необходимо при создании пользователя)?

Спасибо.


person Brenden    schedule 05.08.2020    source источник


Ответы (1)


Для подготовки ресурсов следует использовать методы setup и tearDown.

class MyViewSetTestCase(TestCase):
    def setUp(self):
        # do directory & files creation here
        pass

    def tearDown(self):
        # do cleanup (remove all dirs & files) here
        pass

setUp вызывается перед каждым тестом и tearDown после каждого теста

Вы можете создать дерево каталогов, используя os.makedirs.

Вы можете удалить дерево каталогов с помощью shutil.rmtree.

person Michael Ushakov    schedule 14.08.2020
comment
Спасибо. Хотя я, возможно, не показал этого в приведенном выше коде, я действительно пытался это сделать. Проблема в том, что os.makedirs создает каталог MEDIA, но не подфайлы и файл изображения в папке MEDIA. Мне также нужно решение для модульных тестов - person Brenden; 15.08.2020
comment
Чуть позже я сделаю для вас пример кода, если я правильно и полностью понимаю вашу проблему - person Michael Ushakov; 16.08.2020