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,但当测试DB在测试函数后回滚DB时,它似乎也回滚了factory-boys创建的伪数据,即使它在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]了解更多信息。

最新更新