Python factory_boy 生成测试数据
factory_boy库中的工具,用于在测试中生成模拟数据:
1. Sequence: 用于生成一个唯一的序列。每次调用时,它都会返回一个新的值。这对于生成唯一的字段(如用户名或电子邮件地址)非常有用。例如,factory.Sequence(lambda n: f'user{n}@example.com')将生成一个唯一的电子邮件地址。
2. FuzzyChoice: 用于从给定的迭代器(如列表或元组)中随机选择一个元素。例如,FuzzyChoice(['red', 'blue', 'green'])将随机选择一个颜色。
3. FuzzyInteger: 用于生成一个在给定范围内的随机整数。例如,FuzzyInteger(1, 100)将生成一个在1到100之间的随机整数。
4. FuzzyText: 用于生成一个随机字符串。你可以指定长度和字符集。例如,FuzzyText(length=12)将生成一个长度为12的随机字符串。
5. SubFactory: 用于在一个工厂中创建另一个工厂的实例。这对于创建具有复杂关系的模型非常有用。例如,如果你有一个User模型和一个Profile模型,其中Profile模型有一个User的外键,你可以使用SubFactory在ProfileFactory中创建一个User实例。
这是一个例子:
1 class UserFactory(factory.Factory): 2 class Meta: 3 model = User 4 5 username = factory.Sequence(lambda n: f'user{n}') 6 email = factory.Sequence(lambda n: f'user{n}@example.com') 7 8 class ProfileFactory(factory.Factory): 9 class Meta: 10 model = Profile 11 12 user = factory.SubFactory(UserFactory) 13 bio = factory.FuzzyText()
在这个例子中,每次你创建一个ProfileFactory实例时,它都会自动创建一个新的UserFactory实例并将其赋值给Profile的user字段。