【发布时间】:2022-01-25 09:30:44
【问题描述】:
我正在想办法为运行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,但是当测试数据库在测试函数之后回滚数据库时,即使它在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,但我觉得有比这更好的方法。
【问题讨论】:
标签: python django factory-boy