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] для получения дополнительной информации.