我正在尝试一种方法来创建特定模型类型的随机测试数据,以运行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]了解更多信息。