Django - Создание случайных фиктивных данных для тестирования, которые не нарушают набор тестов

Я пытаюсь придумать способ создания случайных тестовых данных определенного типа модели для запуска python manage.py test. Например, если у меня есть модель Post, как показано ниже.

model.py

class Post(models.Model):
    uuid = models.UUIDField(primary_key=True)
    created = models.DateTimeField('Created at', auto_now_add=True)
    updated_at = models.DateTimeField('Last updated at', auto_now=True, blank=True, null=True)
    creator = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name="post_creator")
    body = models.CharField(max_length=POST_MAX_LEN, validators=[MinLengthValidator(POST_MIN_LEN)])

Хорошо бы иметь какую-нибудь библиотеку, которая будет генерировать это со случайными body, случайными creator из таблицы пользователя. Я пробовал factory boy, но когда тестовая БД откатывает БД после тестовой функции, кажется, что откатываются и созданные factory boy фиктивные данные, даже если они объявлены в функции setUpTestData. Этот процесс отката вызывает ошибку ограничения, поскольку исходных данных больше не существует. Какая хорошая библиотека или способ создания фиктивных данных для тестирования Django, который не нарушает набор тестов?

dummy_factory.py

from factory.django import DjangoModelFactory

class PostFactory(DjangoModelFactory):
    class Meta:
        model = Post

    creator = factory.Iterator(User.objects.all())
    body = factory.Faker('text')

Примечание:
. Другой вариант - просто создать функцию, скажем make_dummy_post, которая использует Post.objects.create() и случайным образом выбирает User и использует фабричные генераторы для создания body, но я чувствую, что есть лучший способ сделать это, чем этот.

Сначала pip install model_bakery, затем:

from model_bakery import baker


# app_name.model_name
model_obj = baker.make("post.Post")

Здесь [docs] для получения дополнительной информации.

Вернуться на верх