Django - Заполнение базы данных в тестовых целях

Если бескомпромиссный сбой, то первый формат имеет смысл. Если Вы хотите быть в состоянии обработать/возвратить все непровальные элементы, необходимо использовать вторую форму. Те были бы моими основными критериями выбора между методами. Лично, если бы это является бескомпромиссным, я не использовал бы вторую форму.

7
задан Enrico Tuvera Jr 7 December 2009 в 02:48
поделиться

4 ответа

Проверить это приложение

https://github.com/aerosol / django-dilla /

Допустим, вы написали свое приложение для блога (о да, ваше любимое!) на Django. Модульные тесты прошли нормально, и все работает очень быстро, даже те сверхдлинные запросы, сгенерированные ORM. Вы добавили несколько постов по категориям, и он по-прежнему стабилен как камень. Вы совершенно уверены, что приложение эффективно и готово к развертыванию в реальном времени. Правильно? Неправильно.

и все выполняется очень быстро, даже те сверхдлинные запросы, сгенерированные ORM. Вы добавили несколько постов по категориям, и он по-прежнему стабилен как камень. Вы совершенно уверены, что приложение эффективно и готово к развертыванию в реальном времени. Правильно? Неправильно.

и все выполняется очень быстро, даже те сверхдлинные запросы, сгенерированные ORM. Вы добавили несколько постов по категориям, и он по-прежнему стабилен как камень. Вы совершенно уверены, что приложение эффективно и готово к развертыванию в реальном времени. Правильно? Неправильно.

7
ответ дан 6 December 2019 в 14:05
поделиться

Для этой цели можно использовать фикстуры и команду управления loaddata .

Один из подходов - сделать это так.

  1. Подготовьте тестовую базу данных.

  2. Используйте dumpdata для создания JSON-экспорта базы данных.

  3. Поместите это в каталог fixtures вашего приложения.

  4. Напишите свои модульные тесты для загрузки этого «приспособления»: https : //docs.djangoproject.com/en/2.2/topics/testing/tools/#django.test.TransactionTestCase.fixtures

5
ответ дан 6 December 2019 в 14:05
поделиться

Я не уверен, зачем вам нужна сериализация . Пока вы настроили файл Django settings.py так, чтобы он указывал на вашу тестовую базу данных, заполнение тестовой базы данных должно быть не чем иным, как сохранением моделей.

for x in range(0, 200):
    m = my_model(title=random_title(), field2=random_string(), ...)
    m.save()

Есть лучшие способы сделать это, но если вам нужен быстрый набор тестов , это правильный путь.

0
ответ дан 6 December 2019 в 14:05
поделиться

Django fixture предоставляет механизм для импорта данных в syncdb . Однако сделать это начальное распространение данных часто проще с помощью кода Python. Метод, который вы описываете, должен работать либо через syncdb, либо через команду управления. Например, через syncdb в my_app / management.py :

def init_data(sender, **kwargs):
    for i in range(1000):
        MyModel(number=i).save()

signals.post_syncdb.connect(init_data)

Или в команде управления в myapp / management / commands / my_command.py :

from django.core.management.base import BaseCommand, CommandError

from models import MyModel

class MyCommand(BaseCommand):
    def handle(self, *args, **options):
        if len(args) > 0:
            raise CommandError('need exactly zero arguments')

        for i in range(1000):
            MyModel(number=i).save()

Затем вы можете экспортировать эти данные в прибор или продолжить импорт с помощью команды управления. Если вы решите продолжить использование сигнала syncdb , вы: Я захочу условно запустить функцию init_data , чтобы предотвратить импорт данных при последующих вызовах syncdb . Когда фикстуры недостаточно, мне лично нравится делать и то, и другое: создать команду управления для импорта данных, но при первом вызове syncdb импорт будет выполнен автоматически. Таким образом, развертывание будет более автоматизированным, но я все равно могу легко внести изменения в исходные данные и повторно запустить импорт.

3
ответ дан 6 December 2019 в 14:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: