Как создать временную файловую структуру для тестирования - PullRequest
3 голосов
/ 05 августа 2020

Во время модульного тестирования и функционального тестирования 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

Перед выполнением каждого теста создается пользователь, а во время создания пользователя ему назначается профиль pi c 'по умолчанию. jpg '. Это приводит к сбою каждого теста, поскольку ни папка profile_pics, ни изображение default.jpg не существуют. Если бы он не взломал sh здесь, он бы взломал sh позже, так как он попытался бы сохранить файлы в папках, расположенных в MEDIA, которых не будет в моем временном файле.

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

Спасибо.

1 Ответ

0 голосов
/ 14 августа 2020

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...